mirror of
https://github.com/501351981/vue-office.git
synced 2025-06-15 07:00:00 +08:00
2 lines
2.6 MiB
2 lines
2.6 MiB
var V=Object.defineProperty;var h=(Y,Z,l)=>Z in Y?V(Y,Z,{enumerable:!0,configurable:!0,writable:!0,value:l}):Y[Z]=l;var i=(Y,Z,l)=>(h(Y,typeof Z!="symbol"?Z+"":Z,l),l);import{l as s,g as u,d as p}from"./url-de9b02cf.js";import{_ as J,o as S}from"./function-d9e17b0d.js";/* empty css */import{r as R,o as N,a as x,c as K}from"./index-0390a516.js";const M="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgd29ya2VyLmpzLkxJQ0VOU0UudHh0ICovCnZhciBlLHQ7ZT1nbG9iYWxUaGlzLHQ9KCk9PigoKT0+e3ZhciBlPVssKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldvcmtlclRhc2s9dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTM3KSxzPXIoMjAwKSxjPXIoMTk0KSx1PXIoNCksbD1yKDIzMSksZj1yKDIzMik7ZnVuY3Rpb24gaCgpe2g9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTtjKHYsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoUChbXSkpKTttJiZtIT09dCYmci5jYWxsKG0saSkmJih2PW0pO3ZhciB3PWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YihmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxuKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPWMoZyxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZChlLHQpe3JldHVybiB5KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGcoZSx0KXx8cCgpfWZ1bmN0aW9uIHAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIGcoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHYoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT92KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB2KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24geShlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIG0oZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBiKGUpe3JldHVybiBiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxiKGUpfWZ1bmN0aW9uIHcoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1iKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gUyhlLHQscil7cmV0dXJuIHQmJmsoZS5wcm90b3R5cGUsdCksciYmayhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3codGhpcyxlKSx0aGlzLm5hbWU9dCx0aGlzLnRlcm1pbmF0ZWQ9ITEsdGhpcy5fY2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfXJldHVybiBTKGUsW3trZXk6ImZpbmlzaGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmluaXNoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToidGVybWluYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudGVybWluYXRlZD0hMH19LHtrZXk6ImVuc3VyZU5vdFRlcm1pbmF0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19XSksZX0oKTt0LldvcmtlclRhc2s9eDt2YXIgTyxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3codGhpcyxlKX1yZXR1cm4gUyhlLG51bGwsW3trZXk6InNldHVwIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPSExO3Qub24oInRlc3QiLChmdW5jdGlvbihlKXthfHwoYT0hMCx0LnNlbmQoInRlc3QiLGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl9KSksdC5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsbi5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpLHQub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVEb2N1bWVudEhhbmRsZXIodCxyKX0pKX19LHtrZXk6ImNyZWF0ZURvY3VtZW50SGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcix2PSExLGI9bnVsbCx3PVtdLGs9KDAsbi5nZXRWZXJib3NpdHlMZXZlbCkoKSxTPWUsTz1TLmRvY0lkLEE9Uy5hcGlWZXJzaW9uLEM9IjMuMi4wIjtpZihBIT09Qyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBUEkgdmVyc2lvbiAiJy5jb25jYXQoQSwnIiBkb2VzIG5vdCBtYXRjaCAnKSsndGhlIFdvcmtlciB2ZXJzaW9uICInLmNvbmNhdChDLCciLicpKTt2YXIgRj1bXTtmb3IodmFyIFAgaW5bXSlGLnB1c2goUCk7aWYoRi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgYEFycmF5LnByb3RvdHlwZWAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXM6ICIrRi5qb2luKCIsICIpKyI7IHRodXMgYnJlYWtpbmcgZS5nLiBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBvZiBgQXJyYXlgcy4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtKXt2YXIgVD0iVGhlIGJyb3dzZXIvZW52aXJvbm1lbnQgbGFja3MgbmF0aXZlIHN1cHBvcnQgZm9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSB0aGUgUERGLmpzIGxpYnJhcnkgKGUuZy4gYFJlYWRhYmxlU3RyZWFtYCk7ICI7aWYodS5pc05vZGVKUyl0aHJvdyBuZXcgRXJyb3IoVCsicGxlYXNlIHVzZSBhIGBsZWdhY3lgLWJ1aWxkIGluc3RlYWQuIik7dGhyb3cgbmV3IEVycm9yKFQrInBsZWFzZSB1cGRhdGUgdG8gYSBzdXBwb3J0ZWQgYnJvd3Nlci4iKX12YXIgST1PKyJfd29ya2VyIixFPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKEksTyx0KTtmdW5jdGlvbiBqKCl7aWYodil0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWZ1bmN0aW9uIE0oZSl7dy5wdXNoKGUpfWZ1bmN0aW9uIF8oZSl7ZS5maW5pc2goKTt2YXIgdD13LmluZGV4T2YoZSk7dy5zcGxpY2UodCwxKX1mdW5jdGlvbiBMKGUpe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBSKCl7dmFyIGU7cmV0dXJuIGU9aCgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIG4sYSxpLG8scyxjLHU7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHIuZW5zdXJlRG9jKCJwYXJzZSIsW3RdKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LHIuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIsW3RdKTtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCxyLmVuc3VyZURvYygiY2hlY2tMYXN0UGFnZSIsW3RdKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIsci5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2Nhc2UgMTI6aWYoIShuPWUuc2VudCkpe2UubmV4dD0xODticmVha31yZXR1cm4gTShhPW5ldyB4KCJsb2FkWGZhRm9udHMiKSksZS5uZXh0PTE4LFByb21pc2UuYWxsKFtyLmxvYWRYZmFGb250cyhFLGEpLmNhdGNoKChmdW5jdGlvbihlKXt9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gXyhhKX0pKSxyLmxvYWRYZmFJbWFnZXMoKV0pO2Nhc2UgMTg6cmV0dXJuIGUubmV4dD0yMCxQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoIm51bVBhZ2VzIiksci5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7Y2FzZSAyMDppZihpPWUuc2VudCxvPWQoaSwyKSxzPW9bMF0sYz1vWzFdLCFuKXtlLm5leHQ9MzA7YnJlYWt9cmV0dXJuIGUubmV4dD0yNyxyLmVuc3VyZURvYygiaHRtbEZvclhmYSIpO2Nhc2UgMjc6ZS50MD1lLnNlbnQsZS5uZXh0PTMxO2JyZWFrO2Nhc2UgMzA6ZS50MD1udWxsO2Nhc2UgMzE6cmV0dXJuIHU9ZS50MCxlLmFicnVwdCgicmV0dXJuIix7bnVtUGFnZXM6cyxmaW5nZXJwcmludHM6YyxodG1sRm9yWGZhOnV9KTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSksUj1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe20oaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe20oaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gRS5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbci5lbnN1cmUoZSwicm90YXRlIiksci5lbnN1cmUoZSwicmVmIiksci5lbnN1cmUoZSwidXNlclVuaXQiKSxyLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdD1kKGUsNCk7cmV0dXJue3JvdGF0ZTp0WzBdLHJlZjp0WzFdLHVzZXJVbml0OnRbMl0sdmlldzp0WzNdfX0pKX0pKX0pKSxFLm9uKCJHZXRQYWdlSW5kZXgiLChmdW5jdGlvbihlKXt2YXIgdD1hLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSkpLEUub24oIkdldFBhZ2VMYWJlbHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSksRS5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKX0pKSxFLm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksRS5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpLEUub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSksRS5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLEUub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksRS5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSksRS5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4O3JldHVybiByLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpLEUub24oIkdldE91dGxpbmUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pKSxFLm9uKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcHRpb25hbENvbnRlbnRDb25maWciKX0pKSxFLm9uKCJHZXRQZXJtaXNzaW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIil9KSksRS5vbigiR2V0TWV0YWRhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxyLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKSxFLm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIil9KSksRS5vbigiR2V0RGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKSxFLm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4LG49ZS5pbnRlbnQ7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiR2V0QW5ub3RhdGlvbnM6IHBhZ2UgIi5jb25jYXQodCkpO3JldHVybiBNKHIpLGUuZ2V0QW5ub3RhdGlvbnNEYXRhKEUscixuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gXyhyKSxlfSksKGZ1bmN0aW9uKGUpe18ocil9KSl9KSl9KSksRS5vbigiR2V0RmllbGRPYmplY3RzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKX0pKSxFLm9uKCJIYXNKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImhhc0pTQWN0aW9ucyIpfSkpLEUub24oIkdldENhbGN1bGF0aW9uT3JkZXJJZHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImNhbGN1bGF0aW9uT3JkZXJJZHMiKX0pKSxFLm9uKCJTYXZlRG9jdW1lbnQiLChmdW5jdGlvbihlKXt2YXIgdD1lLmlzUHVyZVhmYSxvPWUubnVtUGFnZXMscz1lLmFubm90YXRpb25TdG9yYWdlLHU9ZS5maWxlbmFtZSxsPVtyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybVJlZiIpLHIuZW5zdXJlRG9jKCJ4cmVmIiksci5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpXSxmPXQ/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShzKTtpZihmKXt2YXIgaCx2PWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1nKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZik7dHJ5e3ZhciBtPWZ1bmN0aW9uKCl7dmFyIGU9ZChoLnZhbHVlLDIpLHQ9ZVswXSxuPWVbMV07bC5wdXNoKHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiU2F2ZSAoZWRpdG9yKTogcGFnZSAiLmNvbmNhdCh0KSk7cmV0dXJuIGUuc2F2ZU5ld0Fubm90YXRpb25zKEUscixuKS5maW5hbGx5KChmdW5jdGlvbigpe18ocil9KSl9KSkpfTtmb3Iodi5zKCk7IShoPXYubigpKS5kb25lOyltKCl9Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9fWlmKHQpbC5wdXNoKHIuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IodmFyIGI9ZnVuY3Rpb24oZSl7bC5wdXNoKHIuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbih0KXt2YXIgcj1uZXcgeCgiU2F2ZTogcGFnZSAiLmNvbmNhdChlKSk7cmV0dXJuIHQuc2F2ZShFLHIscykuZmluYWxseSgoZnVuY3Rpb24oKXtfKHIpfSkpfSkpKX0sdz0wO3c8bzt3KyspYih3KTtyZXR1cm4gUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHIsaT15KHI9ZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0ocil8fGcocil8fHAoKSxvPWlbMF0scz1pWzFdLGw9aVsyXSxmPWlbM10saD1pWzRdLGQ9aS5zbGljZSg1KSx2PVtdLG09bnVsbDtpZih0KXtpZighKG09ZFswXSkpcmV0dXJuIG8uYnl0ZXN9ZWxzZSBpZigwPT09KHY9ZC5mbGF0KDIpKS5sZW5ndGgpcmV0dXJuIG8uYnl0ZXM7dmFyIGI9bCYmcyBpbnN0YW5jZW9mIGEuRGljdCYmdi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uZWVkQXBwZWFyYW5jZXN9KSksdz1zIGluc3RhbmNlb2YgYS5EaWN0JiZzLmdldCgiWEZBIil8fG51bGwsaz1udWxsLFM9ITE7aWYoQXJyYXkuaXNBcnJheSh3KSl7Zm9yKHZhciB4PTAsTz13Lmxlbmd0aDt4PE87eCs9MikiZGF0YXNldHMiPT09d1t4XSYmKGs9d1t4KzFdLFM9ITApO251bGw9PT1rJiYoaz1mLmdldE5ld1RlbXBvcmFyeVJlZigpKX1lbHNlIHcmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpO3ZhciBBPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZi50cmFpbGVyKXt2YXIgQz1PYmplY3QuY3JlYXRlKG51bGwpLEY9Zi50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO0YgaW5zdGFuY2VvZiBhLkRpY3QmJkYuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIHQmJihDW2VdPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQpKX0pKSxBPXtyb290UmVmOmYudHJhaWxlci5nZXRSYXcoIlJvb3QiKXx8bnVsbCxlbmNyeXB0UmVmOmYudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6Zi5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOmYudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvOkMsZmlsZUlkczpmLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpoLGZpbGVuYW1lOnV9fXRyeXtyZXR1cm4oMCxjLmluY3JlbWVudGFsVXBkYXRlKSh7b3JpZ2luYWxEYXRhOm8uYnl0ZXMseHJlZkluZm86QSxuZXdSZWZzOnYseHJlZjpmLGhhc1hmYTohIXcseGZhRGF0YXNldHNSZWY6ayxoYXNYZmFEYXRhc2V0c0VudHJ5OlMsbmVlZEFwcGVhcmFuY2VzOmIsYWNyb0Zvcm1SZWY6bCxhY3JvRm9ybTpzLHhmYURhdGE6bX0pfWZpbmFsbHl7Zi5yZXNldE5ld1RlbXBvcmFyeVJlZigpfX0pKX0pKSxFLm9uKCJHZXRPcGVyYXRvckxpc3QiLChmdW5jdGlvbihlLHQpe3ZhciBhPWUucGFnZUluZGV4O3IuZ2V0UGFnZShhKS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1uZXcgeCgiR2V0T3BlcmF0b3JMaXN0OiBwYWdlICIuY29uY2F0KGEpKTtNKGkpO3ZhciBvPWs+PW4uVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO3IuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOkUsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlfSkudGhlbigoZnVuY3Rpb24oZSl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0T3BlcmF0b3JMaXN0OiB0aW1lPSIpKyIiLmNvbmNhdChEYXRlLm5vdygpLW8sIm1zLCBsZW49IikuY29uY2F0KGUubGVuZ3RoKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXt2YXIgYT1lLnBhZ2VJbmRleDtyLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9bmV3IHgoIkdldFRleHRDb250ZW50OiBwYWdlICIrYSk7TShpKTt2YXIgbz1rPj1uLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDtyLmV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjpFLHRhc2s6aSxzaW5rOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ZS5pbmNsdWRlTWFya2VkQ29udGVudCxjb21iaW5lVGV4dEl0ZW1zOmUuY29tYmluZVRleHRJdGVtc30pLnRoZW4oKGZ1bmN0aW9uKCl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9IikrIiIuY29uY2F0KERhdGUubm93KCktbywibXMiKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpLEUub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmZvbnRGYWxsYmFjayhlLmlkLEUpfSkpLEUub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gci5jbGVhbnVwKCEwKX0pKSxFLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXt2PSEwO3ZhciB0PVtdO2lmKHIpe3IudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3ZhciBhPXIuY2xlYW51cCgpO3QucHVzaChhKSxyPW51bGx9ZWxzZSgwLHMuY2xlYXJHbG9iYWxDYWNoZXMpKCk7YiYmYihuZXcgbi5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtmb3IodmFyIGk9MCxvPXc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07dC5wdXNoKGMuZmluaXNoZWQpLGMudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7RS5kZXN0cm95KCksRT1udWxsfSkpfSkpLEUub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aigpLEUuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gYShlKXtpZihqKCksZSBpbnN0YW5jZW9mIG4uUGFzc3dvcmRFeGNlcHRpb24pe3ZhciB0PW5ldyB4KCJQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgIi5jb25jYXQoZS5jb2RlKSk7TSh0KSxFLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IixlKS50aGVuKChmdW5jdGlvbihlKXt2YXIgbj1lLnBhc3N3b3JkO18odCksci51cGRhdGVQYXNzd29yZChuKSxzKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7Xyh0KSxFLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBlIGluc3RhbmNlb2Ygbi5JbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBuLlVua25vd25FcnJvckV4Y2VwdGlvbj9FLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6RS5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyBuLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKSl9ZnVuY3Rpb24gcygpe2ooKSxMKCExKS50aGVuKHQsKGZ1bmN0aW9uKGUpe2ooKSxlIGluc3RhbmNlb2YgaS5YUmVmUGFyc2VFeGNlcHRpb24/ci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtqKCksTCghMCkudGhlbih0LGEpfSkpOmEoZSl9KSl9aigpLGZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5kYXRhLGE9ZS5wYXNzd29yZCxpPWUuZGlzYWJsZUF1dG9GZXRjaCxzPWUucmFuZ2VDaHVua1NpemUsYz1lLmxlbmd0aCx1PWUuZG9jQmFzZVVybCxsPWUuZW5hYmxlWGZhLGg9ZS5ldmFsdWF0b3JPcHRpb25zLGQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtpZihyKXt0cnl7dD1uZXcgby5Mb2NhbFBkZk1hbmFnZXIoTyxyLGEsRSxoLGwsdSksZC5yZXNvbHZlKHQpfWNhdGNoKGUpe2QucmVqZWN0KGUpfXJldHVybiBkLnByb21pc2V9dmFyIHAsZz1bXTt0cnl7cD1uZXcgZi5QREZXb3JrZXJTdHJlYW0oRSl9Y2F0Y2goZSl7cmV0dXJuIGQucmVqZWN0KGUpLGQucHJvbWlzZX12YXIgdj1wLmdldEZ1bGxSZWFkZXIoKTt2LmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe2lmKHYuaXNSYW5nZVN1cHBvcnRlZCl7aT1pfHx2LmlzU3RyZWFtaW5nU3VwcG9ydGVkLHQ9bmV3IG8uTmV0d29ya1BkZk1hbmFnZXIoTyxwLHttc2dIYW5kbGVyOkUscGFzc3dvcmQ6YSxsZW5ndGg6di5jb250ZW50TGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aSxyYW5nZUNodW5rU2l6ZTpzfSxoLGwsdSk7Zm9yKHZhciBlPTAscj1nO2U8ci5sZW5ndGg7ZSsrKXt2YXIgbj1yW2VdO3Quc2VuZFByb2dyZXNzaXZlRGF0YShuKX1nPVtdLGQucmVzb2x2ZSh0KSxiPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtkLnJlamVjdChlKSxiPW51bGx9KSk7dmFyIHk9MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7di5yZWFkKCkudGhlbigoZnVuY3Rpb24gZShpKXt2YXIgcz1pLnZhbHVlLGY9aS5kb25lO3RyeXtpZihqKCksZilyZXR1cm4gdHx8ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmFycmF5c1RvQnl0ZXMpKGcpO2MmJmUubGVuZ3RoIT09YyYmKDAsbi53YXJuKSgicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7dHJ5e3Q9bmV3IG8uTG9jYWxQZGZNYW5hZ2VyKE8sZSxhLEUsaCxsLHUpLGQucmVzb2x2ZSh0KX1jYXRjaChlKXtkLnJlamVjdChlKX1nPVtdfSgpLHZvaWQoYj1udWxsKTt5Kz0oMCxuLmFycmF5Qnl0ZUxlbmd0aCkocyksdi5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8RS5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp5LHRvdGFsOk1hdGgubWF4KHksdi5jb250ZW50TGVuZ3RofHwwKX0pLHQ/dC5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHMpOmcucHVzaChzKSx2LnJlYWQoKS50aGVuKGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7ZC5yZWplY3QoZSksYj1udWxsfSkpLGI9ZnVuY3Rpb24oZSl7cC5jYW5jZWxBbGxSZXF1ZXN0cyhlKX0sZC5wcm9taXNlfShlKS50aGVuKChmdW5jdGlvbihlKXtpZih2KXRocm93IGUudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpLG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIik7KHI9ZSkucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbigoZnVuY3Rpb24oZSl7RS5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSkpfSkpLnRoZW4ocyxhKX0oZSksZT1udWxsfSkpLEl9fSx7a2V5OiJpbml0aWFsaXplRnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKCJ3b3JrZXIiLCJtYWluIix0KTtlLnNldHVwKHIsdCksci5zZW5kKCJyZWFkeSIsbnVsbCl9fV0pLGV9KCk7dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1BLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhdS5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YoTz1zZWxmKS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBPJiZBLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGkoZSl9KGUpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxhKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGkoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW8oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1vKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09byhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQoZSk7aWYodCl7dmFyIGE9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1vKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5TdHJlYW1UeXBlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRm9udFR5cGU9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkJBU0VMSU5FX0ZBQ1RPUj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXQuQW5ub3RhdGlvblJldmlld1N0YXRlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25Nb2RlPXQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXQuQW5ub3RhdGlvbkZsYWc9dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXQuQW5ub3RhdGlvbkVkaXRvclR5cGU9dC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PXQuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT10LkFib3J0RXhjZXB0aW9uPXZvaWQgMCx0LmFycmF5Qnl0ZUxlbmd0aD1QLHQuYXJyYXlzVG9CeXRlcz1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZigxPT09dCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTtmb3IodmFyIHI9MCxuPTA7bjx0O24rKylyKz1QKGVbbl0pO2Zvcih2YXIgYT0wLGk9bmV3IFVpbnQ4QXJyYXkociksbz0wO288dDtvKyspe3ZhciBzPWVbb107cyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fChzPSJzdHJpbmciPT10eXBlb2Ygcz9GKHMpOm5ldyBVaW50OEFycmF5KHMpKTt2YXIgYz1zLmJ5dGVMZW5ndGg7aS5zZXQocyxhKSxhKz1jfXJldHVybiBpfSx0LmFzc2VydD1mdW5jdGlvbihlLHQpe2V8fHkodCl9LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXsib2JqZWN0Ij09PW8oZSkmJm51bGwhPT1lJiZ2b2lkIDAhPT1lLmxlbmd0aHx8eSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpO3ZhciB0PWUubGVuZ3RoLHI9ODE5MjtpZih0PHIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IodmFyIG49W10sYT0wO2E8dDthKz1yKXt2YXIgaT1NYXRoLm1pbihhK3IsdCkscz1lLnN1YmFycmF5KGEsaSk7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIG4uam9pbigiIil9LHQuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9ITE7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXR0bGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fSksZS5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UucmVzb2x2ZT1mdW5jdGlvbihlKXt0PSEwLHIoZSl9LGUucmVqZWN0PWZ1bmN0aW9uKGUpe3Q9ITAsbihlKX19KSksZX0sdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKHImJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoci5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXt2YXIgbj1lLm1hdGNoKC9cLi9nKTtuJiZuLmxlbmd0aD49MiYmKGU9Imh0dHA6Ly8iLmNvbmNhdChlKSl9aWYoci50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e2U9TShlKX1jYXRjaChlKXt9fXZhciBhPXQ/bmV3IFVSTChlLHQpOm5ldyBVUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0oYSkpcmV0dXJuIGF9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IERhdGU7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX0sdC5nZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBnfSx0LmluZm89ZnVuY3Rpb24oZSl7Zz49cC5JTkZPUyYmY29uc29sZS5sb2coIkluZm86ICIuY29uY2F0KGUpKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09byhlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH0sdC5vYmplY3RGcm9tTWFwPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWEoZSkpKXtyJiYoZT1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxzPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBzPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsbz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e3N8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBvfX19fShlKTt0cnl7Zm9yKGkucygpOyEodD1pLm4oKSkuZG9uZTspe3ZhciBvPShyPXQudmFsdWUsMixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShyKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHIpfHxhKHIsMil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkscz1vWzBdLGM9b1sxXTtuW3NdPWN9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBufSx0Lm9iamVjdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH0sdC5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoZz1lKX0sdC5zaGFkb3c9bSx0LnN0cmluZzMyPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfSx0LnN0cmluZ1RvQnl0ZXM9Rix0LnN0cmluZ1RvUERGU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGVbMF0+PSLDryImJigiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0/dD0idXRmLTE2YmUiOiLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXT90PSJ1dGYtMTZsZSI6IsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKHQ9InV0Zi04IiksdCkpdHJ5e3ZhciByPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLG49RihlKTtyZXR1cm4gci5kZWNvZGUobil9Y2F0Y2goZSl7dignc3RyaW5nVG9QREZTdHJpbmc6ICInLmNvbmNhdChlLCciLicpKX1mb3IodmFyIGE9W10saT0wLG89ZS5sZW5ndGg7aTxvO2krKyl7dmFyIHM9altlLmNoYXJDb2RlQXQoaSldO2EucHVzaChzP1N0cmluZy5mcm9tQ2hhckNvZGUocyk6ZS5jaGFyQXQoaSkpfXJldHVybiBhLmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGOFN0cmluZz1NLHQudW5yZWFjaGFibGU9eSx0LnV0ZjhTdHJpbmdUb1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX0sdC53YXJuPXYsZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZHx8KGdsb2JhbFRoaXMuX3BkZmpzQ29tcGF0aWJpbGl0eUNoZWNrZWQ9ITAscigzKSksdC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXSx0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF0sdC5MSU5FX0ZBQ1RPUj0xLjM1LHQuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzUsdC5CQVNFTElORV9GQUNUT1I9LjI1OTI1OTI1OTI1OTI1OTI0LHQuUmVuZGVyaW5nSW50ZW50RmxhZz17QU5ZOjEsRElTUExBWToyLFBSSU5UOjQsU0FWRTo4LEFOTk9UQVRJT05TX0ZPUk1TOjE2LEFOTk9UQVRJT05TX1NUT1JBR0U6MzIsQU5OT1RBVElPTlNfRElTQUJMRTo2NCxPUExJU1Q6MjU2fSx0LkFubm90YXRpb25Nb2RlPXtESVNBQkxFOjAsRU5BQkxFOjEsRU5BQkxFX0ZPUk1TOjIsRU5BQkxFX1NUT1JBR0U6M30sdC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PSJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIix0LkFubm90YXRpb25FZGl0b3JUeXBlPXtESVNBQkxFOi0xLE5PTkU6MCxGUkVFVEVYVDozLElOSzoxNX0sdC5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT17RlJFRVRFWFRfU0laRToxLEZSRUVURVhUX0NPTE9SOjIsRlJFRVRFWFRfT1BBQ0lUWTozLElOS19DT0xPUjoxMSxJTktfVEhJQ0tORVNTOjEyLElOS19PUEFDSVRZOjEzfSx0LlBlcm1pc3Npb25GbGFnPXtQUklOVDo0LE1PRElGWV9DT05URU5UUzo4LENPUFk6MTYsTU9ESUZZX0FOTk9UQVRJT05TOjMyLEZJTExfSU5URVJBQ1RJVkVfRk9STVM6MjU2LENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6NTEyLEFTU0VNQkxFOjEwMjQsUFJJTlRfSElHSF9RVUFMSVRZOjIwNDh9LHQuVGV4dFJlbmRlcmluZ01vZGU9e0ZJTEw6MCxTVFJPS0U6MSxGSUxMX1NUUk9LRToyLElOVklTSUJMRTozLEZJTExfQUREX1RPX1BBVEg6NCxTVFJPS0VfQUREX1RPX1BBVEg6NSxGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDo2LEFERF9UT19QQVRIOjcsRklMTF9TVFJPS0VfTUFTSzozLEFERF9UT19QQVRIX0ZMQUc6NH0sdC5JbWFnZUtpbmQ9e0dSQVlTQ0FMRV8xQlBQOjEsUkdCXzI0QlBQOjIsUkdCQV8zMkJQUDozfSx0LkFubm90YXRpb25UeXBlPXtURVhUOjEsTElOSzoyLEZSRUVURVhUOjMsTElORTo0LFNRVUFSRTo1LENJUkNMRTo2LFBPTFlHT046NyxQT0xZTElORTo4LEhJR0hMSUdIVDo5LFVOREVSTElORToxMCxTUVVJR0dMWToxMSxTVFJJS0VPVVQ6MTIsU1RBTVA6MTMsQ0FSRVQ6MTQsSU5LOjE1LFBPUFVQOjE2LEZJTEVBVFRBQ0hNRU5UOjE3LFNPVU5EOjE4LE1PVklFOjE5LFdJREdFVDoyMCxTQ1JFRU46MjEsUFJJTlRFUk1BUks6MjIsVFJBUE5FVDoyMyxXQVRFUk1BUks6MjQsVEhSRUVEOjI1LFJFREFDVDoyNn0sdC5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9e01BUktFRDoiTWFya2VkIixSRVZJRVc6IlJldmlldyJ9LHQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXtNQVJLRUQ6Ik1hcmtlZCIsVU5NQVJLRUQ6IlVubWFya2VkIn0sdC5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9e0FDQ0VQVEVEOiJBY2NlcHRlZCIsUkVKRUNURUQ6IlJlamVjdGVkIixDQU5DRUxMRUQ6IkNhbmNlbGxlZCIsQ09NUExFVEVEOiJDb21wbGV0ZWQiLE5PTkU6Ik5vbmUifSx0LkFubm90YXRpb25SZXBseVR5cGU9e0dST1VQOiJHcm91cCIsUkVQTFk6IlIifSx0LkFubm90YXRpb25GbGFnPXtJTlZJU0lCTEU6MSxISURERU46MixQUklOVDo0LE5PWk9PTTo4LE5PUk9UQVRFOjE2LE5PVklFVzozMixSRUFET05MWTo2NCxMT0NLRUQ6MTI4LFRPR0dMRU5PVklFVzoyNTYsTE9DS0VEQ09OVEVOVFM6NTEyfSx0LkFubm90YXRpb25GaWVsZEZsYWc9e1JFQURPTkxZOjEsUkVRVUlSRUQ6MixOT0VYUE9SVDo0LE1VTFRJTElORTo0MDk2LFBBU1NXT1JEOjgxOTIsTk9UT0dHTEVUT09GRjoxNjM4NCxSQURJTzozMjc2OCxQVVNIQlVUVE9OOjY1NTM2LENPTUJPOjEzMTA3MixFRElUOjI2MjE0NCxTT1JUOjUyNDI4OCxGSUxFU0VMRUNUOjEwNDg1NzYsTVVMVElTRUxFQ1Q6MjA5NzE1MixET05PVFNQRUxMQ0hFQ0s6NDE5NDMwNCxET05PVFNDUk9MTDo4Mzg4NjA4LENPTUI6MTY3NzcyMTYsUklDSFRFWFQ6MzM1NTQ0MzIsUkFESU9TSU5VTklTT046MzM1NTQ0MzIsQ09NTUlUT05TRUxDSEFOR0U6NjcxMDg4NjR9LHQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT17U09MSUQ6MSxEQVNIRUQ6MixCRVZFTEVEOjMsSU5TRVQ6NCxVTkRFUkxJTkU6NX0sdC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifSx0LkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifSx0LlBhZ2VBY3Rpb25FdmVudFR5cGU9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifSx0LlN0cmVhbVR5cGU9e1VOS05PV046IlVOS05PV04iLEZMQVRFOiJGTEFURSIsTFpXOiJMWlciLERDVDoiRENUIixKUFg6IkpQWCIsSkJJRzoiSkJJRyIsQTg1OiJBODUiLEFIWDoiQUhYIixDQ0Y6IkNDRiIsUkxYOiJSTFgifSx0LkZvbnRUeXBlPXtVTktOT1dOOiJVTktOT1dOIixUWVBFMToiVFlQRTEiLFRZUEUxU1RBTkRBUkQ6IlRZUEUxU1RBTkRBUkQiLFRZUEUxQzoiVFlQRTFDIixDSURGT05UVFlQRTA6IkNJREZPTlRUWVBFMCIsQ0lERk9OVFRZUEUwQzoiQ0lERk9OVFRZUEUwQyIsVFJVRVRZUEU6IlRSVUVUWVBFIixDSURGT05UVFlQRTI6IkNJREZPTlRUWVBFMiIsVFlQRTM6IlRZUEUzIixPUEVOVFlQRToiT1BFTlRZUEUiLFRZUEUwOiJUWVBFMCIsTU1UWVBFMToiTU1UWVBFMSJ9O3ZhciBwPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9cCx0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX0sdC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX0sdC5VTlNVUFBPUlRFRF9GRUFUVVJFUz17Zm9ybXM6ImZvcm1zIixqYXZhU2NyaXB0OiJqYXZhU2NyaXB0IixzaWduYXR1cmVzOiJzaWduYXR1cmVzIixzbWFzazoic21hc2siLHNoYWRpbmdQYXR0ZXJuOiJzaGFkaW5nUGF0dGVybiIsZXJyb3JUaWxpbmdQYXR0ZXJuOiJlcnJvclRpbGluZ1BhdHRlcm4iLGVycm9yRXh0R1N0YXRlOiJlcnJvckV4dEdTdGF0ZSIsZXJyb3JYT2JqZWN0OiJlcnJvclhPYmplY3QiLGVycm9yRm9udExvYWRUeXBlMzoiZXJyb3JGb250TG9hZFR5cGUzIixlcnJvckZvbnRTdGF0ZToiZXJyb3JGb250U3RhdGUiLGVycm9yRm9udE1pc3Npbmc6ImVycm9yRm9udE1pc3NpbmciLGVycm9yRm9udFRyYW5zbGF0ZToiZXJyb3JGb250VHJhbnNsYXRlIixlcnJvckNvbG9yU3BhY2U6ImVycm9yQ29sb3JTcGFjZSIsZXJyb3JPcGVyYXRvckxpc3Q6ImVycm9yT3BlcmF0b3JMaXN0IixlcnJvckZvbnRUb1VuaWNvZGU6ImVycm9yRm9udFRvVW5pY29kZSIsZXJyb3JGb250TG9hZE5hdGl2ZToiZXJyb3JGb250TG9hZE5hdGl2ZSIsZXJyb3JGb250QnVpbGRQYXRoOiJlcnJvckZvbnRCdWlsZFBhdGgiLGVycm9yRm9udEdldFBhdGg6ImVycm9yRm9udEdldFBhdGgiLGVycm9yTWFya2VkQ29udGVudDoiZXJyb3JNYXJrZWRDb250ZW50IixlcnJvckNvbnRlbnRTdWJTdHJlYW06ImVycm9yQ29udGVudFN1YlN0cmVhbSJ9LHQuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07dmFyIGc9cC5XQVJOSU5HUztmdW5jdGlvbiB2KGUpe2c+PXAuV0FSTklOR1MmJmNvbnNvbGUubG9nKCJXYXJuaW5nOiAiLmNvbmNhdChlKSl9ZnVuY3Rpb24geShlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gbShlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiFuLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5jb25zdHJ1Y3Rvcj09PWUmJnkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uIiksdGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPXJ9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LkJhc2VFeGNlcHRpb249Yjt2YXIgdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJQYXNzd29yZEV4Y2VwdGlvbiIpKS5jb2RlPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5QYXNzd29yZEV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpKS5kZXRhaWxzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249azt2YXIgUz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiSW52YWxpZFBERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0LkludmFsaWRQREZFeGNlcHRpb249Uzt2YXIgeD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0Lk1pc3NpbmdQREZFeGNlcHRpb249eDt2YXIgTz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iKSkuc3RhdHVzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249Tzt2YXIgQT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRm9ybWF0RXJyb3IiKX1yZXR1cm4gYyhyKX0oYik7dC5Gb3JtYXRFcnJvcj1BO3ZhciBDPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJBYm9ydEV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTtmdW5jdGlvbiBGKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmeSgiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcyIpO2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBVaW50OEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09MjU1JmUuY2hhckNvZGVBdChuKTtyZXR1cm4gcn1mdW5jdGlvbiBQKGUpe3JldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9lLmxlbmd0aDp2b2lkIDAhPT1lLmJ5dGVMZW5ndGg/ZS5ieXRlTGVuZ3RoOnZvaWQgeSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYXJyYXlCeXRlTGVuZ3RoIil9dC5BYm9ydEV4Y2VwdGlvbj1DO3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6ImlzTGl0dGxlRW5kaWFuIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsKChlPW5ldyBVaW50OEFycmF5KDQpKVswXT0xLDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXSkpO3ZhciBlfX0se2tleToiaXNFdmFsU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0V2YWxTdXBwb3J0ZWQiLGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSl9fSx7a2V5OiJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcywiaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzKX19LHtrZXk6InBsYXRmb3JtIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcj9tKHRoaXMsInBsYXRmb3JtIix7aXNXaW46ITEsaXNNYWM6ITF9KTptKHRoaXMsInBsYXRmb3JtIix7aXNXaW46bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJXaW4iKSxpc01hYzpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpfSl9fV0pLGV9KCk7dC5GZWF0dXJlVGVzdD1UO3ZhciBJPW4oQXJyYXkoMjU2KS5rZXlzKCkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKX0pKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6Im1ha2VIZXhDb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiIjIi5jb25jYXQoSVtlXSkuY29uY2F0KElbdF0pLmNvbmNhdChJW3JdKX19LHtrZXk6InNjYWxlTWluTWF4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO2VbMF0/KGVbMF08MCYmKHI9dFswXSx0WzBdPXRbMV0sdFsxXT1yKSx0WzBdKj1lWzBdLHRbMV0qPWVbMF0sZVszXTwwJiYocj10WzJdLHRbMl09dFszXSx0WzNdPXIpLHRbMl0qPWVbM10sdFszXSo9ZVszXSk6KHI9dFswXSx0WzBdPXRbMl0sdFsyXT1yLHI9dFsxXSx0WzFdPXRbM10sdFszXT1yLGVbMV08MCYmKHI9dFsyXSx0WzJdPXRbM10sdFszXT1yKSx0WzJdKj1lWzFdLHRbM10qPWVbMV0sZVsyXTwwJiYocj10WzBdLHRbMF09dFsxXSx0WzFdPXIpLHRbMF0qPWVbMl0sdFsxXSo9ZVsyXSksdFswXSs9ZVs0XSx0WzFdKz1lWzRdLHRbMl0rPWVbNV0sdFszXSs9ZVs1XX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX19LHtrZXk6ImFwcGx5VHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX19LHtrZXk6ImFwcGx5SW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX19LHtrZXk6ImdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX19LHtrZXk6ImludmVyc2VUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX19LHtrZXk6InNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydChNYXRoLnBvdyhyK2ksMiktNCoocippLWEqbikpLzIsYz1vK3N8fDEsdT1vLXN8fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQodSldfX0se2tleToibm9ybWFsaXplUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zbGljZSgwKTtyZXR1cm4gZVswXT5lWzJdJiYodFswXT1lWzJdLHRbMl09ZVswXSksZVsxXT5lWzNdJiYodFsxXT1lWzNdLHRbM109ZVsxXSksdH19LHtrZXk6ImludGVyc2VjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLG49TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihyPm4pcmV0dXJuIG51bGw7dmFyIGE9TWF0aC5tYXgoTWF0aC5taW4oZVsxXSxlWzNdKSxNYXRoLm1pbih0WzFdLHRbM10pKSxpPU1hdGgubWluKE1hdGgubWF4KGVbMV0sZVszXSksTWF0aC5tYXgodFsxXSx0WzNdKSk7cmV0dXJuIGE+aT9udWxsOltyLGEsbixpXX19LHtrZXk6ImJlemllckJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzLGMpe2Zvcih2YXIgdSxsLGYsaCxkLHAsZyx2LHk9W10sbT1bW10sW11dLGI9MDtiPDI7KytiKWlmKDA9PT1iPyhsPTYqZS0xMipyKzYqaSx1PS0zKmUrOSpyLTkqaSszKnMsZj0zKnItMyplKToobD02KnQtMTIqYSs2Km8sdT0tMyp0KzkqYS05Km8rMypjLGY9MyphLTMqdCksTWF0aC5hYnModSk8MWUtMTIpe2lmKE1hdGguYWJzKGwpPDFlLTEyKWNvbnRpbnVlOzA8KGg9LWYvbCkmJmg8MSYmeS5wdXNoKGgpfWVsc2UgZz1sKmwtNCpmKnUsdj1NYXRoLnNxcnQoZyksZzwwfHwoMDwoZD0oLWwrdikvKDIqdSkpJiZkPDEmJnkucHVzaChkKSwwPChwPSgtbC12KS8oMip1KSkmJnA8MSYmeS5wdXNoKHApKTtmb3IodmFyIHcsaz15Lmxlbmd0aCxTPWs7ay0tOyl3PTEtKGg9eVtrXSksbVswXVtrXT13KncqdyplKzMqdyp3KmgqciszKncqaCpoKmkraCpoKmgqcyxtWzFdW2tdPXcqdyp3KnQrMyp3KncqaCphKzMqdypoKmgqbytoKmgqaCpjO3JldHVybiBtWzBdW1NdPWUsbVsxXVtTXT10LG1bMF1bUysxXT1zLG1bMV1bUysxXT1jLG1bMF0ubGVuZ3RoPW1bMV0ubGVuZ3RoPVMrMixbTWF0aC5taW4uYXBwbHkoTWF0aCxuKG1bMF0pKSxNYXRoLm1pbi5hcHBseShNYXRoLG4obVsxXSkpLE1hdGgubWF4LmFwcGx5KE1hdGgsbihtWzBdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKG1bMV0pKV19fV0pLGV9KCk7dC5VdGlsPUU7dmFyIGo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcyOCw3MTEsNzEwLDcyOSw3MzMsNzMxLDczMCw3MzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODIyNiw4MjI0LDgyMjUsODIzMCw4MjEyLDgyMTEsNDAyLDgyNjAsODI0OSw4MjUwLDg3MjIsODI0MCw4MjIyLDgyMjAsODIyMSw4MjE2LDgyMTcsODIxOCw4NDgyLDY0MjU3LDY0MjU4LDMyMSwzMzgsMzUyLDM3NiwzODEsMzA1LDMyMiwzMzksMzUzLDM4MiwwLDgzNjRdO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNCk7IWdsb2JhbFRoaXMuYnRvYSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYnRvYT1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWdsb2JhbFRoaXMuYXRvYiYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYXRvYj1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSksIWdsb2JhbFRoaXMuRE9NTWF0cml4JiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5ET01NYXRyaXg9cmVxdWlyZSgiY2FudmFzIikuRE9NTWF0cml4KSwhZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW09cmVxdWlyZSgid2ViLXN0cmVhbXMtcG9seWZpbGwvZGlzdC9wb255ZmlsbC5qcyIpLlJlYWRhYmxlU3RyZWFtKSxBcnJheS5wcm90b3R5cGUuYXR8fHIoNSksVWludDhBcnJheS5wcm90b3R5cGUuYXR8fHIoNzkpLGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lfHxyKDg5KX0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzTm9kZUpTPXZvaWQgMDt2YXIgbj0hKCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgcHJvY2Vzcz8idW5kZWZpbmVkIjpyKHByb2Nlc3MpKXx8cHJvY2VzcysiIiE9IltvYmplY3QgcHJvY2Vzc10ifHxwcm9jZXNzLnZlcnNpb25zLm53fHxwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uJiZwcm9jZXNzLnR5cGUmJiJicm93c2VyIiE9PXByb2Nlc3MudHlwZSk7dC5pc05vZGVKUz1ufSwoZSx0LHIpPT57cig2KTt2YXIgbj1yKDc4KTtlLmV4cG9ydHM9bigiQXJyYXkiLCJhdCIpfSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoNDQpLGk9cig2OCksbz1yKDY2KSxzPXIoNzMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1vKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfX0pLHMoImF0Iil9LChlLHQscik9Pnt2YXIgbj1yKDgpLGE9cig5KS5mLGk9cig0OCksbz1yKDUyKSxzPXIoNDIpLGM9cig2MCksdT1yKDcyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixsLGYsaCxkLHA9ZS50YXJnZXQsZz1lLmdsb2JhbCx2PWUuc3RhdDtpZihyPWc/bjp2P25bcF18fHMocCx7fSk6KG5bcF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gdCl7aWYoaD10W2xdLGY9ZS5kb250Q2FsbEdldFNldD8oZD1hKHIsbCkpJiZkLnZhbHVlOnJbbF0sIXUoZz9sOnArKHY/Ii4iOiIjIikrbCxlLmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBoPT10eXBlb2YgZiljb250aW51ZTtjKGgsZil9KGUuc2hhbXx8ZiYmZi5zaGFtKSYmaShoLCJzaGFtIiwhMCksbyhyLGwsaCxlKX19fSxlPT57dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX07ZS5leHBvcnRzPXQoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8dCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8dCgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHx0KCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDEyKSxpPXIoMTQpLG89cigxNSkscz1yKDE2KSxjPXIoMjIpLHU9cig0MyksbD1yKDQ2KSxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4/ZjpmdW5jdGlvbihlLHQpe2lmKGU9cyhlKSx0PWModCksbCl0cnl7cmV0dXJuIGYoZSx0KX1jYXRjaChlKXt9aWYodShlLHQpKXJldHVybiBvKCFhKGkuZixlLHQpLGVbdF0pfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9bj9hLmJpbmQoYSk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShhLGFyZ3VtZW50cyl9fSwoZSx0LHIpPT57dmFyIG49cigxMSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSkpfSwoZSx0KT0+e3ZhciByPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPW4mJiFyLmNhbGwoezE6Mn0sMSk7dC5mPWE/ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpyfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTcpLGE9cigyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGEoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigxMSksaT1yKDE5KSxvPU9iamVjdCxzPW4oIiIuc3BsaXQpO2UuZXhwb3J0cz1hKChmdW5jdGlvbigpe3JldHVybiFvKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PWkoZSk/cyhlLCIiKTpvKGUpfTpvfSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUsaT1hLmNhbGwsbz1uJiZhLmJpbmQuYmluZChpLGkpO2UuZXhwb3J0cz1uP286ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPW4oe30udG9TdHJpbmcpLGk9bigiIi5zbGljZSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKGEoZSksOCwtMSl9fSwoZSx0LHIpPT57dmFyIG49cigyMSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpdGhyb3cgYSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitlKTtyZXR1cm4gZX19LGU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSwoZSx0LHIpPT57dmFyIG49cigyMyksYT1yKDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLCJzdHJpbmciKTtyZXR1cm4gYSh0KT90OnQrIiJ9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDI0KSxpPXIoMjcpLG89cigzNCkscz1yKDM3KSxjPXIoMzgpLHU9VHlwZUVycm9yLGw9YygidG9QcmltaXRpdmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighYShlKXx8aShlKSlyZXR1cm4gZTt2YXIgcixjPW8oZSxsKTtpZihjKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLHI9bihjLGUsdCksIWEocil8fGkocikpcmV0dXJuIHI7dGhyb3cgdSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PSJudW1iZXIiKSxzKGUsdCl9fSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1yKDI2KSxpPWEuYWxsO2UuZXhwb3J0cz1hLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOm4oZSl8fGU9PT1pfTpmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6bihlKX19LChlLHQscik9Pnt2YXIgbj1yKDI2KSxhPW4uYWxsO2UuZXhwb3J0cz1uLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fGU9PT1hfTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX19LGU9Pnt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGwscj12b2lkIDA9PT10JiZ2b2lkIDAhPT10O2UuZXhwb3J0cz17YWxsOnQsSVNfSFRNTEREQTpyfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjgpLGE9cigyNSksaT1yKDI5KSxvPXIoMzApLHM9T2JqZWN0O2UuZXhwb3J0cz1vP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9bigiU3ltYm9sIik7cmV0dXJuIGEodCkmJmkodC5wcm90b3R5cGUscyhlKSl9fSwoZSx0LHIpPT57dmFyIG49cig4KSxhPXIoMjUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/KHI9bltlXSxhKHIpP3I6dm9pZCAwKTpuW2VdJiZuW2VdW3RdO3ZhciByfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpO2UuZXhwb3J0cz1uKHt9LmlzUHJvdG90eXBlT2YpfSwoZSx0LHIpPT57dmFyIG49cigzMSk7ZS5leHBvcnRzPW4mJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LChlLHQscik9Pnt2YXIgbj1yKDMyKSxhPXIoMTEpO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFhKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFTdHJpbmcoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJm4mJm48NDF9KSl9LChlLHQscik9Pnt2YXIgbixhLGk9cig4KSxvPXIoMzMpLHM9aS5wcm9jZXNzLGM9aS5EZW5vLHU9cyYmcy52ZXJzaW9uc3x8YyYmYy52ZXJzaW9uLGw9dSYmdS52ODtsJiYoYT0obj1sLnNwbGl0KCIuIikpWzBdPjAmJm5bMF08ND8xOisoblswXStuWzFdKSksIWEmJm8mJighKG49by5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fG5bMV0+PTc0KSYmKG49by5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKGE9K25bMV0pLGUuZXhwb3J0cz1hfSwoZSx0LHIpPT57dmFyIG49cigyOCk7ZS5leHBvcnRzPW4oIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIn0sKGUsdCxyKT0+e3ZhciBuPXIoMzUpLGE9cigyMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4gYShyKT92b2lkIDA6bihyKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMzYpLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSxlPT57dmFyIHQ9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigyNSksaT1yKDI0KSxvPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixzO2lmKCJzdHJpbmciPT09dCYmYShyPWUudG9TdHJpbmcpJiYhaShzPW4ocixlKSkpcmV0dXJuIHM7aWYoYShyPWUudmFsdWVPZikmJiFpKHM9bihyLGUpKSlyZXR1cm4gcztpZigic3RyaW5nIiE9PXQmJmEocj1lLnRvU3RyaW5nKSYmIWkocz1uKHIsZSkpKXJldHVybiBzO3Rocm93IG8oIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDM5KSxpPXIoNDMpLG89cig0NSkscz1yKDMxKSxjPXIoMzApLHU9YSgid2tzIiksbD1uLlN5bWJvbCxmPWwmJmwuZm9yLGg9Yz9sOmwmJmwud2l0aG91dFNldHRlcnx8bztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIWkodSxlKXx8IXMmJiJzdHJpbmciIT10eXBlb2YgdVtlXSl7dmFyIHQ9IlN5bWJvbC4iK2U7cyYmaShsLGUpP3VbZV09bFtlXTp1W2VdPWMmJmY/Zih0KTpoKHQpfXJldHVybiB1W2VdfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDApLGE9cig0MSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhW2VdfHwoYVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4yNi4xIixtb2RlOm4/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDIyIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjI2LjEvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sZT0+e2UuZXhwb3J0cz0hMX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDQyKSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLG89bltpXXx8YShpLHt9KTtlLmV4cG9ydHM9b30sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e2EobixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKHIpe25bZV09dH1yZXR1cm4gdH19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoNDQpLGk9bih7fS5oYXNPd25Qcm9wZXJ0eSk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoYShlKSx0KX19LChlLHQscik9Pnt2YXIgbj1yKDIwKSxhPU9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEobihlKSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT0wLGk9TWF0aC5yYW5kb20oKSxvPW4oMS4udG9TdHJpbmcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PWU/IiI6ZSkrIilfIitvKCsrYStpLDM2KX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpLGk9cig0Nyk7ZS5leHBvcnRzPSFuJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI0KSxpPW4uZG9jdW1lbnQsbz1hKGkpJiZhKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDkpLGk9cigxNSk7ZS5leHBvcnRzPW4/ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmYoZSx0LGkoMSxyKSl9OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yLGV9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDQ2KSxpPXIoNTApLG89cig1MSkscz1yKDIyKSxjPVR5cGVFcnJvcix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZj0iZW51bWVyYWJsZSIsaD0iY29uZmlndXJhYmxlIixkPSJ3cml0YWJsZSI7dC5mPW4/aT9mdW5jdGlvbihlLHQscil7aWYobyhlKSx0PXModCksbyhyKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gciYmZCBpbiByJiYhcltkXSl7dmFyIG49bChlLHQpO24mJm5bZF0mJihlW3RdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOmggaW4gcj9yW2hdOm5baF0sZW51bWVyYWJsZTpmIGluIHI/cltmXTpuW2ZdLHdyaXRhYmxlOiExfSl9cmV0dXJuIHUoZSx0LHIpfTp1OmZ1bmN0aW9uKGUsdCxyKXtpZihvKGUpLHQ9cyh0KSxvKHIpLGEpdHJ5e3JldHVybiB1KGUsdCxyKX1jYXRjaChlKXt9aWYoImdldCJpbiByfHwic2V0ImluIHIpdGhyb3cgYygiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKGVbdF09ci52YWx1ZSksZX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpO2UuZXhwb3J0cz1uJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMjQpLGE9U3RyaW5nLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoNDkpLGk9cig1Myksbz1yKDQyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7c3x8KHM9e30pO3ZhciBjPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6dDtpZihuKHIpJiZpKHIsdSxzKSxzLmdsb2JhbCljP2VbdF09cjpvKHQscik7ZWxzZXt0cnl7cy51bnNhZmU/ZVt0XSYmKGM9ITApOmRlbGV0ZSBlW3RdfWNhdGNoKGUpe31jP2VbdF09cjphLmYoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiBlfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigyNSksaT1yKDQzKSxvPXIoMTApLHM9cig1NCkuQ09ORklHVVJBQkxFLGM9cig1NSksdT1yKDU2KSxsPXUuZW5mb3JjZSxmPXUuZ2V0LGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGQ9byYmIW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1oKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHA9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLGc9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXsiU3ltYm9sKCI9PT1TdHJpbmcodCkuc2xpY2UoMCw3KSYmKHQ9IlsiK1N0cmluZyh0KS5yZXBsYWNlKC9eU3ltYm9sXCgoW14pXSopXCkvLCIkMSIpKyJdIiksciYmci5nZXR0ZXImJih0PSJnZXQgIit0KSxyJiZyLnNldHRlciYmKHQ9InNldCAiK3QpLCghaShlLCJuYW1lIil8fHMmJmUubmFtZSE9PXQpJiYobz9oKGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KSxkJiZyJiZpKHIsImFyaXR5IikmJmUubGVuZ3RoIT09ci5hcml0eSYmaChlLCJsZW5ndGgiLHt2YWx1ZTpyLmFyaXR5fSk7dHJ5e3ImJmkociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3Rvcj9vJiZoKGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6ZS5wcm90b3R5cGUmJihlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoKGUpe312YXIgbj1sKGUpO3JldHVybiBpKG4sInNvdXJjZSIpfHwobi5zb3VyY2U9cC5qb2luKCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSksZX07RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPWcoKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykmJmYodGhpcykuc291cmNlfHxjKHRoaXMpfSksInRvU3RyaW5nIil9LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDMpLGk9RnVuY3Rpb24ucHJvdG90eXBlLG89biYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPWEoaSwibmFtZSIpLGM9cyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSx1PXMmJighbnx8biYmbyhpLCJuYW1lIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpzLFBST1BFUjpjLENPTkZJR1VSQUJMRTp1fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigyNSksaT1yKDQxKSxvPW4oRnVuY3Rpb24udG9TdHJpbmcpO2EoaS5pbnNwZWN0U291cmNlKXx8KGkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pLGUuZXhwb3J0cz1pLmluc3BlY3RTb3VyY2V9LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDU3KSxzPXIoOCksYz1yKDI0KSx1PXIoNDgpLGw9cig0MyksZj1yKDQxKSxoPXIoNTgpLGQ9cig1OSkscD0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLGc9cy5UeXBlRXJyb3Isdj1zLldlYWtNYXA7aWYob3x8Zi5zdGF0ZSl7dmFyIHk9Zi5zdGF0ZXx8KGYuc3RhdGU9bmV3IHYpO3kuZ2V0PXkuZ2V0LHkuaGFzPXkuaGFzLHkuc2V0PXkuc2V0LG49ZnVuY3Rpb24oZSx0KXtpZih5LmhhcyhlKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHkuc2V0KGUsdCksdH0sYT1mdW5jdGlvbihlKXtyZXR1cm4geS5nZXQoZSl8fHt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiB5LmhhcyhlKX19ZWxzZXt2YXIgbT1oKCJzdGF0ZSIpO2RbbV09ITAsbj1mdW5jdGlvbihlLHQpe2lmKGwoZSxtKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHUoZSxtLHQpLHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxtKT9lW21dOnt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbSl9fWUuZXhwb3J0cz17c2V0Om4sZ2V0OmEsaGFzOmksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9hKGUpOm4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI7aWYoIWModCl8fChyPWEodCkpLnR5cGUhPT1lKXRocm93IGcoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gcn19fX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI1KSxpPW4uV2Vha01hcDtlLmV4cG9ydHM9YShpKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhpKSl9LChlLHQscik9Pnt2YXIgbj1yKDM5KSxhPXIoNDUpLGk9bigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09YShlKSl9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig0MyksYT1yKDYxKSxpPXIoOSksbz1yKDQ5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgcz1hKHQpLGM9by5mLHU9aS5mLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGY9c1tsXTtuKGUsZil8fHImJm4ocixmKXx8YyhlLGYsdSh0LGYpKX19fSwoZSx0LHIpPT57dmFyIG49cigyOCksYT1yKDE4KSxpPXIoNjIpLG89cig3MSkscz1yKDUxKSxjPWEoW10uY29uY2F0KTtlLmV4cG9ydHM9bigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKHMoZSkpLHI9by5mO3JldHVybiByP2ModCxyKGUpKTp0fX0sKGUsdCxyKT0+e3ZhciBuPXIoNjMpLGE9cig3MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT1yKDQzKSxpPXIoMTYpLG89cig2NCkuaW5kZXhPZixzPXIoNTkpLGM9bihbXS5wdXNoKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWkoZSksdT0wLGw9W107Zm9yKHIgaW4gbikhYShzLHIpJiZhKG4scikmJmMobCxyKTtmb3IoO3QubGVuZ3RoPnU7KWEobixyPXRbdSsrXSkmJih+byhsLHIpfHxjKGwscikpO3JldHVybiBsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTYpLGE9cig2NSksaT1yKDY4KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbyl7dmFyIHMsYz1uKHQpLHU9aShjKSxsPWEobyx1KTtpZihlJiZyIT1yKXtmb3IoO3U+bDspaWYoKHM9Y1tsKytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7dT5sO2wrKylpZigoZXx8bCBpbiBjKSYmY1tsXT09PXIpcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpvKCEwKSxpbmRleE9mOm8oITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/YShyK3QsMCk6aShyLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDpuKHQpfX0sZT0+e3ZhciB0PU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3ZhciBuPStlO3JldHVybihuPjA/cjp0KShuKX19LChlLHQscik9Pnt2YXIgbj1yKDY5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5sZW5ndGgpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/YShuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxlPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LChlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LChlLHQscik9Pnt2YXIgbj1yKDExKSxhPXIoMjUpLGk9LyN8XC5wcm90b3R5cGVcLi8sbz1mdW5jdGlvbihlLHQpe3ZhciByPWNbcyhlKV07cmV0dXJuIHI9PWx8fHIhPXUmJihhKHQpP24odCk6ISF0KX0scz1vLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoaSwiLiIpLnRvTG93ZXJDYXNlKCl9LGM9by5kYXRhPXt9LHU9by5OQVRJVkU9Ik4iLGw9by5QT0xZRklMTD0iUCI7ZS5leHBvcnRzPW99LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoNzQpLGk9cig0OSkuZixvPW4oInVuc2NvcGFibGVzIikscz1BcnJheS5wcm90b3R5cGU7bnVsbD09c1tvXSYmaShzLG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTphKG51bGwpfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Nbb11bZV09ITB9fSwoZSx0LHIpPT57dmFyIG4sYT1yKDUxKSxpPXIoNzUpLG89cig3MCkscz1yKDU5KSxjPXIoNzcpLHU9cig0NyksbD1yKDU4KSxmPSJwcm90b3R5cGUiLGg9InNjcmlwdCIsZD1sKCJJRV9QUk9UTyIpLHA9ZnVuY3Rpb24oKXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIjwiK2grIj4iK2UrIjwvIitoKyI+In0sdj1mdW5jdGlvbihlKXtlLndyaXRlKGcoIiIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0seT1mdW5jdGlvbigpe3RyeXtuPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKGUpe312YXIgZSx0LHI7eT0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbj92KG4pOih0PXUoImlmcmFtZSIpLHI9ImphdmEiK2grIjoiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcociksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShnKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTp2KG4pO2Zvcih2YXIgYT1vLmxlbmd0aDthLS07KWRlbGV0ZSB5W2ZdW29bYV1dO3JldHVybiB5KCl9O3NbZF09ITAsZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhwW2ZdPWEoZSkscj1uZXcgcCxwW2ZdPW51bGwscltkXT1lKTpyPXkoKSx2b2lkIDA9PT10P3I6aS5mKHIsdCl9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDUwKSxpPXIoNDkpLG89cig1MSkscz1yKDE2KSxjPXIoNzYpO3QuZj1uJiYhYT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciByLG49cyh0KSxhPWModCksdT1hLmxlbmd0aCxsPTA7dT5sOylpLmYoZSxyPWFbbCsrXSxuW3JdKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDYzKSxhPXIoNzApO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LChlLHQscik9Pnt2YXIgbj1yKDI4KTtlLmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShuW2VdLnByb3RvdHlwZVt0XSl9fSwoZSx0LHIpPT57cig4MCl9LChlLHQscik9Pnt2YXIgbj1yKDgxKSxhPXIoNjgpLGk9cig2Niksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzKSxyPWEodCksbj1pKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfSkpfSwoZSx0LHIpPT57dmFyIG4sYSxpLG89cig4Mikscz1yKDEwKSxjPXIoOCksdT1yKDI1KSxsPXIoMjQpLGY9cig0MyksaD1yKDgzKSxkPXIoMzYpLHA9cig0OCksZz1yKDUyKSx2PXIoNDkpLmYseT1yKDI5KSxtPXIoODUpLGI9cig4Nyksdz1yKDM4KSxrPXIoNDUpLFM9cig1NikseD1TLmVuZm9yY2UsTz1TLmdldCxBPWMuSW50OEFycmF5LEM9QSYmQS5wcm90b3R5cGUsRj1jLlVpbnQ4Q2xhbXBlZEFycmF5LFA9RiYmRi5wcm90b3R5cGUsVD1BJiZtKEEpLEk9QyYmbShDKSxFPU9iamVjdC5wcm90b3R5cGUsaj1jLlR5cGVFcnJvcixNPXcoInRvU3RyaW5nVGFnIiksXz1rKCJUWVBFRF9BUlJBWV9UQUciKSxMPSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFI9byYmISFiJiYiT3BlcmEiIT09aChjLm9wZXJhKSxOPSExLEQ9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxCPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sVT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpO2lmKGwodCkpe3ZhciByPU8odCk7cmV0dXJuIHImJmYocixMKT9yW0xdOlUodCl9fSwkPWZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIGYoRCx0KXx8ZihCLHQpfTtmb3IobiBpbiBEKShpPShhPWNbbl0pJiZhLnByb3RvdHlwZSk/eChpKVtMXT1hOlI9ITE7Zm9yKG4gaW4gQikoaT0oYT1jW25dKSYmYS5wcm90b3R5cGUpJiYoeChpKVtMXT1hKTtpZigoIVJ8fCF1KFQpfHxUPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKFQ9ZnVuY3Rpb24oKXt0aHJvdyBqKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxSKSlmb3IobiBpbiBEKWNbbl0mJmIoY1tuXSxUKTtpZigoIVJ8fCFJfHxJPT09RSkmJihJPVQucHJvdG90eXBlLFIpKWZvcihuIGluIEQpY1tuXSYmYihjW25dLnByb3RvdHlwZSxJKTtpZihSJiZtKFApIT09SSYmYihQLEkpLHMmJiFmKEksTSkpZm9yKG4gaW4gTj0hMCx2KEksTSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyk/dGhpc1tfXTp2b2lkIDB9fSksRCljW25dJiZwKGNbbl0sXyxuKTtlLmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6UixUWVBFRF9BUlJBWV9UQUc6TiYmXyxhVHlwZWRBcnJheTpmdW5jdGlvbihlKXtpZigkKGUpKXJldHVybiBlO3Rocm93IGooIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe2lmKHUoZSkmJighYnx8eShULGUpKSlyZXR1cm4gZTt0aHJvdyBqKGQoZSkrIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKHMpe2lmKHIpZm9yKHZhciBhIGluIEQpe3ZhciBpPWNbYV07aWYoaSYmZihpLnByb3RvdHlwZSxlKSl0cnl7ZGVsZXRlIGkucHJvdG90eXBlW2VdfWNhdGNoKHIpe3RyeXtpLnByb3RvdHlwZVtlXT10fWNhdGNoKGUpe319fUlbZV0mJiFyfHxnKEksZSxyP3Q6UiYmQ1tlXXx8dCxuKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7aWYocyl7aWYoYil7aWYocilmb3IobiBpbiBEKWlmKChhPWNbbl0pJiZmKGEsZSkpdHJ5e2RlbGV0ZSBhW2VdfWNhdGNoKGUpe31pZihUW2VdJiYhcilyZXR1cm47dHJ5e3JldHVybiBnKFQsZSxyP3Q6UiYmVFtlXXx8dCl9Y2F0Y2goZSl7fX1mb3IobiBpbiBEKSEoYT1jW25dKXx8YVtlXSYmIXJ8fGcoYSxlLHQpfX0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOlUsaXNWaWV3OmZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIkRhdGFWaWV3Ij09PXR8fGYoRCx0KXx8ZihCLHQpfSxpc1R5cGVkQXJyYXk6JCxUeXBlZEFycmF5OlQsVHlwZWRBcnJheVByb3RvdHlwZTpJfX0sZT0+e2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDI1KSxpPXIoMTkpLG89cigzOCkoInRvU3RyaW5nVGFnIikscz1PYmplY3QsYz0iQXJndW1lbnRzIj09aShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1uP2k6ZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1zKGUpLG8pKT9yOmM/aSh0KToiT2JqZWN0Ij09KG49aSh0KSkmJmEodC5jYWxsZWUpPyJBcmd1bWVudHMiOm59fSwoZSx0LHIpPT57dmFyIG49e307bltyKDM4KSgidG9TdHJpbmdUYWciKV09InoiLGUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcobil9LChlLHQscik9Pnt2YXIgbj1yKDQzKSxhPXIoMjUpLGk9cig0NCksbz1yKDU4KSxzPXIoODYpLGM9bygiSUVfUFJPVE8iKSx1PU9iamVjdCxsPXUucHJvdG90eXBlO2UuZXhwb3J0cz1zP3UuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtpZihuKHQsYykpcmV0dXJuIHRbY107dmFyIHI9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYShyKSYmdCBpbnN0YW5jZW9mIHI/ci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIHU/bDpudWxsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cig1MSksaT1yKDg4KTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxyPXt9O3RyeXsoZT1uKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0KSkocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBhKHIpLGkobiksdD9lKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApfSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8bihlKSlyZXR1cm4gZTt0aHJvdyBpKCJDYW4ndCBzZXQgIithKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LChlLHQscik9PntyKDkwKSxyKDk3KSxyKDk5KSxyKDEyMikscigxMjQpO3ZhciBuPXIoMTMzKTtlLmV4cG9ydHM9bi5zdHJ1Y3R1cmVkQ2xvbmV9LChlLHQscik9Pnt2YXIgbj1yKDE2KSxhPXIoNzMpLGk9cig5MSksbz1yKDU2KSxzPXIoNDkpLmYsYz1yKDkyKSx1PXIoOTYpLGw9cig0MCksZj1yKDEwKSxoPSJBcnJheSBJdGVyYXRvciIsZD1vLnNldCxwPW8uZ2V0dGVyRm9yKGgpO2UuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7ZCh0aGlzLHt0eXBlOmgsdGFyZ2V0Om4oZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPXAodGhpcyksdD1lLnRhcmdldCxyPWUua2luZCxuPWUuaW5kZXgrKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx1KHZvaWQgMCwhMCkpOnUoImtleXMiPT1yP246InZhbHVlcyI9PXI/dFtuXTpbbix0W25dXSwhMSl9KSwidmFsdWVzIik7dmFyIGc9aS5Bcmd1bWVudHM9aS5BcnJheTtpZihhKCJrZXlzIiksYSgidmFsdWVzIiksYSgiZW50cmllcyIpLCFsJiZmJiYidmFsdWVzIiE9PWcubmFtZSl0cnl7cyhnLCJuYW1lIix7dmFsdWU6InZhbHVlcyJ9KX1jYXRjaChlKXt9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTIpLGk9cig0MCksbz1yKDU0KSxzPXIoMjUpLGM9cig5MyksdT1yKDg1KSxsPXIoODcpLGY9cig5NSksaD1yKDQ4KSxkPXIoNTIpLHA9cigzOCksZz1yKDkxKSx2PXIoOTQpLHk9by5QUk9QRVIsbT1vLkNPTkZJR1VSQUJMRSxiPXYuSXRlcmF0b3JQcm90b3R5cGUsdz12LkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsaz1wKCJpdGVyYXRvciIpLFM9ImtleXMiLHg9InZhbHVlcyIsTz0iZW50cmllcyIsQT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyxwLHYsQyl7YyhyLHQsbyk7dmFyIEYsUCxULEk9ZnVuY3Rpb24oZSl7aWYoZT09PXAmJkwpcmV0dXJuIEw7aWYoIXcmJmUgaW4gTSlyZXR1cm4gTVtlXTtzd2l0Y2goZSl7Y2FzZSBTOmNhc2UgeDpjYXNlIE86cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LEU9dCsiIEl0ZXJhdG9yIixqPSExLE09ZS5wcm90b3R5cGUsXz1NW2tdfHxNWyJAQGl0ZXJhdG9yIl18fHAmJk1bcF0sTD0hdyYmX3x8SShwKSxSPSJBcnJheSI9PXQmJk0uZW50cmllc3x8XztpZihSJiYoRj11KFIuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJkYubmV4dCYmKGl8fHUoRik9PT1ifHwobD9sKEYsYik6cyhGW2tdKXx8ZChGLGssQSkpLGYoRixFLCEwLCEwKSxpJiYoZ1tFXT1BKSkseSYmcD09eCYmXyYmXy5uYW1lIT09eCYmKCFpJiZtP2goTSwibmFtZSIseCk6KGo9ITAsTD1mdW5jdGlvbigpe3JldHVybiBhKF8sdGhpcyl9KSkscClpZihQPXt2YWx1ZXM6SSh4KSxrZXlzOnY/TDpJKFMpLGVudHJpZXM6SShPKX0sQylmb3IoVCBpbiBQKSh3fHxqfHwhKFQgaW4gTSkpJiZkKE0sVCxQW1RdKTtlbHNlIG4oe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDp3fHxqfSxQKTtyZXR1cm4gaSYmIUN8fE1ba109PT1MfHxkKE0sayxMLHtuYW1lOnB9KSxnW3RdPUwsUH19LChlLHQscik9Pnt2YXIgbj1yKDk0KS5JdGVyYXRvclByb3RvdHlwZSxhPXIoNzQpLGk9cigxNSksbz1yKDk1KSxzPXIoOTEpLGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHUpe3ZhciBsPXQrIiBJdGVyYXRvciI7cmV0dXJuIGUucHJvdG90eXBlPWEobix7bmV4dDppKCshdSxyKX0pLG8oZSxsLCExLCEwKSxzW2xdPWMsZX19LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDExKSxzPXIoMjUpLGM9cigyNCksdT1yKDc0KSxsPXIoODUpLGY9cig1MiksaD1yKDM4KSxkPXIoNDApLHA9aCgiaXRlcmF0b3IiKSxnPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KGE9bChsKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYobj1hKTpnPSEwKSwhYyhuKXx8bygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gbltwXS5jYWxsKGUpIT09ZX0pKT9uPXt9OmQmJihuPXUobikpLHMobltwXSl8fGYobixwLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6bixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmd9fSwoZSx0LHIpPT57dmFyIG49cig0OSkuZixhPXIoNDMpLGk9cigzOCkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhciYmKGU9ZS5wcm90b3R5cGUpLGUmJiFhKGUsaSkmJm4oZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDUyKSxpPXIoOTgpO258fGEoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGkse3Vuc2FmZTohMH0pfSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDgzKTtlLmV4cG9ydHM9bj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrYSh0aGlzKSsiXSJ9fSwoZSx0LHIpPT57cigxMDApfSwoZSx0LHIpPT57cigxMDEpKCJNYXAiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTkpKX0sKGUsdCxyKT0+e3ZhciBuPXIoNyksYT1yKDgpLGk9cigxOCksbz1yKDcyKSxzPXIoNTIpLGM9cigxMDIpLHU9cigxMDkpLGw9cigxMTYpLGY9cigyNSksaD1yKDIxKSxkPXIoMjQpLHA9cigxMSksZz1yKDExNyksdj1yKDk1KSx5PXIoMTE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBtPS0xIT09ZS5pbmRleE9mKCJNYXAiKSxiPS0xIT09ZS5pbmRleE9mKCJXZWFrIiksdz1tPyJzZXQiOiJhZGQiLGs9YVtlXSxTPWsmJmsucHJvdG90eXBlLHg9ayxPPXt9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShTW2VdKTtzKFMsZSwiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIShiJiYhZChlKSkmJnQodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4gYiYmIWQoZSk/dm9pZCAwOnQodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKGImJiFkKGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQodGhpcywwPT09ZT8wOmUsciksdGhpc30pfTtpZihvKGUsIWYoayl8fCEoYnx8Uy5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IGspLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PXIuZ2V0Q29uc3RydWN0b3IodCxlLG0sdyksYy5lbmFibGUoKTtlbHNlIGlmKG8oZSwhMCkpe3ZhciBDPW5ldyB4LEY9Q1t3XShiP3t9Oi0wLDEpIT1DLFA9cCgoZnVuY3Rpb24oKXtDLmhhcygxKX0pKSxUPWcoKGZ1bmN0aW9uKGUpe25ldyBrKGUpfSkpLEk9IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBrLHQ9NTt0LS07KWVbd10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO1R8fCgoeD10KChmdW5jdGlvbihlLHQpe2woZSxTKTt2YXIgcj15KG5ldyBrLGUseCk7cmV0dXJuIGgodCl8fHUodCxyW3ddLHt0aGF0OnIsQVNfRU5UUklFUzptfSkscn0pKSkucHJvdG90eXBlPVMsUy5jb25zdHJ1Y3Rvcj14KSwoUHx8SSkmJihBKCJkZWxldGUiKSxBKCJoYXMiKSxtJiZBKCJnZXQiKSksKEl8fEYpJiZBKHcpLGImJlMuY2xlYXImJmRlbGV0ZSBTLmNsZWFyfXJldHVybiBPW2VdPXgsbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDp4IT1rfSxPKSx2KHgsZSksYnx8ci5zZXRTdHJvbmcoeCxlLG0pLHh9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTgpLGk9cig1OSksbz1yKDI0KSxzPXIoNDMpLGM9cig0OSkuZix1PXIoNjIpLGw9cigxMDMpLGY9cigxMDYpLGg9cig0NSksZD1yKDEwOCkscD0hMSxnPWgoIm1ldGEiKSx2PTAseT1mdW5jdGlvbihlKXtjKGUsZyx7dmFsdWU6e29iamVjdElEOiJPIit2Kyssd2Vha0RhdGE6e319fSl9LG09ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXttLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgZT11LmYsdD1hKFtdLnNwbGljZSkscj17fTtyW2ddPTEsZShyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUociksYT0wLGk9bi5sZW5ndGg7YTxpO2ErKylpZihuW2FdPT09Zyl7dChuLGEsMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6bC5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFzKGUsZykpe2lmKCFmKGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7eShlKX1yZXR1cm4gZVtnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24oZSx0KXtpZighcyhlLGcpKXtpZighZihlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTt5KGUpfXJldHVybiBlW2ddLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZCYmcCYmZihlKSYmIXMoZSxnKSYmeShlKSxlfX07aVtnXT0hMH0sKGUsdCxyKT0+e3ZhciBuPXIoMTkpLGE9cigxNiksaT1yKDYyKS5mLG89cigxMDQpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gcyYmIldpbmRvdyI9PW4oZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBpKGUpfWNhdGNoKGUpe3JldHVybiBvKHMpfX0oZSk6aShhKGUpKX19LChlLHQscik9Pnt2YXIgbj1yKDY1KSxhPXIoNjgpLGk9cigxMDUpLG89QXJyYXkscz1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYz1hKGUpLHU9bih0LGMpLGw9bih2b2lkIDA9PT1yP2M6cixjKSxmPW8ocyhsLXUsMCkpLGg9MDt1PGw7dSsrLGgrKylpKGYsaCxlW3VdKTtyZXR1cm4gZi5sZW5ndGg9aCxmfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjIpLGE9cig0OSksaT1yKDE1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPW4odCk7byBpbiBlP2EuZihlLG8saSgwLHIpKTplW29dPXJ9fSwoZSx0LHIpPT57dmFyIG49cigxMSksYT1yKDI0KSxpPXIoMTkpLG89cigxMDcpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxjPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTtlLmV4cG9ydHM9Y3x8bz9mdW5jdGlvbihlKXtyZXR1cm4hIWEoZSkmJighb3x8IkFycmF5QnVmZmVyIiE9aShlKSkmJighc3x8cyhlKSl9OnN9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYSIse3ZhbHVlOjh9KX19KSl9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LChlLHQscik9Pnt2YXIgbj1yKDExMCksYT1yKDEyKSxpPXIoNTEpLG89cigzNikscz1yKDExMiksYz1yKDY4KSx1PXIoMjkpLGw9cigxMTMpLGY9cigxMTQpLGg9cigxMTUpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxnPXAucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHYseSxtLGIsdyxrLFMseD1yJiZyLnRoYXQsTz0hKCFyfHwhci5BU19FTlRSSUVTKSxBPSEoIXJ8fCFyLklTX1JFQ09SRCksQz0hKCFyfHwhci5JU19JVEVSQVRPUiksRj0hKCFyfHwhci5JTlRFUlJVUFRFRCksUD1uKHQseCksVD1mdW5jdGlvbihlKXtyZXR1cm4gdiYmaCh2LCJub3JtYWwiLGUpLG5ldyBwKCEwLGUpfSxJPWZ1bmN0aW9uKGUpe3JldHVybiBPPyhpKGUpLEY/UChlWzBdLGVbMV0sVCk6UChlWzBdLGVbMV0pKTpGP1AoZSxUKTpQKGUpfTtpZihBKXY9ZS5pdGVyYXRvcjtlbHNlIGlmKEMpdj1lO2Vsc2V7aWYoISh5PWYoZSkpKXRocm93IGQobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMoeSkpe2ZvcihtPTAsYj1jKGUpO2I+bTttKyspaWYoKHc9SShlW21dKSkmJnUoZyx3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHAoITEpfXY9bChlLHkpfWZvcihrPUE/ZS5uZXh0OnYubmV4dDshKFM9YShrLHYpKS5kb25lOyl7dHJ5e3c9SShTLnZhbHVlKX1jYXRjaChlKXtoKHYsInRocm93IixlKX1pZigib2JqZWN0Ij09dHlwZW9mIHcmJncmJnUoZyx3KSlyZXR1cm4gd31yZXR1cm4gbmV3IHAoITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPXIoMzUpLGk9cigxMyksbz1uKG4uYmluZCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSksdm9pZCAwPT09dD9lOmk/byhlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiRnVuY3Rpb24iPT09bihlKSlyZXR1cm4gYShlKX19LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoOTEpLGk9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihhLkFycmF5PT09ZXx8b1tpXT09PWUpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigzNSksaT1yKDUxKSxvPXIoMzYpLHM9cigxMTQpLGM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKGUpOnQ7aWYoYShyKSlyZXR1cm4gaShuKHIsZSkpO3Rocm93IGMobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoODMpLGE9cigzNCksaT1yKDIxKSxvPXIoOTEpLHM9cigzOCkoIml0ZXJhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiBhKGUscyl8fGEoZSwiQEBpdGVyYXRvciIpfHxvW24oZSldfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cig1MSksaT1yKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLHM7YShlKTt0cnl7aWYoIShvPWkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyByO3JldHVybiByfW89bihvLGUpfWNhdGNoKGUpe3M9ITAsbz1lfWlmKCJ0aHJvdyI9PT10KXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBhKG8pLHJ9fSwoZSx0LHIpPT57dmFyIG49cigyOSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobih0LGUpKXJldHVybiBlO3Rocm93IGEoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwoZSx0LHIpPT57dmFyIG49cigzOCkoIml0ZXJhdG9yIiksYT0hMTt0cnl7dmFyIGk9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXthPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFhKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgaT17fTtpW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gcn19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMjQpLGk9cig4Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyxzO3JldHVybiBpJiZuKG89dC5jb25zdHJ1Y3RvcikmJm8hPT1yJiZhKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmkoZSxzKSxlfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDkpLmYsYT1yKDc0KSxpPXIoMTIwKSxvPXIoMTEwKSxzPXIoMTE2KSxjPXIoMjEpLHU9cigxMDkpLGw9cig5MiksZj1yKDk2KSxoPXIoMTIxKSxkPXIoMTApLHA9cigxMDIpLmZhc3RLZXksZz1yKDU2KSx2PWcuc2V0LHk9Zy5nZXR0ZXJGb3I7ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQscixsKXt2YXIgZj1lKChmdW5jdGlvbihlLG4pe3MoZSxoKSx2KGUse3R5cGU6dCxpbmRleDphKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxkfHwoZS5zaXplPTApLGMobil8fHUobixlW2xdLHt0aGF0OmUsQVNfRU5UUklFUzpyfSl9KSksaD1mLnByb3RvdHlwZSxnPXkodCksbT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPWcoZSksbz1iKGUsdCk7cmV0dXJuIG8/by52YWx1ZT1yOihpLmxhc3Q9bz17aW5kZXg6YT1wKHQsITApLGtleTp0LHZhbHVlOnIscHJldmlvdXM6bj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9byksbiYmKG4ubmV4dD1vKSxkP2kuc2l6ZSsrOmUuc2l6ZSsrLCJGIiE9PWEmJihpLmluZGV4W2FdPW8pKSxlfSxiPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1nKGUpLGE9cCh0KTtpZigiRiIhPT1hKXJldHVybiBuLmluZGV4W2FdO2ZvcihyPW4uZmlyc3Q7cjtyPXIubmV4dClpZihyLmtleT09dClyZXR1cm4gcn07cmV0dXJuIGkoaCx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9Zyh0aGlzKSx0PWUuaW5kZXgscj1lLmZpcnN0O3I7KXIucmVtb3ZlZD0hMCxyLnByZXZpb3VzJiYoci5wcmV2aW91cz1yLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgdFtyLmluZGV4XSxyPXIubmV4dDtlLmZpcnN0PWUubGFzdD12b2lkIDAsZD9lLnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1nKHQpLG49Yih0LGUpO2lmKG4pe3ZhciBhPW4ubmV4dCxpPW4ucHJldmlvdXM7ZGVsZXRlIHIuaW5kZXhbbi5pbmRleF0sbi5yZW1vdmVkPSEwLGkmJihpLm5leHQ9YSksYSYmKGEucHJldmlvdXM9aSksci5maXJzdD09biYmKHIuZmlyc3Q9YSksci5sYXN0PT1uJiYoci5sYXN0PWkpLGQ/ci5zaXplLS06dC5zaXplLS19cmV0dXJuISFufSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWcodGhpcyksbj1vKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3Q9dD90Lm5leHQ6ci5maXJzdDspZm9yKG4odC52YWx1ZSx0LmtleSx0aGlzKTt0JiZ0LnJlbW92ZWQ7KXQ9dC5wcmV2aW91c30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhYih0aGlzLGUpfX0pLGkoaCxyP3tnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Yih0aGlzLGUpO3JldHVybiB0JiZ0LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbSh0aGlzLDA9PT1lPzA6ZSx0KX19OnthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG0odGhpcyxlPTA9PT1lPzA6ZSxlKX19KSxkJiZuKGgsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKS5zaXplfX0pLGZ9LHNldFN0cm9uZzpmdW5jdGlvbihlLHQscil7dmFyIG49dCsiIEl0ZXJhdG9yIixhPXkodCksaT15KG4pO2woZSx0LChmdW5jdGlvbihlLHQpe3YodGhpcyx7dHlwZTpuLHRhcmdldDplLHN0YXRlOmEoZSksa2luZDp0LGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9aSh0aGlzKSx0PWUua2luZCxyPWUubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gZS50YXJnZXQmJihlLmxhc3Q9cj1yP3IubmV4dDplLnN0YXRlLmZpcnN0KT9mKCJrZXlzIj09dD9yLmtleToidmFsdWVzIj09dD9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KGUudGFyZ2V0PXZvaWQgMCxmKHZvaWQgMCwhMCkpfSkscj8iZW50cmllcyI6InZhbHVlcyIsIXIsITApLGgodCl9fX0sKGUsdCxyKT0+e3ZhciBuPXIoNTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhIGluIHQpbihlLGEsdFthXSxyKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDI4KSxhPXIoNDkpLGk9cigzOCksbz1yKDEwKSxzPWkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKSxyPWEuZjtvJiZ0JiYhdFtzXSYmcih0LHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LChlLHQscik9PntyKDEyMyl9LChlLHQscik9PntyKDEwMSkoIlNldCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxyKDExOSkpfSwoZSx0LHIpPT57dmFyIG4sYT1yKDQwKSxpPXIoNyksbz1yKDgpLHM9cigyOCksYz1yKDE4KSx1PXIoMTEpLGw9cig0NSksZj1yKDI1KSxoPXIoMTI1KSxkPXIoMjEpLHA9cigyNCksZz1yKDI3KSx2PXIoMTA5KSx5PXIoNTEpLG09cig4MyksYj1yKDQzKSx3PXIoMTA1KSxrPXIoNDgpLFM9cig2OCkseD1yKDEyNiksTz1yKDEyNyksQT1yKDEyOSksQz1yKDMyKSxGPXIoMTMwKSxQPXIoMTMxKSxUPXIoMTMyKSxJPW8uT2JqZWN0LEU9by5EYXRlLGo9by5FcnJvcixNPW8uRXZhbEVycm9yLF89by5SYW5nZUVycm9yLEw9by5SZWZlcmVuY2VFcnJvcixSPW8uU3ludGF4RXJyb3IsTj1vLlR5cGVFcnJvcixEPW8uVVJJRXJyb3IsQj1vLlBlcmZvcm1hbmNlTWFyayxVPW8uV2ViQXNzZW1ibHksJD1VJiZVLkNvbXBpbGVFcnJvcnx8aixYPVUmJlUuTGlua0Vycm9yfHxqLEg9VSYmVS5SdW50aW1lRXJyb3J8fGoscT1zKCJET01FeGNlcHRpb24iKSxHPXMoIlNldCIpLHo9cygiTWFwIiksVz16LnByb3RvdHlwZSxWPWMoVy5oYXMpLFk9YyhXLmdldCksSz1jKFcuc2V0KSxKPWMoRy5wcm90b3R5cGUuYWRkKSxaPXMoIk9iamVjdCIsImtleXMiKSxRPWMoW10ucHVzaCksZWU9YygoITApLnZhbHVlT2YpLHRlPWMoMS4udmFsdWVPZikscmU9YygiIi52YWx1ZU9mKSxuZT1jKEUucHJvdG90eXBlLmdldFRpbWUpLGFlPWwoInN0cnVjdHVyZWRDbG9uZSIpLGllPSJEYXRhQ2xvbmVFcnJvciIsb2U9IlRyYW5zZmVycmluZyIsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8uU2V0KFs3XSkscj1lKHQpLG49ZShJKDcpKTtyZXR1cm4gcj09dHx8IXIuaGFzKDcpfHwib2JqZWN0IiE9dHlwZW9mIG58fDchPW59KSkmJmV9LGNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IHQsbj1lKHthOnIsYjpyfSk7cmV0dXJuIShuJiZuLmE9PT1uLmImJm4uYSBpbnN0YW5jZW9mIHQmJm4uYS5zdGFjaz09PXIuc3RhY2spfSkpfSx1ZT1vLnN0cnVjdHVyZWRDbG9uZSxsZT1hfHwhY2UodWUsail8fCFjZSh1ZSxxKXx8KG49dWUsISF1KChmdW5jdGlvbigpe3ZhciBlPW4obmV3IG8uQWdncmVnYXRlRXJyb3IoWzFdLGFlLHtjYXVzZTozfSkpO3JldHVybiJBZ2dyZWdhdGVFcnJvciIhPWUubmFtZXx8MSE9ZS5lcnJvcnNbMF18fGUubWVzc2FnZSE9YWV8fDMhPWUuY2F1c2V9KSkpLGZlPSF1ZSYmc2UoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihhZSx7ZGV0YWlsOmV9KS5kZXRhaWx9KSksaGU9c2UodWUpfHxmZSxkZT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgcSgiVW5jbG9uZWFibGUgdHlwZTogIitlLGllKX0scGU9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgcSgodHx8IkNsb25pbmciKSsiIG9mICIrZSsiIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIHRoaXMgZW5naW5lIixpZSl9LGdlPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSYmZGUoIlN5bWJvbCIpLCFwKGUpKXJldHVybiBlO2lmKHQpe2lmKFYodCxlKSlyZXR1cm4gWSh0LGUpfWVsc2UgdD1uZXcgejt2YXIgcixuLGEsaSxjLHUsbCxoLGQsdix5PW0oZSkseD0hMTtzd2l0Y2goeSl7Y2FzZSJBcnJheSI6YT1bXSx4PSEwO2JyZWFrO2Nhc2UiT2JqZWN0IjphPXt9LHg9ITA7YnJlYWs7Y2FzZSJNYXAiOmE9bmV3IHoseD0hMDticmVhaztjYXNlIlNldCI6YT1uZXcgRyx4PSEwO2JyZWFrO2Nhc2UiUmVnRXhwIjphPW5ldyBSZWdFeHAoZS5zb3VyY2UsTyhlKSk7YnJlYWs7Y2FzZSJFcnJvciI6c3dpdGNoKG49ZS5uYW1lKXtjYXNlIkFnZ3JlZ2F0ZUVycm9yIjphPXMoIkFnZ3JlZ2F0ZUVycm9yIikoW10pO2JyZWFrO2Nhc2UiRXZhbEVycm9yIjphPU0oKTticmVhaztjYXNlIlJhbmdlRXJyb3IiOmE9XygpO2JyZWFrO2Nhc2UiUmVmZXJlbmNlRXJyb3IiOmE9TCgpO2JyZWFrO2Nhc2UiU3ludGF4RXJyb3IiOmE9UigpO2JyZWFrO2Nhc2UiVHlwZUVycm9yIjphPU4oKTticmVhaztjYXNlIlVSSUVycm9yIjphPUQoKTticmVhaztjYXNlIkNvbXBpbGVFcnJvciI6YT0kKCk7YnJlYWs7Y2FzZSJMaW5rRXJyb3IiOmE9WCgpO2JyZWFrO2Nhc2UiUnVudGltZUVycm9yIjphPUgoKTticmVhaztkZWZhdWx0OmE9aigpfXg9ITA7YnJlYWs7Y2FzZSJET01FeGNlcHRpb24iOmE9bmV3IHEoZS5tZXNzYWdlLGUubmFtZSkseD0hMDticmVhaztjYXNlIkRhdGFWaWV3IjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkJpZ0ludDY0QXJyYXkiOmNhc2UiQmlnVWludDY0QXJyYXkiOnI9b1t5XSxwKHIpfHxwZSh5KSxhPW5ldyByKGdlKGUuYnVmZmVyLHQpLGUuYnl0ZU9mZnNldCwiRGF0YVZpZXciPT09eT9lLmJ5dGVMZW5ndGg6ZS5sZW5ndGgpO2JyZWFrO2Nhc2UiRE9NUXVhZCI6dHJ5e2E9bmV3IERPTVF1YWQoZ2UoZS5wMSx0KSxnZShlLnAyLHQpLGdlKGUucDMsdCksZ2UoZS5wNCx0KSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztjYXNlIkZpbGVMaXN0IjppZihpPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e2U9bmV3IG8uRGF0YVRyYW5zZmVyfWNhdGNoKHQpe3RyeXtlPW5ldyBvLkNsaXBib2FyZEV2ZW50KCIiKS5jbGlwYm9hcmREYXRhfWNhdGNoKGUpe319cmV0dXJuIGUmJmUuaXRlbXMmJmUuZmlsZXM/ZTpudWxsfSgpKXtmb3IoYz0wLHU9UyhlKTtjPHU7YysrKWkuaXRlbXMuYWRkKGdlKGVbY10sdCkpO2E9aS5maWxlc31lbHNlIGhlP2E9aGUoZSk6cGUoeSk7YnJlYWs7Y2FzZSJJbWFnZURhdGEiOnRyeXthPW5ldyBJbWFnZURhdGEoZ2UoZS5kYXRhLHQpLGUud2lkdGgsZS5oZWlnaHQse2NvbG9yU3BhY2U6ZS5jb2xvclNwYWNlfSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztkZWZhdWx0OmlmKGhlKWE9aGUoZSk7ZWxzZSBzd2l0Y2goeSl7Y2FzZSJCaWdJbnQiOmE9SShlLnZhbHVlT2YoKSk7YnJlYWs7Y2FzZSJCb29sZWFuIjphPUkoZWUoZSkpO2JyZWFrO2Nhc2UiTnVtYmVyIjphPUkodGUoZSkpO2JyZWFrO2Nhc2UiU3RyaW5nIjphPUkocmUoZSkpO2JyZWFrO2Nhc2UiRGF0ZSI6YT1uZXcgRShuZShlKSk7YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6KHI9by5EYXRhVmlldyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlfHxwZSh5KTt0cnl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UpYT1lLnNsaWNlKDApO2Vsc2UgZm9yKHU9ZS5ieXRlTGVuZ3RoLGE9bmV3IEFycmF5QnVmZmVyKHUpLGQ9bmV3IHIoZSksdj1uZXcgcihhKSxjPTA7Yzx1O2MrKyl2LnNldFVpbnQ4KGMsZC5nZXRVaW50OChjKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHEoIkFycmF5QnVmZmVyIGlzIGRldGFjaGVkIixpZSl9YnJlYWs7Y2FzZSJTaGFyZWRBcnJheUJ1ZmZlciI6YT1lO2JyZWFrO2Nhc2UiQmxvYiI6dHJ5e2E9ZS5zbGljZSgwLGUuc2l6ZSxlLnR5cGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NUG9pbnQiOmNhc2UiRE9NUG9pbnRSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVBvaW50P3IuZnJvbVBvaW50KGUpOm5ldyByKGUueCxlLnksZS56LGUudyl9Y2F0Y2goZSl7cGUoeSl9YnJlYWs7Y2FzZSJET01SZWN0IjpjYXNlIkRPTVJlY3RSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVJlY3Q/ci5mcm9tUmVjdChlKTpuZXcgcihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NTWF0cml4IjpjYXNlIkRPTU1hdHJpeFJlYWRPbmx5IjpyPW9beV07dHJ5e2E9ci5mcm9tTWF0cml4P3IuZnJvbU1hdHJpeChlKTpuZXcgcihlKX1jYXRjaChlKXtwZSh5KX1icmVhaztjYXNlIkF1ZGlvRGF0YSI6Y2FzZSJWaWRlb0ZyYW1lIjpmKGUuY2xvbmUpfHxwZSh5KTt0cnl7YT1lLmNsb25lKCl9Y2F0Y2goZSl7ZGUoeSl9YnJlYWs7Y2FzZSJGaWxlIjp0cnl7YT1uZXcgRmlsZShbZV0sZS5uYW1lLGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiQ3JvcFRhcmdldCI6Y2FzZSJDcnlwdG9LZXkiOmNhc2UiRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtRmlsZUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtSGFuZGxlIjpjYXNlIkdQVUNvbXBpbGF0aW9uSW5mbyI6Y2FzZSJHUFVDb21waWxhdGlvbk1lc3NhZ2UiOmNhc2UiSW1hZ2VCaXRtYXAiOmNhc2UiUlRDQ2VydGlmaWNhdGUiOmNhc2UiV2ViQXNzZW1ibHkuTW9kdWxlIjpwZSh5KTtkZWZhdWx0OmRlKHkpfX1pZihLKHQsZSxhKSx4KXN3aXRjaCh5KXtjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6Zm9yKGw9WihlKSxjPTAsdT1TKGwpO2M8dTtjKyspaD1sW2NdLHcoYSxoLGdlKGVbaF0sdCkpO2JyZWFrO2Nhc2UiTWFwIjplLmZvckVhY2goKGZ1bmN0aW9uKGUscil7SyhhLGdlKHIsdCksZ2UoZSx0KSl9KSk7YnJlYWs7Y2FzZSJTZXQiOmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SihhLGdlKGUsdCkpfSkpO2JyZWFrO2Nhc2UiRXJyb3IiOmsoYSwibWVzc2FnZSIsZ2UoZS5tZXNzYWdlLHQpKSxiKGUsImNhdXNlIikmJmsoYSwiY2F1c2UiLGdlKGUuY2F1c2UsdCkpLCJBZ2dyZWdhdGVFcnJvciI9PW4mJihhLmVycm9ycz1nZShlLmVycm9ycyx0KSk7Y2FzZSJET01FeGNlcHRpb24iOkEmJmsoYSwic3RhY2siLGdlKGUuc3RhY2ssdCkpfXJldHVybiBhfSx2ZT11ZSYmIXUoKGZ1bmN0aW9uKCl7aWYoUCYmQz45Mnx8VCYmQz45NHx8RiYmQz45NylyZXR1cm4hMTt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCksdD11ZShlLHt0cmFuc2ZlcjpbZV19KTtyZXR1cm4gMCE9ZS5ieXRlTGVuZ3RofHw4IT10LmJ5dGVMZW5ndGh9KSk7aSh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsc2hhbTohdmUsZm9yY2VkOmxlfSx7c3RydWN0dXJlZENsb25lOmZ1bmN0aW9uKGUpe3ZhciB0LHI9eChhcmd1bWVudHMubGVuZ3RoLDEpPjEmJiFkKGFyZ3VtZW50c1sxXSk/eShhcmd1bWVudHNbMV0pOnZvaWQgMCxuPXI/ci50cmFuc2Zlcjp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PW4mJmZ1bmN0aW9uKGUsdCl7aWYoIXAoZSkpdGhyb3cgTigiVHJhbnNmZXIgb3B0aW9uIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZSIpO3ZhciByPVtdO3YoZSwoZnVuY3Rpb24oZSl7UShyLHkoZSkpfSkpO3ZhciBuLGEsaSxzLGMsdSxsPTAsZD1TKHIpO2lmKHZlKWZvcihzPXVlKHIse3RyYW5zZmVyOnJ9KTtsPGQ7KUsodCxyW2xdLHNbbCsrXSk7ZWxzZSBmb3IoO2w8ZDspe2lmKG49cltsKytdLFYodCxuKSl0aHJvdyBuZXcgcSgiRHVwbGljYXRlIHRyYW5zZmVyYWJsZSIsaWUpO3N3aXRjaChhPW0obikpe2Nhc2UiSW1hZ2VCaXRtYXAiOmk9by5PZmZzY3JlZW5DYW52YXMsaChpKXx8cGUoYSxvZSk7dHJ5eyh1PW5ldyBpKG4ud2lkdGgsbi5oZWlnaHQpKS5nZXRDb250ZXh0KCJiaXRtYXByZW5kZXJlciIpLnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKG4pLGM9dS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6ZihuLmNsb25lKSYmZihuLmNsb3NlKXx8cGUoYSxvZSk7dHJ5e2M9bi5jbG9uZSgpLG4uY2xvc2UoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6Y2FzZSJNZWRpYVNvdXJjZUhhbmRsZSI6Y2FzZSJNZXNzYWdlUG9ydCI6Y2FzZSJPZmZzY3JlZW5DYW52YXMiOmNhc2UiUmVhZGFibGVTdHJlYW0iOmNhc2UiVHJhbnNmb3JtU3RyZWFtIjpjYXNlIldyaXRhYmxlU3RyZWFtIjpwZShhLG9lKX1pZih2b2lkIDA9PT1jKXRocm93IG5ldyBxKCJUaGlzIG9iamVjdCBjYW5ub3QgYmUgdHJhbnNmZXJyZWQ6ICIrYSxpZSk7Syh0LG4sYyl9fShuLHQ9bmV3IHopLGdlKGUsdCl9fSl9LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoMTEpLGk9cigyNSksbz1yKDgzKSxzPXIoMjgpLGM9cig1NSksdT1mdW5jdGlvbigpe30sbD1bXSxmPXMoIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxoPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGQ9bihoLmV4ZWMpLHA9IWguZXhlYyh1KSxnPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3RyeXtyZXR1cm4gZih1LGwsZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSx2PWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3N3aXRjaChvKGUpKXtjYXNlIkFzeW5jRnVuY3Rpb24iOmNhc2UiR2VuZXJhdG9yRnVuY3Rpb24iOmNhc2UiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiI6cmV0dXJuITF9dHJ5e3JldHVybiBwfHwhIWQoaCxjKGUpKX1jYXRjaChlKXtyZXR1cm4hMH19O3Yuc2hhbT0hMCxlLmV4cG9ydHM9IWZ8fGEoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGcoZy5jYWxsKXx8IWcoT2JqZWN0KXx8IWcoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT92Omd9LGU9Pnt2YXIgdD1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7aWYoZTxyKXRocm93IHQoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGV9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDQzKSxpPXIoMjkpLG89cigxMjgpLHM9UmVnRXhwLnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mbGFncztyZXR1cm4gdm9pZCAwIT09dHx8ImZsYWdzImluIHN8fGEoZSwiZmxhZ3MiKXx8IWkocyxlKT90Om4obyxlKX19LChlLHQscik9Pnt2YXIgbj1yKDUxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHQ9IiI7cmV0dXJuIGUuaGFzSW5kaWNlcyYmKHQrPSJkIiksZS5nbG9iYWwmJih0Kz0iZyIpLGUuaWdub3JlQ2FzZSYmKHQrPSJpIiksZS5tdWx0aWxpbmUmJih0Kz0ibSIpLGUuZG90QWxsJiYodCs9InMiKSxlLnVuaWNvZGUmJih0Kz0idSIpLGUudW5pY29kZVNldHMmJih0Kz0idiIpLGUuc3RpY2t5JiYodCs9InkiKSx0fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigxNSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPUVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gZSl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RhY2siLGEoMSw3KSksNyE9PWUuc3RhY2spfSkpfSwoZSx0LHIpPT57dmFyIG49cigxMzEpLGE9cigxMzIpO2UuZXhwb3J0cz0hbiYmIWEmJiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50fSxlPT57ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgRGVubyYmRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb259LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoOCk7ZS5leHBvcnRzPSJwcm9jZXNzIj09bihhLnByb2Nlc3MpfSwoZSx0LHIpPT57dmFyIG49cig4KTtlLmV4cG9ydHM9bn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwLHQuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24oKXtiLl9jbGVhckNhY2hlKCkseS5fY2xlYXJDYWNoZSgpLHguX2NsZWFyQ2FjaGUoKX0sdC5pc0NtZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgYiYmKHZvaWQgMD09PXR8fGUuY21kPT09dCl9LHQuaXNEaWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBrJiYodm9pZCAwPT09dHx8QyhlLmdldCgiVHlwZSIpLHQpKX0sdC5pc05hbWU9Qyx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGkobixvLHMsYyl7dmFyIHU9aChlW25dLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YShmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodixjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LGMsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gbChlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1wO3ZhciBnPVN5bWJvbCgiRU9GIik7dC5FT0Y9Zzt2YXIgdix5PSh2PU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLm5hbWU9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF18fCh2W3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe3Y9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5OYW1lPXk7dmFyIG0sYj0obT1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jbWQ9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF18fChtW3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe209T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5DbWQ9Yjt2YXIgdz1mdW5jdGlvbigpe3JldHVybiB3fSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2YodGhpcyxlKSx0aGlzLl9tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnhyZWY9dCx0aGlzLm9iaklkPW51bGwsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITEsdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPXd9dmFyIHQscjtyZXR1cm4gZChlLFt7a2V5OiJhc3NpZ25YcmVmIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnhyZWY9ZX19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX21hcFtlXTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmdm9pZCAwPT09KG49dGhpcy5fbWFwW3RdKSYmdm9pZCAwIT09ciYmKG49dGhpcy5fbWFwW3JdKSxuIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaChuLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTpufX0se2tleToiZ2V0QXN5bmMiLHZhbHVlOih0PXUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHZvaWQgMD09PShhPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJnZvaWQgMD09PShhPXRoaXMuX21hcFtyXSkmJnZvaWQgMCE9PW4mJihhPXRoaXMuX21hcFtuXSksIShhIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMueHJlZi5mZXRjaEFzeW5jKGEsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtjYXNlIDQ6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkscj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKGUpe2woaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2woaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJnZvaWQgMD09PShuPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJihuPXRoaXMuX21hcFtyXSksbiBpbnN0YW5jZW9mIHgmJnRoaXMueHJlZiYmKG49dGhpcy54cmVmLmZldGNoKG4sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKSxBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgYT0wLGk9KG49bi5zbGljZSgpKS5sZW5ndGg7YTxpO2ErKyluW2FdaW5zdGFuY2VvZiB4JiZ0aGlzLnhyZWYmJihuW2FdPXRoaXMueHJlZi5mZXRjaChuW2FdLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7cmV0dXJuIG59fSx7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJnZXRLZXlzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApfX0se2tleToiZ2V0UmF3VmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9fV0sW3trZXk6ImVtcHR5IixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZShudWxsKTtyZXR1cm4gdC5zZXQ9ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfSwoMCxuLnNoYWRvdykodGhpcywiZW1wdHkiLHQpfX0se2tleToibWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLG49dC54cmVmLGE9dC5kaWN0QXJyYXkscz10Lm1lcmdlU3ViRGljdHMsYz12b2lkIDAhPT1zJiZzLHU9bmV3IGUobiksbD1uZXcgTWFwLGY9byhhKTt0cnl7Zm9yKGYucygpOyEocj1mLm4oKSkuZG9uZTspe3ZhciBoPXIudmFsdWU7aWYoaCBpbnN0YW5jZW9mIGUpZm9yKHZhciBkPTAscD1PYmplY3QuZW50cmllcyhoLl9tYXApO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1pKHBbZF0sMiksdj1nWzBdLHk9Z1sxXSxtPWwuZ2V0KHYpO2lmKHZvaWQgMD09PW0pbT1bXSxsLnNldCh2LG0pO2Vsc2UgaWYoIShjJiZ5IGluc3RhbmNlb2YgZSkpY29udGludWU7bS5wdXNoKHkpfX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9dmFyIGIsdz1vKGwpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIGs9aShiLnZhbHVlLDIpLFM9a1swXSx4PWtbMV07aWYoMSE9PXgubGVuZ3RoJiZ4WzBdaW5zdGFuY2VvZiBlKXt2YXIgTyxBPW5ldyBlKG4pLEM9byh4KTt0cnl7Zm9yKEMucygpOyEoTz1DLm4oKSkuZG9uZTspZm9yKHZhciBGPU8udmFsdWUsUD0wLFQ9T2JqZWN0LmVudHJpZXMoRi5fbWFwKTtQPFQubGVuZ3RoO1ArKyl7dmFyIEk9aShUW1BdLDIpLEU9SVswXSxqPUlbMV07dm9pZCAwPT09QS5fbWFwW0VdJiYoQS5fbWFwW0VdPWopfX1jYXRjaChlKXtDLmUoZSl9ZmluYWxseXtDLmYoKX1BLnNpemU+MCYmKHUuX21hcFtTXT1BKX1lbHNlIHUuX21hcFtTXT14WzBdfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX1yZXR1cm4gbC5jbGVhcigpLHUuc2l6ZT4wP3U6ZS5lbXB0eX19XSksZX0oKTt0LkRpY3Q9azt2YXIgUyx4PShTPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubnVtPXQsdGhpcy5nZW49cn1yZXR1cm4gZChlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZ2VuPyIiLmNvbmNhdCh0aGlzLm51bSwiUiIpOiIiLmNvbmNhdCh0aGlzLm51bSwiUiIpLmNvbmNhdCh0aGlzLmdlbil9fV0sW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj0wPT09cj8iIi5jb25jYXQodCwiUiIpOiIiLmNvbmNhdCh0LCJSIikuY29uY2F0KHIpO3JldHVybiBTW25dfHwoU1tuXT1uZXcgZSh0LHIpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe1M9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5SZWY9eDt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Zih0aGlzLHQpLHRoaXMuX3NldD1uZXcgU2V0KGUmJmUuX3NldCl9cmV0dXJuIGQodCxbe2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2V0LmhhcyhlLnRvU3RyaW5nKCkpfX0se2tleToicHV0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zZXQuYWRkKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3NldC5kZWxldGUoZS50b1N0cmluZygpKX19LHtrZXk6U3ltYm9sLml0ZXJhdG9yLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3NldC5jbGVhcigpfX1dKSx0fSgpO3QuUmVmU2V0PU87dmFyIEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KSx0aGlzLl9tYXA9bmV3IE1hcH1yZXR1cm4gZCh0LFt7a2V5OiJzaXplIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJwdXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9fSx7a2V5OiJwdXRBbGlhcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9fSx7a2V5OlN5bWJvbC5pdGVyYXRvcix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuY2xlYXIoKX19XSksdH0oKTtmdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5JiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9dC5SZWZTZXRDYWNoZT1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj10LkRvY1N0YXRzPXZvaWQgMCx0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLG89Uyh7ZGljdDp0LGtleToiQUEiLHN0b3BXaGVuRm91bmQ6ITF9KTtpZihvKWZvcih2YXIgYz1vLmxlbmd0aC0xO2M+PTA7Yy0tKXt2YXIgdT1vW2NdO2lmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBsLGY9cyh1LmdldEtleXMoKSk7dHJ5e2ZvcihmLnMoKTshKGw9Zi5uKCkpLmRvbmU7KXt2YXIgaD1sLnZhbHVlLGQ9cltoXTtpZihkKXt2YXIgcD11LmdldFJhdyhoKSxnPW5ldyBpLlJlZlNldCx2PVtdO08ocCxlLHYsZyksdi5sZW5ndGg+MCYmKG5bZF09dil9fX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX19fWlmKHQuaGFzKCJBIikpe3ZhciB5PVtdO08odC5nZXQoIkEiKSxlLHksbmV3IGkuUmVmU2V0KSx5Lmxlbmd0aD4wJiYobi5BY3Rpb249eSl9cmV0dXJuKDAsYS5vYmplY3RTaXplKShuKT4wP246bnVsbH0sdC5lbmNvZGVUb1htbFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY29kZVBvaW50QXQobik7aWYoMzI8PWkmJmk8PTEyNil7dmFyIG89QVtpXTtvJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKG8pLHI9bisxKX1lbHNlIHI8biYmdC5wdXNoKGUuc3Vic3RyaW5nKHIsbikpLHQucHVzaCgiJiN4Ii5jb25jYXQoaS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwiOyIpKSxpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKyxyPW4rMX1yZXR1cm4gMD09PXQubGVuZ3RoP2U6KHI8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhyLGUubGVuZ3RoKSksdC5qb2luKCIiKSl9LHQuZXNjYXBlUERGTmFtZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY2hhckNvZGVBdChuKTsoaTwzM3x8aT4xMjZ8fDM1PT09aXx8NDA9PT1pfHw0MT09PWl8fDYwPT09aXx8NjI9PT1pfHw5MT09PWl8fDkzPT09aXx8MTIzPT09aXx8MTI1PT09aXx8NDc9PT1pfHwzNz09PWkpJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKCIjIi5jb25jYXQoaS50b1N0cmluZygxNikpKSxyPW4rMSl9cmV0dXJuIDA9PT10Lmxlbmd0aD9lOihyPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcocixlLmxlbmd0aCkpLHQuam9pbigiIikpfSx0LmVzY2FwZVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWygpXFxcblxyXSkvZywoZnVuY3Rpb24oZSl7cmV0dXJuIlxuIj09PWU/IlxcbiI6IlxyIj09PWU/IlxcciI6IlxcIi5jb25jYXQoZSl9KSl9LHQuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIHI9ZSgpO2U9bnVsbCx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bis9Mil0W3Jbbl1dPXJbbisxXTtyPW51bGx9cmV0dXJuIHR9fSx0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Uyx0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlKHQpLGU9bnVsbCksdH19LHQuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHQscixuPW5ldyBNYXAsaT1zKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89KHI9dC52YWx1ZSwyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHIpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dCwwOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0ocil8fGMociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PW9bMF0sbD1vWzFdO2lmKHUuc3RhcnRzV2l0aChhLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKXt2YXIgZj1uLmdldChsLnBhZ2VJbmRleCk7Znx8KGY9W10sbi5zZXQobC5wYWdlSW5kZXgsZikpLGYucHVzaChsKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBuLnNpemU+MD9uOm51bGx9LHQuZ2V0Um90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChlKXtjYXNlIDkwOnJldHVyblswLDEsLTEsMCx0LDBdO2Nhc2UgMTgwOnJldHVyblstMSwwLDAsLTEsdCxyXTtjYXNlIDI3MDpyZXR1cm5bMCwtMSwxLDAsMCxyXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3RhdGlvbiIpfX0sdC5pc0FzY2lpPWZ1bmN0aW9uKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX0sdC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDEzPT09ZXx8MTA9PT1lfSx0LmxvZzI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDpNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKX0sdC5udW1iZXJUb1N0cmluZz1mdW5jdGlvbihlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7dmFyIHQ9TWF0aC5yb3VuZCgxMDAqZSk7cmV0dXJuIHQlMTAwPT0wPyh0LzEwMCkudG9TdHJpbmcoKTp0JTEwPT0wP2UudG9GaXhlZCgxKTplLnRvRml4ZWQoMil9LHQucGFyc2VYRkFQYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PS8oLispXFsoXGQrKVxdJC87cmV0dXJuIGUuc3BsaXQoIi4iKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPWUubWF0Y2godCk7cmV0dXJuIHI/e25hbWU6clsxXSxwb3M6cGFyc2VJbnQoclsyXSwxMCl9OntuYW1lOmUscG9zOjB9fSkpfSx0LnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH0sdC5yZWFkVWludDE2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfSx0LnJlYWRVaW50MzI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9LHQucmVjb3ZlckpzVVJMPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBSZWdFeHAoIl5cXHMqKCIrWyJhcHAubGF1bmNoVVJMIiwid2luZG93Lm9wZW4iLCJ4ZmEuaG9zdC5nb3RvVVJMIl0uam9pbigifCIpLnNwbGl0KCIuIikuam9pbigiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKGUpO2lmKHQmJnRbMl0pe3ZhciByPXRbMl0sbj0hMTtyZXR1cm4idHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYobj0hMCkse3VybDpyLG5ld1dpbmRvdzpufX1yZXR1cm4gbnVsbH0sdC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKChhPj44JjI1NSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSwoMjU1JmEpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGMTZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9W107YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSYmdC5wdXNoKCLDvsO/Iik7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEpKX1yZXR1cm4gdC5qb2luKCIiKX0sdC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTsoMCxhLmFzc2VydCkoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Zm9yKHZhciByLG49W107ZT49MWUzOyllLT0xZTMsbi5wdXNoKCJNIik7cj1lLzEwMHwwLGUlPTEwMCxuLnB1c2goeFtyXSkscj1lLzEwfDAsZSU9MTAsbi5wdXNoKHhbMTArcl0pLG4ucHVzaCh4WzIwK2VdKTt2YXIgaT1uLmpvaW4oIiIpO3JldHVybiB0P2kudG9Mb3dlckNhc2UoKTppfSx0LnZhbGlkYXRlQ1NTRm9udD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIiwiMTAwMCIsIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIl0pLHI9ZS5mb250RmFtaWx5LG49ZS5mb250V2VpZ2h0LGk9ZS5pdGFsaWNBbmdsZTtpZigvXiIuKiIkLy50ZXN0KHIpKXtpZigvW15cXF0iLy50ZXN0KHIuc2xpY2UoMSxyLmxlbmd0aC0xKSkpcmV0dXJuKDAsYS53YXJuKSgnWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAiOiAnLmNvbmNhdChyLCIuIikpLCExfWVsc2UgaWYoL14nLionJC8udGVzdChyKSl7aWYoL1teXFxdJy8udGVzdChyLnNsaWNlKDEsci5sZW5ndGgtMSkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEZvbnRGYW1pbHkgY29udGFpbnMgc29tZSB1bmVzY2FwZWQgJzogIi5jb25jYXQociwiLiIpKSwhMX1lbHNle3ZhciBvLGM9cyhyLnNwbGl0KC9bIFx0XSsvKSk7dHJ5e2ZvcihjLnMoKTshKG89Yy5uKCkpLmRvbmU7KXt2YXIgdT1vLnZhbHVlO2lmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QodSl8fCEvXltcdy1cXF0rJC8udGVzdCh1KSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogIi5jb25jYXQociwiLiIpKSwhMX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fXZhciBsPW4/bi50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhsKT9sOiI0MDAiO3ZhciBmPXBhcnNlRmxvYXQoaSk7cmV0dXJuIGUuaXRhbGljQW5nbGU9aXNOYU4oZil8fGY8LTkwfHxmPjkwPyIxNCI6aS50b1N0cmluZygpLCEwfTt2YXIgYT1yKDIpLGk9cigxMzQpLG89cigxMzYpO2Z1bmN0aW9uIHMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHUoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT91KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB1KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBkKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnAoZSx0KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwKGUsdCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT12KGUpO2lmKHQpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdihlKX10LlBERl9WRVJTSU9OX1JFR0VYUD0vXlsxLTldXC5cZCQvO3ZhciB5PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gaCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJNaXNzaW5nIGRhdGEgWyIuY29uY2F0KGUsIiwgIikuY29uY2F0KG4sIikiKSwiTWlzc2luZ0RhdGFFeGNlcHRpb24iKSkuYmVnaW49ZSxhLmVuZD1uLGF9cmV0dXJuIGYocil9KGEuQmFzZUV4Y2VwdGlvbik7dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj15O3ZhciBtPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlBhcnNlckVPRkV4Y2VwdGlvbj1tO3ZhciBiPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmRW50cnlFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj1iO3ZhciB3PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmUGFyc2VFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZQYXJzZUV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtoKHRoaXMsZSksdGhpcy5faGFuZGxlcj10LHRoaXMuX3N0cmVhbVR5cGVzPW5ldyBTZXQsdGhpcy5fZm9udFR5cGVzPW5ldyBTZXR9cmV0dXJuIGYoZSxbe2tleToiX3NlbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXModGhpcy5fc3RyZWFtVHlwZXMpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl0W2UudmFsdWVdPSEwfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBhLGk9cyh0aGlzLl9mb250VHlwZXMpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOylyW2EudmFsdWVdPSEwfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMuX2hhbmRsZXIuc2VuZCgiRG9jU3RhdHMiLHtzdHJlYW1UeXBlczp0LGZvbnRUeXBlczpyfSl9fSx7a2V5OiJhZGRTdHJlYW1UeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdHJlYW1UeXBlcy5oYXMoZSl8fCh0aGlzLl9zdHJlYW1UeXBlcy5hZGQoZSksdGhpcy5fc2VuZCgpKX19LHtrZXk6ImFkZEZvbnRUeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9mb250VHlwZXMuaGFzKGUpfHwodGhpcy5fZm9udFR5cGVzLmFkZChlKSx0aGlzLl9zZW5kKCkpfX1dKSxlfSgpO2Z1bmN0aW9uIFMoZSl7Zm9yKHZhciB0LHI9ZS5kaWN0LG49ZS5rZXksYT1lLmdldEFycmF5LG89dm9pZCAwIT09YSYmYSxzPWUuc3RvcFdoZW5Gb3VuZCxjPXZvaWQgMD09PXN8fHMsdT1uZXcgaS5SZWZTZXQ7ciBpbnN0YW5jZW9mIGkuRGljdCYmKCFyLm9iaklkfHwhdS5oYXMoci5vYmpJZCkpOyl7ci5vYmpJZCYmdS5wdXQoci5vYmpJZCk7dmFyIGw9bz9yLmdldEFycmF5KG4pOnIuZ2V0KG4pO2lmKHZvaWQgMCE9PWwpe2lmKGMpcmV0dXJuIGw7dHx8KHQ9W10pLHQucHVzaChsKX1yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH10LkRvY1N0YXRzPWs7dmFyIHg9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXTtmdW5jdGlvbiBPKGUsdCxyLG4pe2lmKGUpe3ZhciBjPW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtpZihuLmhhcyhlKSlyZXR1cm47Yz1lLG4ucHV0KGMpLGU9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdSxsPXMoZSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KU8odS52YWx1ZSx0LHIsbil9Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9fWVsc2UgaWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7aWYoKDAsaS5pc05hbWUpKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7dmFyIGYsaD1lLmdldCgiSlMiKTtoIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2Y9aC5nZXRTdHJpbmcoKToic3RyaW5nIj09dHlwZW9mIGgmJihmPWgpLChmPWYmJigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYpLnJlcGxhY2UoL1x1MDAwMC9nLCIiKSkmJnIucHVzaChmKX1PKGUuZ2V0UmF3KCJOZXh0IiksdCxyLG4pfWMmJm4ucmVtb3ZlKGMpfX12YXIgQT17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLiIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBsZW5ndGhgIGFjY2Vzc2VkIil9fSx7a2V5OiJpc0VtcHR5IixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZCIpfX0se2tleToiaXNEYXRhTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX19LHtrZXk6InBlZWtCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xIT09ZSYmdGhpcy5wb3MtLSxlfX0se2tleToicGVla0J5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEJ5dGVzKGUpO3JldHVybiB0aGlzLnBvcy09dC5sZW5ndGgsdH19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fX0se2tleToiZ2V0SW50MzIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX19LHtrZXk6ImdldEJ5dGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfX0se2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wb3MrPWV8fDF9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9fSx7a2V5OiJtb3ZlU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX19LHtrZXk6Im1ha2VTdWJTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9fSx7a2V5OiJnZXRCYXNlU3RyZWFtcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSkmJmkodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkJhc2VTdHJlYW09b30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzgpLGk9cigxMzUpLG89cigxNDApLHM9cigxMzkpO2Z1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWgoZSk7aWYodCl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmKGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBmKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGQoZSl9ZnVuY3Rpb24gcCgpe3A9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09ZChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZyhlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7ZyhpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7ZyhpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1kKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYihlLHQscil7cmV0dXJuIHQmJm0oZS5wcm90b3R5cGUsdCksciYmbShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdyhlKXtpZihlKXt2YXIgdD0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjsoMCxuLndhcm4pKCdJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gbnVsbH12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt5KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKX12YXIgdDtyZXR1cm4gYihlLFt7a2V5OiJkb2NJZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0lkfX0se2tleToicGFzc3dvcmQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXNzd29yZH19LHtrZXk6ImRvY0Jhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZztyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZG9jQmFzZVVybCIsZS5iYXNlVXJsfHx0aGlzLl9kb2NCYXNlVXJsKX19LHtrZXk6ImVuc3VyZURvYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudCxlLHQpfX0se2tleToiZW5zdXJlWFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLGUsdCl9fSx7a2V5OiJlbnN1cmVDYXRhbG9nIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2csZSx0KX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UoZSl9fSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGUsdCl9fSx7a2V5OiJsb2FkWGZhRm9udHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUZvbnRzKGUsdCl9fSx7a2V5OiJsb2FkWGZhSW1hZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFJbWFnZXMoKX19LHtrZXk6InNlcmlhbGl6ZVhmYURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LnNlcmlhbGl6ZVhmYURhdGEoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChlKX19LHtrZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDooMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfX0se2tleToidXBkYXRlUGFzc3dvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Bhc3N3b3JkPWV9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fV0pLGV9KCksUz1mdW5jdGlvbihlKXtjKG4sZSk7dmFyIHQscj1sKG4pO2Z1bmN0aW9uIG4oZSx0LGEsaSxjLHUsbCl7dmFyIGg7eSh0aGlzLG4pLChoPXIuY2FsbCh0aGlzKSkuX2RvY0lkPWUsaC5fcGFzc3dvcmQ9YSxoLl9kb2NCYXNlVXJsPXcobCksaC5tc2dIYW5kbGVyPWksaC5ldmFsdWF0b3JPcHRpb25zPWMsaC5lbmFibGVYZmE9dTt2YXIgZD1uZXcgcy5TdHJlYW0odCk7cmV0dXJuIGgucGRmRG9jdW1lbnQ9bmV3IG8uUERGRG9jdW1lbnQoZihoKSxkKSxoLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZShkKSxofXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJyZXF1ZXN0UmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX1dKSxufShrKTt0LkxvY2FsUGRmTWFuYWdlcj1TO3ZhciB4PWZ1bmN0aW9uKGUpe2MobixlKTt2YXIgdCxyPWwobik7ZnVuY3Rpb24gbihlLHQsaSxzLGMsdSl7dmFyIGw7cmV0dXJuIHkodGhpcyxuKSwobD1yLmNhbGwodGhpcykpLl9kb2NJZD1lLGwuX3Bhc3N3b3JkPWkucGFzc3dvcmQsbC5fZG9jQmFzZVVybD13KHUpLGwubXNnSGFuZGxlcj1pLm1zZ0hhbmRsZXIsbC5ldmFsdWF0b3JPcHRpb25zPXMsbC5lbmFibGVYZmE9YyxsLnN0cmVhbU1hbmFnZXI9bmV3IGEuQ2h1bmtlZFN0cmVhbU1hbmFnZXIodCx7bXNnSGFuZGxlcjppLm1zZ0hhbmRsZXIsbGVuZ3RoOmkubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmkucmFuZ2VDaHVua1NpemV9KSxsLnBkZkRvY3VtZW50PW5ldyBvLlBERkRvY3VtZW50KGYobCksbC5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKSxsfXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihlLnByZXY9MCwiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDc6aWYoZS5wcmV2PTcsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXtlLm5leHQ9MTE7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDExOnJldHVybiBlLm5leHQ9MTMsdGhpcy5yZXF1ZXN0UmFuZ2UoZS50MC5iZWdpbixlLnQwLmVuZCk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5lbnN1cmUodCxyLG4pKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw3XV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19XSksbn0oayk7dC5OZXR3b3JrUGRmTWFuYWdlcj14fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciBhPXIoMiksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0LHIpe3JldHVybiB0JiZ1KGUucHJvdG90eXBlLHQpLHImJnUoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfXZhciBkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9KG8sZSk7dmFyIHQscixhPSh0PW8scj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPWgodCk7aWYocil7dmFyIGk9aCh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbyhlLHQscil7dmFyIG47cmV0dXJuIGModGhpcyxvKSwobj1hLmNhbGwodGhpcyxuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCkpLmNodW5rU2l6ZT10LG4uX2xvYWRlZENodW5rcz1uZXcgU2V0LG4ubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpLG4ubWFuYWdlcj1yLG4ucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTAsbi5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMSxufXJldHVybiBsKG8sW3trZXk6ImdldE1pc3NpbmdDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfX0se2tleToibnVtQ2h1bmtzTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9fSx7a2V5OiJpc0RhdGFMb2FkZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfX0se2tleToib25SZWNlaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNodW5rU2l6ZTtpZihlJXIhPTApdGhyb3cgbmV3IEVycm9yKCJCYWQgYmVnaW4gb2Zmc2V0OiAiLmNvbmNhdChlKSk7dmFyIG49ZSt0LmJ5dGVMZW5ndGg7aWYobiVyIT0wJiZuIT09dGhpcy5ieXRlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCYWQgZW5kIG9mZnNldDogIi5jb25jYXQobikpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KHQpLGUpO2Zvcih2YXIgYT1NYXRoLmZsb29yKGUvciksaT1NYXRoLmZsb29yKChuLTEpL3IpKzEsbz1hO288aTsrK28pdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChvKX19LHtrZXk6Im9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgscj1NYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGUpLHQpLHQrPWUuYnl0ZUxlbmd0aCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD10O2Zvcih2YXIgbj10Pj10aGlzLmVuZD90aGlzLm51bUNodW5rczpNYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpLGE9cjthPG47KythKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoYSl9fSx7a2V5OiJlbnN1cmVCeXRlIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGU8dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpKXt2YXIgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX19fSx7a2V5OiJlbnN1cmVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGU+PXR8fHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSl7dmFyIHI9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZighKHI+dGhpcy5udW1DaHVua3MpKWZvcih2YXIgbj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKSxhPXI7YTxuOysrYSlpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhhKSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfX19LHtrZXk6Im5leHRFbXB0eUNodW5rIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5udW1DaHVua3Mscj0wO3I8dDsrK3Ipe3ZhciBuPShlK3IpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMobikpcmV0dXJuIG59cmV0dXJuIG51bGx9fSx7a2V5OiJoYXNDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zO3JldHVybiBlPj10aGlzLmVuZD8tMTooZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKSx0aGlzLmJ5dGVzW3RoaXMucG9zKytdKX19LHtrZXk6ImdldEJ5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzLHI9dGhpcy5wb3Msbj10aGlzLmVuZDtpZighZSlyZXR1cm4gbj50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLG4pLHQuc3ViYXJyYXkocixuKTt2YXIgYT1yK2U7cmV0dXJuIGE+biYmKGE9biksYT50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLGEpLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsdCksdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtmdW5jdGlvbiBuKCl7fXQ/ZSt0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsZSt0KTplPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyksbi5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNodW5rU2l6ZSx0PU1hdGguZmxvb3IodGhpcy5zdGFydC9lKSxyPU1hdGguZmxvb3IoKHRoaXMuZW5kLTEpL2UpKzEsbj1bXSxhPXQ7YTxyOysrYSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGEpfHxuLnB1c2goYSk7cmV0dXJuIG59LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBhPW5ldyBuO3JldHVybiBhLnBvcz1hLnN0YXJ0PWUsYS5lbmQ9ZSt0fHx0aGlzLmVuZCxhLmRpY3Q9cixhfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXNdfX1dKSxvfShyKDEzOSkuU3RyZWFtKTt0LkNodW5rZWRTdHJlYW09ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtjKHRoaXMsZSksdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5jaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgZCh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09dCx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9ci5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj1yLm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXAsdGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXAsdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIGwoZSxbe2tleToic2VuZFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO24uaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChuLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO3ZhciBpPVtdLG89MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24gcyhjKXt0cnl7aWYoIWMuZG9uZSl7dmFyIHU9Yy52YWx1ZTtyZXR1cm4gaS5wdXNoKHUpLG8rPSgwLGEuYXJyYXlCeXRlTGVuZ3RoKSh1KSxuLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZyLm9uUHJvZ3Jlc3Moe2xvYWRlZDpvfSksdm9pZCBuLnJlYWQoKS50aGVuKHMsdCl9dmFyIGw9KDAsYS5hcnJheXNUb0J5dGVzKShpKTtpPW51bGwsZShsKX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3IuYWJvcnRlZHx8ci5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX19LHtrZXk6InJlcXVlc3RBbGxDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSl7dmFyIGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6Il9yZXF1ZXN0Q2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5jdXJyUmVxdWVzdElkKyssbj1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQocixuKTt2YXIgaSxzPW8oZSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO3RoaXMuc3RyZWFtLmhhc0NodW5rKGMpfHxuLmFkZChjKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYoMD09PW4uc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIHU9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQocix1KTt2YXIgbCxmPVtdLGg9byhuKTt0cnl7Zm9yKGgucygpOyEobD1oLm4oKSkuZG9uZTspe3ZhciBkPWwudmFsdWUscD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGQpO3B8fChwPVtdLHRoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZCxwKSxmLnB1c2goZCkpLHAucHVzaChyKX19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9aWYoZi5sZW5ndGg+MCl7dmFyIGcsdj1vKHRoaXMuZ3JvdXBDaHVua3MoZikpO3RyeXtmb3Iodi5zKCk7IShnPXYubigpKS5kb25lOyl7dmFyIHk9Zy52YWx1ZSxtPXkuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxiPU1hdGgubWluKHkuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QobSxiKS5jYXRjaCh1LnJlamVjdCl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfX1yZXR1cm4gdS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5hYm9ydGVkKXRocm93IGV9KSl9fSx7a2V5OiJnZXRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyZWFtfX0se2tleToicmVxdWVzdFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXMuZ2V0QmVnaW5DaHVuayhlKSxuPXRoaXMuZ2V0RW5kQ2h1bmsodCksYT1bXSxpPXI7aTxuOysraSlhLnB1c2goaSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoYSl9fSx7a2V5OiJyZXF1ZXN0UmFuZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1vKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWZvcih2YXIgbj1lLnZhbHVlLGE9dGhpcy5nZXRCZWdpbkNodW5rKG4uYmVnaW4pLGk9dGhpcy5nZXRFbmRDaHVuayhuLmVuZCkscz1hO3M8aTsrK3MpdC5pbmNsdWRlcyhzKXx8dC5wdXNoKHMpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSx0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfX0se2tleToiZ3JvdXBDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPS0xLG49LTEsYT0wLGk9ZS5sZW5ndGg7YTxpOysrYSl7dmFyIG89ZVthXTtyPDAmJihyPW8pLG4+PTAmJm4rMSE9PW8mJih0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpuKzF9KSxyPW8pLGErMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpvKzF9KSxuPW99cmV0dXJuIHR9fSx7a2V5OiJvblByb2dyZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9fSx7a2V5OiJvblJlY2VpdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNodW5rLHI9dm9pZCAwPT09ZS5iZWdpbixuPXI/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixhPW4rdC5ieXRlTGVuZ3RoLGk9TWF0aC5mbG9vcihuL3RoaXMuY2h1bmtTaXplKSxzPWE8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihhL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoYS90aGlzLmNodW5rU2l6ZSk7cj8odGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpLHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPWEpOnRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEobix0KSx0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Zm9yKHZhciBjPVtdLHU9aTt1PHM7Kyt1KXt2YXIgbD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KHUpO2lmKGwpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUodSk7dmFyIGYsaD1vKGwpO3RyeXtmb3IoaC5zKCk7IShmPWgubigpKS5kb25lOyl7dmFyIGQ9Zi52YWx1ZSxwPXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoZCk7cC5oYXModSkmJnAuZGVsZXRlKHUpLHAuc2l6ZT4wfHxjLnB1c2goZCl9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXt2YXIgZztpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXt2YXIgdj10aGlzLnN0cmVhbS5udW1DaHVua3MtMTt0aGlzLnN0cmVhbS5oYXNDaHVuayh2KXx8KGc9dil9ZWxzZSBnPXRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKHMpO051bWJlci5pc0ludGVnZXIoZykmJnRoaXMuX3JlcXVlc3RDaHVua3MoW2ddKX1mb3IodmFyIHk9MCxtPWM7eTxtLmxlbmd0aDt5Kyspe3ZhciBiPW1beV0sdz10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoYik7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGIpLHcucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfX0se2tleToiZ2V0QmVnaW5DaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9fSx7a2V5OiJnZXRFbmRDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5hYm9ydGVkPSEwLHRoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKGUpO3ZhciB0LHI9byh0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXQudmFsdWUucmVqZWN0KGUpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19XSksZX0oKTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPXB9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cmluZ1N0cmVhbT10LlN0cmVhbT10Lk51bGxTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUsbixhLGkpe3ZhciBzO3JldHVybiBvKHRoaXMsciksKHM9dC5jYWxsKHRoaXMpKS5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpLHMuc3RhcnQ9bnx8MCxzLnBvcz1zLnN0YXJ0LHMuZW5kPW4rYXx8cy5ieXRlcy5sZW5ndGgscy5kaWN0PWksc31yZXR1cm4gYyhyLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fX0se2tleToiaXNFbXB0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH19LHtrZXk6ImdldEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXMscj10aGlzLnBvcyxuPXRoaXMuZW5kO2lmKCFlKXJldHVybiB0LnN1YmFycmF5KHIsbik7dmFyIGE9citlO3JldHVybiBhPm4mJihhPW4pLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fX0se2tleToibW92ZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9fSx7a2V5OiJtYWtlU3ViU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBuZXcgcih0aGlzLmJ5dGVzLmJ1ZmZlcixlLHQsbil9fV0pLHJ9KGEuQmFzZVN0cmVhbSk7dC5TdHJlYW09ZDt2YXIgcD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsKDAsaS5zdHJpbmdUb0J5dGVzKShlKSl9cmV0dXJuIGMocil9KGQpO3QuU3RyaW5nU3RyZWFtPXA7dmFyIGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcigpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoMCkpfXJldHVybiBjKHIpfShkKTt0Lk51bGxTdHJlYW09Z30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhZ2U9dC5QREZEb2N1bWVudD12b2lkIDA7dmFyIG49cigxNDEpLGE9cigyKSxpPXIoMTM1KSxvPXIoMTM0KSxzPXIoMTgwKSxjPXIoMTM2KSx1PXIoMTk2KSxsPXIoMTk4KSxmPXIoMjAwKSxoPXIoMjI5KSxkPXIoMTQ2KSxwPXIoMTM5KSxnPXIoMjA0KSx2PXIoMTkxKSx5PXIoMTQ0KSxtPXIoMTQ4KSxiPXIoMjAzKSx3PXIoMTk0KSxrPXIoMjA1KSxTPXIoMjMwKTtmdW5jdGlvbiB4KGUpe3JldHVybiB4PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx4KGUpfWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8UChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQSgpe0E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09eChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fFAoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9UChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gUChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gVChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP1QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIFQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBJKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtJKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtJKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaihlLHQpe3JldHVybiBqPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saihlLHQpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIE09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LE0oZSl9ZnVuY3Rpb24gXyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXgobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT14KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBSKGUsdCxyKXtyZXR1cm4gdCYmTChlLnByb3RvdHlwZSx0KSxyJiZMKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgTj1bMCwwLDYxMiw3OTJdLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQucGRmTWFuYWdlcixuPXQueHJlZixhPXQucGFnZUluZGV4LGk9dC5wYWdlRGljdCxvPXQucmVmLHM9dC5nbG9iYWxJZEZhY3RvcnksYz10LmZvbnRDYWNoZSx1PXQuYnVpbHRJbkNNYXBDYWNoZSxsPXQuc3RhbmRhcmRGb250RGF0YUNhY2hlLGY9dC5nbG9iYWxJbWFnZUNhY2hlLGg9dC5ub25CbGVuZE1vZGVzU2V0LGQ9dC54ZmFGYWN0b3J5O18odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9cix0aGlzLnBhZ2VJbmRleD1hLHRoaXMucGFnZURpY3Q9aSx0aGlzLnhyZWY9bix0aGlzLnJlZj1vLHRoaXMuZm9udENhY2hlPWMsdGhpcy5idWlsdEluQ01hcENhY2hlPXUsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bCx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9Zix0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aCx0aGlzLmV2YWx1YXRvck9wdGlvbnM9ci5ldmFsdWF0b3JPcHRpb25zLHRoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsLHRoaXMueGZhRmFjdG9yeT1kO3ZhciBwPXtvYmo6MH07dGhpcy5fbG9jYWxJZEZhY3Rvcnk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmooZSx0KX0oaSxlKTt2YXIgdCxyLG49KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLG49TSh0KTtpZihyKXt2YXIgYT1NKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PXgodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKCl7cmV0dXJuIF8odGhpcyxpKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUihpLG51bGwsW3trZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJwIi5jb25jYXQoYSwiXyIpLmNvbmNhdCgrK3Aub2JqKX19LHtrZXk6ImdldFBhZ2VPYmpJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4icGFnZSIuY29uY2F0KG8udG9TdHJpbmcoKSl9fV0pLGl9KHMpfXZhciB0LHIscztyZXR1cm4gUihlLFt7a2V5OiJfZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxyPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dGhpcy5wYWdlRGljdCxrZXk6ZSxnZXRBcnJheTp0LHN0b3BXaGVuRm91bmQ6ITF9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT8xIT09ci5sZW5ndGgmJnJbMF1pbnN0YW5jZW9mIG8uRGljdD9vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpyfSk6clswXTpyfX0se2tleToiY29udGVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0QXJyYXkoIkNvbnRlbnRzIil9fSx7a2V5OiJyZXNvdXJjZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBvLkRpY3Q/ZTpvLkRpY3QuZW1wdHkpfX0se2tleToiX2dldEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O3ZhciB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZigodD1hLlV0aWwubm9ybWFsaXplUmVjdCh0KSlbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxhLndhcm4pKCJFbXB0eSwgb3IgaW52YWxpZCwgLyIuY29uY2F0KGUsIiBlbnRyeS4iKSl9cmV0dXJuIG51bGx9fSx7a2V5OiJtZWRpYUJveCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8Til9fSx7a2V5OiJjcm9wQm94IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9fSx7a2V5OiJ1c2VyVW5pdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7cmV0dXJuKCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpLCgwLGEuc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9fSx7a2V5OiJ2aWV3IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyb3BCb3gsdD10aGlzLm1lZGlhQm94O2lmKGUhPT10JiYhKDAsYS5pc0FycmF5RXF1YWwpKGUsdCkpe3ZhciByPWEuVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihyJiZyWzJdLXJbMF0+MCYmclszXS1yWzFdPjApcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZpZXciLHIpOygwLGEud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX19LHtrZXk6InJvdGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7cmV0dXJuIGUlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApLCgwLGEuc2hhZG93KSh0aGlzLCJyb3RhdGUiLGUpfX0se2tleToiX29uU3ViU3RyZWFtRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBlLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29udGVudFN1YlN0cmVhbX0pLHZvaWQoMCxhLndhcm4pKCJnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoIi5jb25jYXQociwnKTogIicpLmNvbmNhdCh0LCciLicpKTt0aHJvdyB0fX0se2tleToiZ2V0Q29udGVudFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50IikudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/cjpBcnJheS5pc0FycmF5KHIpP25ldyBtLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShyLHQuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0LGUpKTpuZXcgcC5OdWxsU3RyZWFtfSkpfX0se2tleToieGZhRGF0YSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX19LHtrZXk6InNhdmVOZXdBbm5vdGF0aW9ucyIsdmFsdWU6KHM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGksbyxzLGMsdSxsLGYsaCxkLHAsZztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhmYUZhY3Rvcnkpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y2FzZSAyOnJldHVybiBpPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSxvPXRoaXMucGFnZURpY3Qscz10aGlzLmFubm90YXRpb25zLnNsaWNlKCksZS5uZXh0PTcsbi5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMoaSxyLGEpO2Nhc2UgNzpjPWUuc2VudCx1PUYoYy5hbm5vdGF0aW9ucyk7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWY9bC52YWx1ZS5yZWYscy5wdXNoKGYpfWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfXJldHVybiBoPW8uZ2V0KCJBbm5vdHMiKSxvLnNldCgiQW5ub3RzIixzKSxkPVtdLHA9bnVsbCx0aGlzLnhyZWYuZW5jcnlwdCYmKHA9dGhpcy54cmVmLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSwoMCx3LndyaXRlT2JqZWN0KSh0aGlzLnJlZixvLGQscCksaCYmby5zZXQoIkFubm90cyIsaCksKGc9Yy5kZXBlbmRlbmNpZXMpLnB1c2guYXBwbHkoZyxbe3JlZjp0aGlzLnJlZixkYXRhOmQuam9pbigiIil9XS5jb25jYXQoQyhjLmFubm90YXRpb25zKSkpLGUuYWJydXB0KCJyZXR1cm4iLGcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBpLG89W10scz1GKGUpO3RyeXtmb3Iocy5zKCk7IShpPXMubigpKS5kb25lOyl7dmFyIGM9aS52YWx1ZTtjLm11c3RCZVByaW50ZWQocikmJm8ucHVzaChjLnNhdmUobix0LHIpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiKyciJy5jb25jYXQodC5uYW1lLCciIHRhc2s6ICInKS5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXJldHVybiBQcm9taXNlLmFsbChvKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX0pKX0pKX19LHtrZXk6ImxvYWRSZXNvdXJjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZXx8KHRoaXMucmVzb3VyY2VzUHJvbWlzZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpKSx0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcuT2JqZWN0TG9hZGVyKHQucmVzb3VyY2VzLGUsdC54cmVmKS5sb2FkKCl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsbz1lLnNpbmsscz1lLnRhc2ssYz1lLmludGVudCx1PWUuY2FjaGVLZXksbD1lLmFubm90YXRpb25TdG9yYWdlLGY9dm9pZCAwPT09bD9udWxsOmwsaD10aGlzLmdldENvbnRlbnRTdHJlYW0ociksZD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSkscD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksZz10aGlzLnhmYUZhY3Rvcnk/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShmKSxtPVByb21pc2UucmVzb2x2ZShudWxsKTtpZihnKXt2YXIgYj1nLmdldCh0aGlzLnBhZ2VJbmRleCk7YiYmKG09bi5Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKHAscyxiKSl9dmFyIHc9UHJvbWlzZS5hbGwoW2gsZF0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBuPU8oZSwxKVswXSxhPW5ldyB2Lk9wZXJhdG9yTGlzdChjLG8pO3JldHVybiByLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIse3RyYW5zcGFyZW5jeTpwLmhhc0JsZW5kTW9kZXModC5yZXNvdXJjZXMsdC5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dC5wYWdlSW5kZXgsY2FjaGVLZXk6dX0pLHAuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOnMscmVzb3VyY2VzOnQucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDphfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW3csdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsbV0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PU8oZSwzKSxyPXRbMF0sbj10WzFdLGk9dFsyXTtpZihpJiYobj1uLmNvbmNhdChpKSksMD09PW4ubGVuZ3RofHxjJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKXJldHVybiByLmZsdXNoKCEwKSx7bGVuZ3RoOnIudG90YWxMZW5ndGh9O3ZhciBvLHU9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMpLGw9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxoPSEhKGMmYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGQ9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpLGc9W10sdj1GKG4pO3RyeXtmb3Iodi5zKCk7IShvPXYubigpKS5kb25lOyl7dmFyIHk9by52YWx1ZTsobHx8aCYmeS5tdXN0QmVWaWV3ZWQoZil8fGQmJnkubXVzdEJlUHJpbnRlZChmKSkmJmcucHVzaCh5LmdldE9wZXJhdG9yTGlzdChwLHMsYyx1LGYpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIrJyInLmNvbmNhdChzLm5hbWUsJyIgdGFzazogIicpLmNvbmNhdChlLCciLicpKSx7b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXJldHVybiBQcm9taXNlLmFsbChnKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdCxuPSExLGE9ITEsaT1GKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89dC52YWx1ZSxzPW8ub3BMaXN0LGM9by5zZXBhcmF0ZUZvcm0sdT1vLnNlcGFyYXRlQ2FudmFzO3IuYWRkT3BMaXN0KHMpLGMmJihuPWMpLHUmJihhPXUpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gci5mbHVzaCghMCx7Zm9ybTpuLGNhbnZhczphfSkse2xlbmd0aDpyLnRvdGFsTGVuZ3RofX0pKX0pKX19LHtrZXk6ImV4dHJhY3RUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFuZGxlcixuPWUudGFzayxhPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT1lLnNpbmssbz1lLmNvbWJpbmVUZXh0SXRlbXMscz10aGlzLmdldENvbnRlbnRTdHJlYW0ociksYz10aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSk7cmV0dXJuIFByb21pc2UuYWxsKFtzLGNdKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcz1PKGUsMSlbMF07cmV0dXJuIG5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dC54cmVmLGhhbmRsZXI6cixwYWdlSW5kZXg6dC5wYWdlSW5kZXgsaWRGYWN0b3J5OnQuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0LmV2YWx1YXRvck9wdGlvbnN9KS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnMsdGFzazpuLHJlc291cmNlczp0LnJlc291cmNlcyxpbmNsdWRlTWFya2VkQ29udGVudDphLGNvbWJpbmVUZXh0SXRlbXM6byxzaW5rOmksdmlld0JveDp0LnZpZXd9KX0pKX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5uZXh0PTcsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbdF0pO2Nhc2UgNzpyZXR1cm4gcj1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsci5zZXJpYWxpemFibGUpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9wYXJzZVN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiLlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7cmV0dXJuIHQucGFyc2UoKSx0fX0se2tleToiZ2V0QW5ub3RhdGlvbnNEYXRhIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgaSxvLHMsYyx1LGwsZixoLGQscCxnO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3BhcnNlZEFubm90YXRpb25zO2Nhc2UgMjppZigwIT09KGk9ZS5zZW50KS5sZW5ndGgpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbXSk7Y2FzZSA1Om89W10scz1bXSx1PSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWSksbD0hIShuJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxmPSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKSxoPUYoaSk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSwoKGc9dXx8bCYmcC52aWV3YWJsZSl8fGYmJnAucHJpbnRhYmxlKSYmcy5wdXNoKHAuZGF0YSkscC5oYXNUZXh0Q29udGVudCYmZyYmKGN8fChjPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSksby5wdXNoKHAuZXh0cmFjdFRleHRDb250ZW50KGMscix0aGlzLnZpZXcpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxhLndhcm4pKCdnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIicuY29uY2F0KHIubmFtZSwnIiB0YXNrOiAiJykuY29uY2F0KGUsJyIuJykpfSkpKSl9Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGUubmV4dD0xMixQcm9taXNlLmFsbChvKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJhbm5vdGF0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfX0se2tleToiX3BhcnNlZEFubm90YXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQscj1bXSxpPUYoZS5hbm5vdGF0aW9ucyk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbz10LnZhbHVlO3IucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShlLnhyZWYsbyxlLnBkZk1hbmFnZXIsZS5fbG9jYWxJZEZhY3RvcnksITEpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIFByb21pc2UuYWxsKHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTt2YXIgdCxyLGE9W10saT1GKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvJiYobyBpbnN0YW5jZW9mIG4uUG9wdXBBbm5vdGF0aW9uPyh0fHwodD1bXSksdC5wdXNoKG8pKTphLnB1c2gobykpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdCYmYS5wdXNoLmFwcGx5KGEsQyh0KSksYX0pKX0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0KX19LHtrZXk6ImpzQWN0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9KDAsaS5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMucGFnZURpY3QsYS5QYWdlQWN0aW9uRXZlbnRUeXBlKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywianNBY3Rpb25zIixlKX19XSksZX0oKTt0LlBhZ2U9RDt2YXIgQj1uZXcgVWludDhBcnJheShbMzcsODAsNjgsNzAsNDVdKSxVPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksJD1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTExLDk4LDEwNl0pO2Z1bmN0aW9uIFgoZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTAyNCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sYT10Lmxlbmd0aCxpPWUucGVla0J5dGVzKHIpLG89aS5sZW5ndGgtYTtpZihvPD0wKXJldHVybiExO2lmKG4pZm9yKHZhciBzPWEtMSxjPWkubGVuZ3RoLTE7Yz49czspe2Zvcih2YXIgdT0wO3U8YSYmaVtjLXVdPT09dFtzLXVdOyl1Kys7aWYodT49YSlyZXR1cm4gZS5wb3MrPWMtcywhMDtjLS19ZWxzZSBmb3IodmFyIGw9MDtsPD1vOyl7Zm9yKHZhciBmPTA7ZjxhJiZpW2wrZl09PT10W2ZdOylmKys7aWYoZj49YSlyZXR1cm4gZS5wb3MrPWwsITA7bCsrfXJldHVybiExfXZhciBIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2lmKF8odGhpcyxlKSxyLmxlbmd0aDw9MCl0aHJvdyBuZXcgYS5JbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnN0cmVhbT1yLHRoaXMueHJlZj1uZXcgUy5YUmVmKHIsdCksdGhpcy5fcGFnZVByb21pc2VzPW5ldyBNYXAsdGhpcy5fdmVyc2lvbj1udWxsO3ZhciBuPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSl9cmV0dXJuIFIoZSxudWxsLFt7a2V5OiJnZXREb2NJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZ18iLmNvbmNhdCh0LmRvY0lkKX19LHtrZXk6ImNyZWF0ZUZvbnRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZiIuY29uY2F0KCsrbi5mb250KX19LHtrZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuIil9fSx7a2V5OiJnZXRQYWdlT2JqSWQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsYS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fV0pLGV9KCl9dmFyIHQscixwLG0sYix3LEMsUDtyZXR1cm4gUihlLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy54cmVmLnBhcnNlKGUpLHRoaXMuY2F0YWxvZz1uZXcgbC5DYXRhbG9nKHRoaXMucGRmTWFuYWdlcix0aGlzLnhyZWYpfX0se2tleToibGluZWFyaXphdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT1kLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoZSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfX0se2tleToic3RhcnRYUmVmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKWUucmVzZXQoKSxYKGUsJCkmJih0PWUucG9zKzYtZS5zdGFydCk7ZWxzZXtmb3IodmFyIHI9VS5sZW5ndGgsbj0hMSxvPWUuZW5kOyFuJiZvPjA7KShvLT0xMDI0LXIpPDAmJihvPTApLGUucG9zPW8sbj1YKGUsVSwxMDI0LCEwKTtpZihuKXt2YXIgcztlLnNraXAoOSk7ZG97cz1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkocykpO2Zvcih2YXIgYz0iIjtzPj0zMiYmczw9NTc7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykscz1lLmdldEJ5dGUoKTt0PXBhcnNlSW50KGMsMTApLGlzTmFOKHQpJiYodD0wKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInN0YXJ0WFJlZiIsdCl9fSx7a2V5OiJjaGVja0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksWChlLEIpKXtlLm1vdmVTdGFydCgpLGUuc2tpcChCLmxlbmd0aCk7Zm9yKHZhciB0LHI9IiI7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZyLmxlbmd0aDw3OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3Qocik/dGhpcy5fdmVyc2lvbj1yOigwLGEud2FybikoIkludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAiLmNvbmNhdChyKSl9fX0se2tleToicGFyc2VTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZil9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXMsKDAsYS5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX19LHtrZXk6Il9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChmdW5jdGlvbihlKXtpZighKChlPXQueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXJldHVybisrcj4xMD8oKDAsYS53YXJuKSgiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWQiKSwhMSk6dC5faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLmdldCgiS2lkcyIpLHIpO3ZhciBuPSgwLG8uaXNOYW1lKShlLmdldCgiRlQiKSwiU2lnIiksaT1lLmdldCgiUmVjdCIpLHM9QXJyYXkuaXNBcnJheShpKSYmaS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSkpO3JldHVybiBuJiZzfSkpfX0se2tleToiX3hmYVN0cmVhbXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiWEZBIikscj17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpcmV0dXJuIHJbInhkcDp4ZHAiXT10LHI7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKz0yKXt2YXIgaTtpZihpPTA9PT1uPyJ4ZHA6eGRwIjpuPT09YS0yPyIveGRwOnhkcCI6dFtuXSxyLmhhc093blByb3BlcnR5KGkpKXt2YXIgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W24rMV0pO28gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHkmJihyW2ldPW8pfX1yZXR1cm4gcn19LHtrZXk6InhmYURhdGFzZXRzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94ZmFTdHJlYW1zO2lmKCFlKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCk7Zm9yKHZhciB0PTAscj1bImRhdGFzZXRzIiwieGRwOnhkcCJdO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdLGk9ZVtuXTtpZihpKXRyeXt2YXIgbz17W25dOigwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShpLmdldFN0cmluZygpKX07cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixuZXcgaC5EYXRhc2V0UmVhZGVyKG8pKX1jYXRjaChlKXsoMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTticmVha319cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixudWxsKX19LHtrZXk6InhmYURhdGEiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj0wLG49T2JqZWN0LmVudHJpZXMoZSk7cjxuLmxlbmd0aDtyKyspe3ZhciBpPU8obltyXSwyKSxvPWlbMF0scz1pWzFdO2lmKHMpdHJ5e3Rbb109KDAsYS5zdHJpbmdUb1VURjhTdHJpbmcpKHMuZ2V0U3RyaW5nKCkpfWNhdGNoKGUpe3JldHVybigwLGEud2FybikoIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpLG51bGx9fXJldHVybiB0fX0se2tleToieGZhRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbmFibGVYZmEmJnRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyYmdGhpcy5mb3JtSW5mby5oYXNYZmEmJiF0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtJiYoZT10aGlzLnhmYURhdGEpLCgwLGEuc2hhZG93KSh0aGlzLCJ4ZmFGYWN0b3J5IixlP25ldyBrLlhGQUZhY3RvcnkoZSk6bnVsbCl9fSx7a2V5OiJpc1B1cmVYZmEiLGdldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy54ZmFGYWN0b3J5JiZ0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpfX0se2tleToiaHRtbEZvclhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0UGFnZXMoKTpudWxsfX0se2tleToibG9hZFhmYUltYWdlcyIsdmFsdWU6KFA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixhLGksbyxzLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInhmYUltYWdlcyIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIHI9dC5nZXRLZXlzKCksbj1uZXcgZy5PYmplY3RMb2FkZXIodCxyLHRoaXMueHJlZiksZS5uZXh0PTksbi5sb2FkKCk7Y2FzZSA5OmE9bmV3IE1hcCxpPUYocik7dHJ5e2ZvcihpLnMoKTshKG89aS5uKCkpLmRvbmU7KXM9by52YWx1ZSwodT10LmdldChzKSlpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmYS5zZXQocyx1LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoYSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRYZmFGb250cyIsdmFsdWU6KEM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGMsdSxsLGYsaCxkLHAsbSxiLHcsayxTLHgsQyxQLFQsSSxFLGosTSxfLEwsUixOLEQsQixVLCQsWCxILHEsRyx6O3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpO2Nhc2UgMjppZihuPWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LG4uZ2V0QXN5bmMoIkRSIik7Y2FzZSA3OmlmKChjPWUuc2VudClpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpyZXR1cm4gdT1uZXcgZy5PYmplY3RMb2FkZXIoYyxbIkZvbnQiXSx0aGlzLnhyZWYpLGUubmV4dD0xMyx1LmxvYWQoKTtjYXNlIDEzOmlmKChsPWMuZ2V0KCJGb250IikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTY6KGY9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKSkudXNlU3lzdGVtRm9udHM9ITEsaD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmZ9KSxkPW5ldyB2Lk9wZXJhdG9yTGlzdCxwPVtdLGUudDA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbT17Z2V0IGZvbnQoKXtyZXR1cm4gcC5hdCgtMSl9LHNldCBmb250KGUpe3AucHVzaChlKX0sY2xvbmU6ZS50MH0sYj1uZXcgTWFwLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtiLnNldChlLHQpfSkpLHc9W10saz1GKGIpLGUucHJldj0yNyxrLnMoKTtjYXNlIDI5OmlmKChTPWsubigpKS5kb25lKXtlLm5leHQ9NDQ7YnJlYWt9aWYoeD1PKFMudmFsdWUsMiksQz14WzBdLFA9eFsxXSwoVD1QLmdldCgiRm9udERlc2NyaXB0b3IiKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTM0O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDQyKTtjYXNlIDM0OmlmKEk9KEk9VC5nZXQoIkZvbnRGYW1pbHkiKSkucmVwbGFjZSgvWyBdKyhcZCkvZywiJDEiKSxFPVQuZ2V0KCJGb250V2VpZ2h0Iiksaj0tVC5nZXQoIkl0YWxpY0FuZ2xlIiksTT17Zm9udEZhbWlseTpJLGZvbnRXZWlnaHQ6RSxpdGFsaWNBbmdsZTpqfSwoMCxpLnZhbGlkYXRlQ1NTRm9udCkoTSkpe2UubmV4dD00MTticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw0Mik7Y2FzZSA0MTp3LnB1c2goaC5oYW5kbGVTZXRGb250KGMsW28uTmFtZS5nZXQoQyksMV0sbnVsbCxkLHIsbSxudWxsLE0pLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkWGZhRm9udHM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKTtjYXNlIDQyOmUubmV4dD0yOTticmVhaztjYXNlIDQ0OmUubmV4dD00OTticmVhaztjYXNlIDQ2OmUucHJldj00NixlLnQxPWUuY2F0Y2goMjcpLGsuZShlLnQxKTtjYXNlIDQ5OnJldHVybiBlLnByZXY9NDksay5mKCksZS5maW5pc2goNDkpO2Nhc2UgNTI6cmV0dXJuIGUubmV4dD01NCxQcm9taXNlLmFsbCh3KTtjYXNlIDU0OmlmKF89dGhpcy54ZmFGYWN0b3J5LnNldEZvbnRzKHApKXtlLm5leHQ9NTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU3OmYuaWdub3JlRXJyb3JzPSEwLHcubGVuZ3RoPTAscC5sZW5ndGg9MCxMPW5ldyBTZXQsUj1GKF8pO3RyeXtmb3IoUi5zKCk7IShOPVIubigpKS5kb25lOylEPU4udmFsdWUsKDAscy5nZXRYZmFGb250TmFtZSkoIiIuY29uY2F0KEQsIi1SZWd1bGFyIikpfHxMLmFkZChEKX1jYXRjaChlKXtSLmUoZSl9ZmluYWxseXtSLmYoKX1MLnNpemUmJl8ucHVzaCgiUGRmSlMtRmFsbGJhY2siKSxCPUYoXyksZS5wcmV2PTY1LEIucygpO2Nhc2UgNjc6aWYoKFU9Qi5uKCkpLmRvbmUpe2UubmV4dD03NDticmVha31pZigkPVUudmFsdWUsIUwuaGFzKCQpKXtlLm5leHQ9NzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJjb250aW51ZSIsNzIpO2Nhc2UgNzE6Zm9yKFg9MCxIPVt7bmFtZToiUmVndWxhciIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MH0se25hbWU6IkJvbGQiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJJdGFsaWMiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjEyfSx7bmFtZToiQm9sZEl0YWxpYyIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MTJ9XTtYPEgubGVuZ3RoO1grKylxPUhbWF0sRz0iIi5jb25jYXQoJCwiLSIpLmNvbmNhdChxLm5hbWUpLHo9KDAscy5nZXRYZmFGb250RGljdCkoRyksdy5wdXNoKGguaGFuZGxlU2V0Rm9udChjLFtvLk5hbWUuZ2V0KEcpLDFdLG51bGwsZCxyLG0seix7Zm9udEZhbWlseTokLGZvbnRXZWlnaHQ6cS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOnEuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS53YXJuKSgnbG9hZFhmYUZvbnRzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSk7Y2FzZSA3MjplLm5leHQ9Njc7YnJlYWs7Y2FzZSA3NDplLm5leHQ9Nzk7YnJlYWs7Y2FzZSA3NjplLnByZXY9NzYsZS50Mj1lLmNhdGNoKDY1KSxCLmUoZS50Mik7Y2FzZSA3OTpyZXR1cm4gZS5wcmV2PTc5LEIuZigpLGUuZmluaXNoKDc5KTtjYXNlIDgyOnJldHVybiBlLm5leHQ9ODQsUHJvbWlzZS5hbGwodyk7Y2FzZSA4NDp0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMocCxMKTtjYXNlIDg1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMjcsNDYsNDksNTJdLFs2NSw3Niw3OSw4Ml1dKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplWGZhRGF0YSIsdmFsdWU6KHc9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEodCk6bnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InZlcnNpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn19LHtrZXk6ImZvcm1JbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT17aGFzRmllbGRzOiExLGhhc0Fjcm9Gb3JtOiExLGhhc1hmYTohMSxoYXNTaWduYXR1cmVzOiExfSx0PXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighdClyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZm9ybUluZm8iLGUpO3RyeXt2YXIgcj10LmdldCgiRmllbGRzIiksbj1BcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wO2UuaGFzRmllbGRzPW47dmFyIG89dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoPjB8fG8gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHk7dmFyIHM9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSksdT1zJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKHIpO2UuaGFzQWNyb0Zvcm09biYmIXUsZS5oYXNTaWduYXR1cmVzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCdDYW5ub3QgZmV0Y2ggZm9ybSBpbmZvcm1hdGlvbjogIicuY29uY2F0KGUsJyIuJykpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSl9fSx7a2V5OiJkb2N1bWVudEluZm8iLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9e1BERkZvcm1hdFZlcnNpb246dGhpcy52ZXJzaW9uLExhbmd1YWdlOnRoaXMuY2F0YWxvZy5sYW5nLEVuY3J5cHRGaWx0ZXJOYW1lOnRoaXMueHJlZi5lbmNyeXB0P3RoaXMueHJlZi5lbmNyeXB0LmZpbHRlck5hbWU6bnVsbCxJc0xpbmVhcml6ZWQ6ISF0aGlzLmxpbmVhcml6YXRpb24sSXNBY3JvRm9ybVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxJc1hGQVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNYZmEsSXNDb2xsZWN0aW9uUHJlc2VudDohIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLElzU2lnbmF0dXJlc1ByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzfTt0cnl7ZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkluZm8iKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZG9jdW1lbnRJbmZvIix0KTt2YXIgcixuPUYoZS5nZXRLZXlzKCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIHM9ci52YWx1ZSxjPWUuZ2V0KHMpO3N3aXRjaChzKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgYyl7dFtzXT0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKGMgaW5zdGFuY2VvZiBvLk5hbWUpe3Rbc109Yztjb250aW51ZX1icmVhaztkZWZhdWx0OnZhciB1PXZvaWQgMDtzd2l0Y2goeChjKSl7Y2FzZSJzdHJpbmciOnU9KDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dT1jO2JyZWFrO2RlZmF1bHQ6YyBpbnN0YW5jZW9mIG8uTmFtZSYmKHU9Yyl9aWYodm9pZCAwPT09dSl7KDAsYS53YXJuKSgnQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSk7Y29udGludWV9dC5DdXN0b218fCh0LkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKSx0LkN1c3RvbVtzXT11O2NvbnRpbnVlfSgwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLHQpfX0se2tleToiZmluZ2VycHJpbnRzIixnZXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gdChlKXt2YXIgdCxyPVtdLG49RihlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWUudG9TdHJpbmcoMTYpO3IucHVzaChhLnBhZFN0YXJ0KDIsIjAiKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByLmpvaW4oIiIpfXZhciByLG4saT10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJmUoaVswXSk/KHI9KDAsYS5zdHJpbmdUb0J5dGVzKShpWzBdKSxpWzFdIT09aVswXSYmZShpWzFdKSYmKG49KDAsYS5zdHJpbmdUb0J5dGVzKShpWzFdKSkpOnI9KDAsdS5jYWxjdWxhdGVNRDUpKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLDEwMjQpLDAsMTAyNCksKDAsYS5zaGFkb3cpKHRoaXMsImZpbmdlcnByaW50cyIsW3Qociksbj90KG4pOm51bGxdKX19LHtrZXk6Il9nZXRMaW5lYXJpemF0aW9uUGFnZSIsdmFsdWU6KGI9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGkscyxjLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gcj10aGlzLmNhdGFsb2csbj10aGlzLmxpbmVhcml6YXRpb24saT10aGlzLnhyZWYscz1vLlJlZi5nZXQobi5vYmplY3ROdW1iZXJGaXJzdCwwKSxlLnByZXY9MixlLm5leHQ9NSxpLmZldGNoQXN5bmMocyk7Y2FzZSA1OmlmKCEoKGM9ZS5zZW50KWluc3RhbmNlb2Ygby5EaWN0KSl7ZS5uZXh0PTE2O2JyZWFrfWlmKCEoKHU9Yy5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTEyO2JyZWFrfXJldHVybiBlLm5leHQ9MTEsaS5mZXRjaEFzeW5jKHUpO2Nhc2UgMTE6dT1lLnNlbnQ7Y2FzZSAxMjppZighKDAsby5pc05hbWUpKHUsIlBhZ2UiKSYmKGMuaGFzKCJUeXBlIil8fGMuaGFzKCJLaWRzIikpKXtlLm5leHQ9MTY7YnJlYWt9cmV0dXJuIHIucGFnZUtpZHNDb3VudENhY2hlLmhhcyhzKXx8ci5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KHMsMSksci5wYWdlSW5kZXhDYWNoZS5oYXMocyl8fHIucGFnZUluZGV4Q2FjaGUucHV0KHMsMCksZS5hYnJ1cHQoInJldHVybiIsW2Msc10pO2Nhc2UgMTY6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlRoZSBMaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lc24ndCBwb2ludCB0byBhIHZhbGlkIFBhZ2UgZGljdGlvbmFyeS4iKTtjYXNlIDE5OnJldHVybiBlLnByZXY9MTksZS50MD1lLmNhdGNoKDIpLCgwLGEud2FybikoJ19nZXRMaW5lYXJpemF0aW9uUGFnZTogIicuY29uY2F0KGUudDAubWVzc2FnZSwnIi4nKSksZS5hYnJ1cHQoInJldHVybiIsci5nZXRQYWdlRGljdCh0KSk7Y2FzZSAyMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIsMTldXSl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5fcGFnZVByb21pc2VzLmdldChlKTtpZihyKXJldHVybiByO3ZhciBuLGE9dGhpcy5jYXRhbG9nLGk9dGhpcy5saW5lYXJpemF0aW9uLHM9dGhpcy54ZmFGYWN0b3J5O3JldHVybiBuPShuPXM/UHJvbWlzZS5yZXNvbHZlKFtvLkRpY3QuZW1wdHksbnVsbF0pOmkmJmkucGFnZUZpcnN0PT09ZT90aGlzLl9nZXRMaW5lYXJpemF0aW9uUGFnZShlKTphLmdldFBhZ2VEaWN0KGUpKS50aGVuKChmdW5jdGlvbihyKXt2YXIgbj1PKHIsMiksaT1uWzBdLG89blsxXTtyZXR1cm4gbmV3IEQoe3BkZk1hbmFnZXI6dC5wZGZNYW5hZ2VyLHhyZWY6dC54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OmkscmVmOm8sZ2xvYmFsSWRGYWN0b3J5OnQuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6c30pfSkpLHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxuKSxufX0se2tleToiY2hlY2tGaXJzdFBhZ2UiLHZhbHVlOihtPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHM7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighKHQubGVuZ3RoPjAmJnZvaWQgMCE9PXRbMF0mJnRbMF0pKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpyZXR1cm4gZS5wcmV2PTMsZS5uZXh0PTYsdGhpcy5nZXRQYWdlKDApO2Nhc2UgNjplLm5leHQ9MTU7YnJlYWs7Y2FzZSA4OmlmKGUucHJldj04LGUudDA9ZS5jYXRjaCgzKSwhKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbikpe2UubmV4dD0xNTticmVha31yZXR1cm4gdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKSxlLm5leHQ9MTQsdGhpcy5jbGVhbnVwKCk7Y2FzZSAxNDp0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzMsOF1dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2hlY2tMYXN0UGFnZSIsdmFsdWU6KHA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixvLHMsYyx1LGwsZixoLGQscCxnLHY9YXJndW1lbnRzO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9di5sZW5ndGg+MCYmdm9pZCAwIT09dlswXSYmdlswXSxyPXRoaXMuY2F0YWxvZyxuPXRoaXMucGRmTWFuYWdlcixyLnNldEFjdHVhbE51bVBhZ2VzKCksZS5wcmV2PTMsZS5uZXh0PTYsUHJvbWlzZS5hbGwoW24uZW5zdXJlRG9jKCJ4ZmFGYWN0b3J5Iiksbi5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxuLmVuc3VyZUNhdGFsb2coIm51bVBhZ2VzIildKTtjYXNlIDY6aWYoIXRoaXMueGZhRmFjdG9yeSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpvPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6ci5udW1QYWdlcztjYXNlIDExOmlmKE51bWJlci5pc0ludGVnZXIobykpe2UubmV4dD0xNTticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtjYXNlIDE1OmlmKCEobzw9MSkpe2UubmV4dD0xNzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTc6cmV0dXJuIGUubmV4dD0xOSx0aGlzLmdldFBhZ2Uoby0xKTtjYXNlIDE5OmUubmV4dD00NDticmVhaztjYXNlIDIxOnJldHVybiBlLnByZXY9MjEsZS50MD1lLmNhdGNoKDMpLHRoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoby0xKSxlLm5leHQ9MjYsdGhpcy5jbGVhbnVwKCk7Y2FzZSAyNjppZighKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbil8fHQpe2UubmV4dD0yODticmVha310aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAyODpyZXR1cm4oMCxhLndhcm4pKCJjaGVja0xhc3RQYWdlIC0gaW52YWxpZCAvUGFnZXMgdHJlZSAvQ291bnQ6ICIuY29uY2F0KG8sIi4iKSksZS5wcmV2PTI5LGUubmV4dD0zMixyLmdldEFsbFBhZ2VEaWN0cyh0KTtjYXNlIDMyOnM9ZS5zZW50LGUubmV4dD00MTticmVhaztjYXNlIDM1OmlmKGUucHJldj0zNSxlLnQxPWUuY2F0Y2goMjkpLCEoZS50MSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uKXx8dCl7ZS5uZXh0PTM5O2JyZWFrfXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjtjYXNlIDM5OnJldHVybiByLnNldEFjdHVhbE51bVBhZ2VzKDEpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQxOmM9RihzKTt0cnl7Zm9yKGMucygpOyEodT1jLm4oKSkuZG9uZTspbD1PKHUudmFsdWUsMiksZj1sWzBdLGg9TyhsWzFdLDIpLGQ9aFswXSxwPWhbMV0sZz12b2lkIDAsZCBpbnN0YW5jZW9mIEVycm9yPyhnPVByb21pc2UucmVqZWN0KGQpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSk6Zz1Qcm9taXNlLnJlc29sdmUobmV3IEQoe3BkZk1hbmFnZXI6bix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZixwYWdlRGljdDpkLHJlZjpwLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnIuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6ci5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTpyLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnIuZ2xvYmFsSW1hZ2VDYWNoZSxub25CbGVuZE1vZGVzU2V0OnIubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Om51bGx9KSksdGhpcy5fcGFnZVByb21pc2VzLnNldChmLGcpfWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXIuc2V0QWN0dWFsTnVtUGFnZXMocy5zaXplKTtjYXNlIDQ0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMywyMV0sWzI5LDM1XV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soZSx0KX19LHtrZXk6ImNsZWFudXAiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyPWFyZ3VtZW50cztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXIubGVuZ3RoPjAmJnZvaWQgMCE9PXJbMF0mJnJbMF0sZS5hYnJ1cHQoInJldHVybiIsdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKHQpOigwLGYuY2xlYXJHbG9iYWxDYWNoZXMpKCkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9jb2xsZWN0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoaS5oYXMoIlQiKSl7dmFyIG89KDAsYS5zdHJpbmdUb1BERlN0cmluZykoaS5nZXQoIlQiKSk7ZT0iIj09PWU/bzoiIi5jb25jYXQoZSwiLiIpLmNvbmNhdChvKX1pZihyLmhhcyhlKXx8ci5zZXQoZSxbXSksci5nZXQoZSkucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCx0aGlzLnBkZk1hbmFnZXIsdGhpcy5fbG9jYWxJZEZhY3RvcnksITApLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmdldEZpZWxkT2JqZWN0KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybigwLGEud2FybikoJ19jb2xsZWN0RmllbGRPYmplY3RzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSksaS5oYXMoIktpZHMiKSl7dmFyIHMsYz1GKGkuZ2V0KCJLaWRzIikpO3RyeXtmb3IoYy5zKCk7IShzPWMubigpKS5kb25lOyl7dmFyIHU9cy52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKGUsdSxyKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19LHtrZXk6ImZpZWxkT2JqZWN0cyIsZ2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9bmV3IE1hcCxuPUYodGhpcy5jYXRhbG9nLmFjcm9Gb3JtLmdldCgiRmllbGRzIikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGkscil9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBvLHM9W10sYz1GKHIpO3RyeXt2YXIgdT1mdW5jdGlvbigpe3ZhciBlPU8oby52YWx1ZSwyKSxyPWVbMF0sbj1lWzFdO3MucHVzaChQcm9taXNlLmFsbChuKS50aGVuKChmdW5jdGlvbihlKXsoZT1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSkpKS5sZW5ndGg+MCYmKHRbcl09ZSl9KSkpfTtmb3IoYy5zKCk7IShvPWMubigpKS5kb25lOyl1KCl9Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoIl9wYXJzZUhhc0pTQWN0aW9ucyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJoYXNKU0FjdGlvbnMiLGUpfX0se2tleToiX3BhcnNlSGFzSlNBY3Rpb25zIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLGE7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO2Nhc2UgMjppZih0PWUuc2VudCxyPU8odCwyKSxuPXJbMF0sYT1yWzFdLCFuKXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsITApO2Nhc2UgODppZighYSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixPYmplY3QudmFsdWVzKGEpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS5hY3Rpb25zfSkpfSkpKTtjYXNlIDEwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIiwhMSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbGN1bGF0aW9uT3JkZXJJZHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZXx8IWUuaGFzKCJDTyIpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgdD1lLmdldCgiQ08iKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgcixuPVtdLGk9Rih0KTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7cyBpbnN0YW5jZW9mIG8uUmVmJiZuLnB1c2gocy50b1N0cmluZygpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIDA9PT1uLmxlbmd0aD8oMCxhLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsYS5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG4pfX1dKSxlfSgpO3QuUERGRG9jdW1lbnQ9SH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvcHVwQW5ub3RhdGlvbj10Lk1hcmt1cEFubm90YXRpb249dC5Bbm5vdGF0aW9uRmFjdG9yeT10LkFubm90YXRpb25Cb3JkZXJTdHlsZT10LkFubm90YXRpb249dm9pZCAwLHQuZ2V0UXVhZFBvaW50cz1EO3ZhciBuPXIoMiksYT1yKDEzNSksaT1yKDE0Miksbz1yKDEzNCkscz1yKDE5NCksYz1yKDEzNiksdT1yKDE4OSksbD1yKDE5OCksZj1yKDE0MyksaD1yKDIwMSksZD1yKDIwNCkscD1yKDE5MSksZz1yKDEzOSksdj1yKDIwNSk7ZnVuY3Rpb24geSgpe3JldHVybiB5PSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9eChlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYihlLHQpfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gYj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGIoZSx0KX1mdW5jdGlvbiB3KGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPXgoZSk7aWYodCl7dmFyIGE9eCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gayh0aGlzLHIpfX1mdW5jdGlvbiBrKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Tyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gUyhlKX1mdW5jdGlvbiBTKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB4KGUpe3JldHVybiB4PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSx4KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9SShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gQygpe0M9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09TyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gRihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7RihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7RihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8SShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gRShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0UoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEUoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBqKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gTShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1PKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09TyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PU8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIF8oZSx0LHIpe3JldHVybiB0JiZNKGUucHJvdG90eXBlLHQpLHImJk0oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2oodGhpcyxlKX12YXIgdCxyLGk7cmV0dXJuIF8oZSxudWxsLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9dGhpcztyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxyLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxyLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksci5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksYT90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LHIpOi0xXSkudGhlbigoZnVuY3Rpb24obyl7dmFyIHM9VChvLDUpLGM9c1swXSx1PShzWzFdLHNbMl0pLGw9c1szXSxmPXNbNF07cmV0dXJuIHIuZW5zdXJlKGksIl9jcmVhdGUiLFtlLHQscixuLGMsdSxsLGEsZl0pfSkpfX0se2tleToiX2NyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06bnVsbCx1PWFyZ3VtZW50cy5sZW5ndGg+Nj9hcmd1bWVudHNbNl06dm9pZCAwLGw9YXJndW1lbnRzLmxlbmd0aD43P2FyZ3VtZW50c1s3XTp2b2lkIDAsZj1hcmd1bWVudHMubGVuZ3RoPjgmJnZvaWQgMCE9PWFyZ3VtZW50c1s4XT9hcmd1bWVudHNbOF06LTEsaD1lLmZldGNoSWZSZWYodCk7aWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQ9dCBpbnN0YW5jZW9mIG8uUmVmP3QudG9TdHJpbmcoKToiYW5ub3RfIi5jb25jYXQoaS5jcmVhdGVPYmpJZCgpKSxwPWguZ2V0KCJTdWJ0eXBlIik7cD1wIGluc3RhbmNlb2Ygby5OYW1lP3AubmFtZTpudWxsO3ZhciBnPXMgaW5zdGFuY2VvZiBvLkRpY3Q/czpvLkRpY3QuZW1wdHksdj17eHJlZjplLHJlZjp0LGRpY3Q6aCxzdWJ0eXBlOnAsaWQ6ZCxwZGZNYW5hZ2VyOnIsYWNyb0Zvcm06ZyxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOnUsY29sbGVjdEZpZWxkczpsLG5lZWRBcHBlYXJhbmNlczohbCYmITA9PT1nLmdldCgiTmVlZEFwcGVhcmFuY2VzIikscGFnZUluZGV4OmYsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bi5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCYmci5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfTtzd2l0Y2gocCl7Y2FzZSJMaW5rIjpyZXR1cm4gbmV3IFkodik7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFYodik7Y2FzZSJXaWRnZXQiOnZhciB5PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6aCxrZXk6IkZUIn0pO3N3aXRjaCh5PXkgaW5zdGFuY2VvZiBvLk5hbWU/eS5uYW1lOm51bGwpe2Nhc2UiVHgiOnJldHVybiBuZXcgcSh2KTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBHKHYpO2Nhc2UiQ2giOnJldHVybiBuZXcgeih2KTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBXKHYpfXJldHVybigwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIicuY29uY2F0KHksJyIsICcpKyJmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLiIpLG5ldyBIKHYpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgSyh2KTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEoodik7Y2FzZSJMaW5lIjpyZXR1cm4gbmV3IFoodik7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgUSh2KTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBlZSh2KTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IHRlKHYpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyByZSh2KTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IG5lKHYpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IGFlKHYpO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IGllKHYpO2Nhc2UiVW5kZXJsaW5lIjpyZXR1cm4gbmV3IG9lKHYpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgc2Uodik7Y2FzZSJTdHJpa2VPdXQiOnJldHVybiBuZXcgY2Uodik7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyB1ZSh2KTtjYXNlIkZpbGVBdHRhY2htZW50IjpyZXR1cm4gbmV3IGxlKHYpO2RlZmF1bHQ6cmV0dXJuIGx8fChwPygwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICInLmNvbmNhdChwLCciLCAnKSsiZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi4iKTooMCxuLndhcm4pKCJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpKSxuZXcgVSh2KX19fX0se2tleToiX2dldFBhZ2VJbmRleCIsdmFsdWU6KGk9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGkscyxjO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUubmV4dD0zLHQuZmV0Y2hJZlJlZkFzeW5jKHIpO2Nhc2UgMzppZigoaT1lLnNlbnQpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSA2OmlmKChzPWkuZ2V0UmF3KCJQIikpaW5zdGFuY2VvZiBvLlJlZil7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLC0xKTtjYXNlIDk6cmV0dXJuIGUubmV4dD0xMSxhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3NdKTtjYXNlIDExOnJldHVybiBjPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE1OnJldHVybiBlLnByZXY9MTUsZS50MD1lLmNhdGNoKDApLCgwLG4ud2FybikoJ19nZXRQYWdlSW5kZXg6ICInLmNvbmNhdChlLnQwLCciLicpKSxlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzAsMTVdXSl9KSkpLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZU5ld0Fubm90YXRpb25zIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhKXt2YXIgaSxjLHUsbCxmLGgsZCxwLGc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppPXQueHJlZix1PVtdLGw9W10sZj1BKGEpLGUucHJldj00LGYucygpO2Nhc2UgNjppZigoaD1mLm4oKSkuZG9uZSl7ZS5uZXh0PTE3O2JyZWFrfWQ9aC52YWx1ZSxlLnQwPWQuYW5ub3RhdGlvblR5cGUsZS5uZXh0PWUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUPzExOmUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8xNDoxNTticmVhaztjYXNlIDExOnJldHVybiBjfHwoKHA9bmV3IG8uRGljdChpKSkuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiSGVsdmV0aWNhIikpLHAuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGb250IikpLHAuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJUeXBlMSIpKSxwLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSxnPVtdLGM9aS5nZXROZXdUZW1wb3JhcnlSZWYoKSwoMCxzLndyaXRlT2JqZWN0KShjLHAsZyxudWxsKSx1LnB1c2goe3JlZjpjLGRhdGE6Zy5qb2luKCIiKX0pKSxsLnB1c2goSi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1LHtldmFsdWF0b3I6dCx0YXNrOnIsYmFzZUZvbnRSZWY6Y30pKSxlLmFicnVwdCgiYnJlYWsiLDE1KTtjYXNlIDE0OmwucHVzaChhZS5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1KSk7Y2FzZSAxNTplLm5leHQ9NjticmVhaztjYXNlIDE3OmUubmV4dD0yMjticmVhaztjYXNlIDE5OmUucHJldj0xOSxlLnQxPWUuY2F0Y2goNCksZi5lKGUudDEpO2Nhc2UgMjI6cmV0dXJuIGUucHJldj0yMixmLmYoKSxlLmZpbmlzaCgyMik7Y2FzZSAyNTpyZXR1cm4gZS5uZXh0PTI3LFByb21pc2UuYWxsKGwpO2Nhc2UgMjc6cmV0dXJuIGUudDI9ZS5zZW50LGUudDM9dSxlLmFicnVwdCgicmV0dXJuIix7YW5ub3RhdGlvbnM6ZS50MixkZXBlbmRlbmNpZXM6ZS50M30pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDE5LDIyLDI1XV0pfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InByaW50TmV3QW5ub3RhdGlvbnMiLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLG8scyxjLHUsbDtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGEpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDI6aT10LnhyZWYsbz1bXSxzPW4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJnQub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCxjPUEoYSksZS5wcmV2PTYsYy5zKCk7Y2FzZSA4OmlmKCh1PWMubigpKS5kb25lKXtlLm5leHQ9MTk7YnJlYWt9bD11LnZhbHVlLGUudDA9bC5hbm5vdGF0aW9uVHlwZSxlLm5leHQ9ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ/MTM6ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LPzE1OjE3O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIG8ucHVzaChKLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihpLGwse2V2YWx1YXRvcjp0LHRhc2s6cixpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTU6cmV0dXJuIG8ucHVzaChhZS5jcmVhdGVOZXdQcmludEFubm90YXRpb24oaSxsLHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTc6ZS5uZXh0PTg7YnJlYWs7Y2FzZSAxOTplLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50MT1lLmNhdGNoKDYpLGMuZShlLnQxKTtjYXNlIDI0OnJldHVybiBlLnByZXY9MjQsYy5mKCksZS5maW5pc2goMjQpO2Nhc2UgMjc6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UuYWxsKG8pKTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNiwyMSwyNCwyN11dKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGV9KCk7ZnVuY3Rpb24gUihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O3ZhciByPXR8fG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2Nhc2UgMzpyZXR1cm4gZi5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLHIsMCkscjtjYXNlIDQ6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIEFycmF5LmZyb20oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUvMjU1fSkpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmdldEFycmF5KCJRdWFkUG9pbnRzIik7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aHx8ci5sZW5ndGglOD4wKXJldHVybiBudWxsO2Zvcih2YXIgbj1bXSxhPTAsaT1yLmxlbmd0aC84O2E8aTthKyspe2Zvcih2YXIgbz0xLzAscz0tMS8wLGM9MS8wLHU9LTEvMCxsPTgqYSxmPTgqYSs4O2w8ZjtsKz0yKXt2YXIgaD1yW2xdLGQ9cltsKzFdO289TWF0aC5taW4oaCxvKSxzPU1hdGgubWF4KGgscyksYz1NYXRoLm1pbihkLGMpLHU9TWF0aC5tYXgoZCx1KX1pZihudWxsIT09dCYmKG88dFswXXx8cz50WzJdfHxjPHRbMV18fHU+dFszXSkpcmV0dXJuIG51bGw7bi5wdXNoKFt7eDpvLHk6dX0se3g6cyx5OnV9LHt4Om8seTpjfSx7eDpzLHk6Y31dKX1yZXR1cm4gbn1mdW5jdGlvbiBCKGUsdCxyKXt2YXIgYT1UKG4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LHIpLDQpLGk9YVswXSxvPWFbMV0scz1hWzJdLGM9YVszXTtpZihpPT09c3x8bz09PWMpcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTt2YXIgdT0oZVsyXS1lWzBdKS8ocy1pKSxsPShlWzNdLWVbMV0pLyhjLW8pO3JldHVyblt1LDAsMCxsLGVbMF0taSp1LGVbMV0tbypsXX10LkFubm90YXRpb25GYWN0b3J5PUw7dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2oodGhpcyxlKTt2YXIgcj10LmRpY3QsaT10LnhyZWY7dGhpcy5zZXRUaXRsZShyLmdldCgiVCIpKSx0aGlzLnNldENvbnRlbnRzKHIuZ2V0KCJDb250ZW50cyIpKSx0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoci5nZXQoIk0iKSksdGhpcy5zZXRGbGFncyhyLmdldCgiRiIpKSx0aGlzLnNldFJlY3RhbmdsZShyLmdldEFycmF5KCJSZWN0IikpLHRoaXMuc2V0Q29sb3Ioci5nZXRBcnJheSgiQyIpKSx0aGlzLnNldEJvcmRlclN0eWxlKHIpLHRoaXMuc2V0QXBwZWFyYW5jZShyKSx0aGlzLnNldE9wdGlvbmFsQ29udGVudChyKTt2YXIgcz1yLmdldCgiTUsiKTtpZih0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMocyksdGhpcy5zZXRSb3RhdGlvbihzKSx0aGlzLl9zdHJlYW1zPVtdLHRoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSksdGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOnQuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOnQuc3VidHlwZSxoYXNPd25DYW52YXM6ITF9LHQuY29sbGVjdEZpZWxkcyl7dmFyIGM9ci5nZXQoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgdSxsPVtdLGY9QShjKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aCBpbnN0YW5jZW9mIG8uUmVmJiZsLnB1c2goaC50b1N0cmluZygpKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9MCE9PWwubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1sKX10aGlzLmRhdGEuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSx0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZShyKSx0aGlzLmRhdGEucGFnZUluZGV4PXQucGFnZUluZGV4fXRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPXQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsdGhpcy5fZmFsbGJhY2tGb250RGljdD1udWxsLHRoaXMuX25lZWRBcHBlYXJhbmNlcz0hMX12YXIgdCxyLHM7cmV0dXJuIF8oZSxbe2tleToiX2hhc0ZsYWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuISEoZSZ0KX19LHtrZXk6Il9pc1ZpZXdhYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9fSx7a2V5OiJfaXNQcmludGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpfX0se2tleToibXVzdEJlVmlld2VkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LmhpZGRlbj8hdC5oaWRkZW46dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTil9fSx7a2V5OiJtdXN0QmVQcmludGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LnByaW50P3QucHJpbnQ6dGhpcy5wcmludGFibGV9fSx7a2V5OiJ2aWV3YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmKDA9PT10aGlzLmZsYWdzfHx0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpKX19LHtrZXk6InByaW50YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpfX0se2tleToiX3BhcnNlU3RyaW5nSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLHUuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX19LHtrZXk6InNldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIHQ/dDoiIix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UpfX0se2tleToic2V0VGl0bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3RpdGxlPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0Q29udGVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NvbnRlbnRzPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0TW9kaWZpY2F0aW9uRGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5tb2RpZmljYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9fSx7a2V5OiJzZXRGbGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mbGFncz1OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjA/ZTowfX0se2tleToiaGFzRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxlKX19LHtrZXk6InNldFJlY3RhbmdsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoP3RoaXMucmVjdGFuZ2xlPW4uVXRpbC5ub3JtYWxpemVSZWN0KGUpOnRoaXMucmVjdGFuZ2xlPVswLDAsMCwwXX19LHtrZXk6InNldENvbG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNvbG9yPVIoZSl9fSx7a2V5OiJzZXRMaW5lRW5kaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl0sQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcih2YXIgdD0wO3Q8Mjt0Kyspe3ZhciByPWVbdF07aWYociBpbnN0YW5jZW9mIG8uTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPXIubmFtZTtjb250aW51ZX0oMCxuLndhcm4pKCJJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICIuY29uY2F0KHIpKX19fSx7a2V5OiJzZXRSb3RhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5yb3RhdGlvbj0wLGUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB0PWUuZ2V0KCJSIil8fDA7TnVtYmVyLmlzSW50ZWdlcih0KSYmMCE9PXQmJigodCU9MzYwKTwwJiYodCs9MzYwKSx0JTkwPT0wJiYodGhpcy5yb3RhdGlvbj10KSl9fX0se2tleToic2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIG8uRGljdD8odGhpcy5ib3JkZXJDb2xvcj1SKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9UihlLmdldEFycmF5KCJCRyIpLG51bGwpKTp0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9fSx7a2V5OiJzZXRCb3JkZXJTdHlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5ib3JkZXJTdHlsZT1uZXcgJCxlIGluc3RhbmNlb2Ygby5EaWN0KWlmKGUuaGFzKCJCUyIpKXt2YXIgdD1lLmdldCgiQlMiKSxyPXQuZ2V0KCJUeXBlIik7ciYmISgwLG8uaXNOYW1lKShyLCJCb3JkZXIiKXx8KHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSksdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKSx0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpKX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7dmFyIG49ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoblswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhuWzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKG5bMl0sdGhpcy5yZWN0YW5nbGUpLDQ9PT1uLmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoblszXSwhMCkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX19LHtrZXk6InNldEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO3ZhciB0PWUuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSl0aGlzLmFwcGVhcmFuY2U9cjtlbHNlIGlmKHIgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBuPWUuZ2V0KCJBUyIpO24gaW5zdGFuY2VvZiBvLk5hbWUmJnIuaGFzKG4ubmFtZSkmJih0aGlzLmFwcGVhcmFuY2U9ci5nZXQobi5uYW1lKSl9fX19LHtrZXk6InNldE9wdGlvbmFsQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vYz1udWxsO3ZhciB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi53YXJuKSgic2V0T3B0aW9uYWxDb250ZW50OiBTdXBwb3J0IGZvciAvTmFtZS1lbnRyeSBpcyBub3QgaW1wbGVtZW50ZWQuIik6dCBpbnN0YW5jZW9mIG8uRGljdCYmKHRoaXMub2M9dCl9fSx7a2V5OiJsb2FkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIG5ldyBkLk9iamVjdExvYWRlcih0LGUsdC54cmVmKS5sb2FkKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKX19LHtrZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KHM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLHMpe3ZhciBjLHUsbCxmLGgsZCx2LHksbSxiO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz10aGlzLmRhdGEsdT10aGlzLmFwcGVhcmFuY2UsbD0hISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzJiZhJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSx1KXtlLm5leHQ9ODticmVha31pZihsKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSA2Oih1PW5ldyBnLlN0cmluZ1N0cmVhbSgiIikpLmRpY3Q9bmV3IG8uRGljdDtjYXNlIDg6cmV0dXJuIGY9dS5kaWN0LGUubmV4dD0xMSx0aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJDb2xvclNwYWNlIiwiUGF0dGVybiIsIlNoYWRpbmciLCJYT2JqZWN0IiwiRm9udCJdLHUpO2Nhc2UgMTE6aWYoaD1lLnNlbnQsZD1mLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSx2PWYuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLHk9QihjLnJlY3QsZCx2KSxtPW5ldyBwLk9wZXJhdG9yTGlzdCwhdGhpcy5vYyl7ZS5uZXh0PTIwO2JyZWFrfXJldHVybiBlLm5leHQ9MTksdC5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpO2Nhc2UgMTk6Yj1lLnNlbnQ7Y2FzZSAyMDpyZXR1cm4gdm9pZCAwIT09YiYmbS5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixiXSksbS5hZGRPcChuLk9QUy5iZWdpbkFubm90YXRpb24sW2MuaWQsYy5yZWN0LHksdixsXSksZS5uZXh0PTI0LHQuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dSx0YXNrOnIscmVzb3VyY2VzOmgsb3BlcmF0b3JMaXN0Om0sZmFsbGJhY2tGb250RGljdDp0aGlzLl9mYWxsYmFja0ZvbnREaWN0fSk7Y2FzZSAyNDpyZXR1cm4gbS5hZGRPcChuLk9QUy5lbmRBbm5vdGF0aW9uLFtdKSx2b2lkIDAhPT1iJiZtLmFkZE9wKG4uT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pLHRoaXMucmVzZXQoKSxlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om0sc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmx9KTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LHIsbixhKXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZSIsdmFsdWU6KHI9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFzVGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiExfX0se2tleToiZXh0cmFjdFRleHRDb250ZW50Iix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYSxpLG8scztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdLHRoaXMuYXBwZWFyYW5jZSk7Y2FzZSA0OnJldHVybiBhPWUuc2VudCxpPVtdLG89W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1BKGUuaXRlbXMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTtvLnB1c2goYS5zdHIpLGEuaGFzRU9MJiYoaS5wdXNoKG8uam9pbigiIikpLG8ubGVuZ3RoPTApfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fSxlLm5leHQ9MTAsdC5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnRoaXMuYXBwZWFyYW5jZSx0YXNrOnIscmVzb3VyY2VzOmEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITAsY29tYmluZVRleHRJdGVtczohMCxzaW5rOnMsdmlld0JveDpufSk7Y2FzZSAxMDp0aGlzLnJlc2V0KCksby5sZW5ndGgmJmkucHVzaChvLmpvaW4oIiIpKSxpLmxlbmd0aD4wJiYodGhpcy5kYXRhLnRleHRDb250ZW50PWkpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEua2lkSWRzP3tpZDp0aGlzLmRhdGEuaWQsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHR5cGU6IiIsa2lkSWRzOnRoaXMuZGF0YS5raWRJZHMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHJvdGF0aW9uOnRoaXMucm90YXRpb259Om51bGx9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PUEodGhpcy5fc3RyZWFtcyk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWUucmVzZXQoKX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX19fSx7a2V5OiJfY29uc3RydWN0RmllbGROYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7dmFyIHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTt2YXIgcj1lLGE9bmV3IG8uUmVmU2V0O2ZvcihlLm9iaklkJiZhLnB1dChlLm9iaklkKTtyLmhhcygiUGFyZW50IikmJihyPXIuZ2V0KCJQYXJlbnQiKSlpbnN0YW5jZW9mIG8uRGljdCYmKCFyLm9iaklkfHwhYS5oYXMoci5vYmpJZCkpOylyLm9iaklkJiZhLnB1dChyLm9iaklkKSxyLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSkpO3JldHVybiB0LmpvaW4oIi4iKX19XSksZX0oKTt0LkFubm90YXRpb249VTt2YXIgJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtqKHRoaXMsZSksdGhpcy53aWR0aD0xLHRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElELHRoaXMuZGFzaEFycmF5PVszXSx0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9MCx0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPTB9cmV0dXJuIF8oZSxbe2tleToic2V0V2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbMCwwLDAsMF07aWYoZSBpbnN0YW5jZW9mIG8uTmFtZSl0aGlzLndpZHRoPTA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKGU+MCl7dmFyIHI9KHRbMl0tdFswXSkvMixhPSh0WzNdLXRbMV0pLzI7cj4wJiZhPjAmJihlPnJ8fGU+YSkmJigoMCxuLndhcm4pKCJBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogIi5jb25jYXQoZSkpLGU9MSl9dGhpcy53aWR0aD1lfX19LHtrZXk6InNldFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygby5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkV9fX0se2tleToic2V0RGFzaEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3ZhciByLG49ITAsYT0hMCxpPUEoZSk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKCEoK3M+PTApKXtuPSExO2JyZWFrfXM+MCYmKGE9ITEpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1uJiYhYT8odGhpcy5kYXNoQXJyYXk9ZSx0JiZ0aGlzLnNldFN0eWxlKG8uTmFtZS5nZXQoIkQiKSkpOnRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfX0se2tleToic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX19LHtrZXk6InNldFZlcnRpY2FsQ29ybmVyUmFkaXVzIix2YWx1ZTpmdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19XSksZX0oKTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZT0kO3ZhciBYPWZ1bmN0aW9uKGUpe20oaSxlKTt2YXIgdCxyLGE9dyhpKTtmdW5jdGlvbiBpKGUpe3ZhciB0O2oodGhpcyxpKSx0PWEuY2FsbCh0aGlzLGUpO3ZhciByPWUuZGljdDtpZihyLmhhcygiSVJUIikpe3ZhciBzPXIuZ2V0UmF3KCJJUlQiKTt0LmRhdGEuaW5SZXBseVRvPXMgaW5zdGFuY2VvZiBvLlJlZj9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgYz1yLmdldCgiUlQiKTt0LmRhdGEucmVwbHlUeXBlPWMgaW5zdGFuY2VvZiBvLk5hbWU/Yy5uYW1lOm4uQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWX1pZih0LmRhdGEucmVwbHlUeXBlPT09bi5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKXt2YXIgdT1yLmdldCgiSVJUIik7dC5zZXRUaXRsZSh1LmdldCgiVCIpKSx0LmRhdGEudGl0bGVPYmo9dC5fdGl0bGUsdC5zZXRDb250ZW50cyh1LmdldCgiQ29udGVudHMiKSksdC5kYXRhLmNvbnRlbnRzT2JqPXQuX2NvbnRlbnRzLHUuaGFzKCJDcmVhdGlvbkRhdGUiKT8odC5zZXRDcmVhdGlvbkRhdGUodS5nZXQoIkNyZWF0aW9uRGF0ZSIpKSx0LmRhdGEuY3JlYXRpb25EYXRlPXQuY3JlYXRpb25EYXRlKTp0LmRhdGEuY3JlYXRpb25EYXRlPW51bGwsdS5oYXMoIk0iKT8odC5zZXRNb2RpZmljYXRpb25EYXRlKHUuZ2V0KCJNIikpLHQuZGF0YS5tb2RpZmljYXRpb25EYXRlPXQubW9kaWZpY2F0aW9uRGF0ZSk6dC5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCx0LmRhdGEuaGFzUG9wdXA9dS5oYXMoIlBvcHVwIiksdS5oYXMoIkMiKT8odC5zZXRDb2xvcih1LmdldEFycmF5KCJDIikpLHQuZGF0YS5jb2xvcj10LmNvbG9yKTp0LmRhdGEuY29sb3I9bnVsbH1lbHNlIHQuZGF0YS50aXRsZU9iaj10Ll90aXRsZSx0LnNldENyZWF0aW9uRGF0ZShyLmdldCgiQ3JlYXRpb25EYXRlIikpLHQuZGF0YS5jcmVhdGlvbkRhdGU9dC5jcmVhdGlvbkRhdGUsdC5kYXRhLmhhc1BvcHVwPXIuaGFzKCJQb3B1cCIpLHIuaGFzKCJDIil8fCh0LmRhdGEuY29sb3I9bnVsbCk7cmV0dXJuIHIuaGFzKCJSQyIpJiYodC5kYXRhLnJpY2hUZXh0PXYuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChyLmdldCgiUkMiKSkpLHR9cmV0dXJuIF8oaSxbe2tleToic2V0Q3JlYXRpb25EYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNyZWF0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfX0se2tleToiX3NldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmV4dHJhLG49ZS5zdHJva2VDb2xvcixhPWUuZmlsbENvbG9yLGk9ZS5ibGVuZE1vZGUscz1lLnN0cm9rZUFscGhhLGM9ZS5maWxsQWxwaGEsdT1lLnBvaW50c0NhbGxiYWNrLGw9TnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUlOX1ZBTFVFLGQ9TnVtYmVyLk1JTl9WQUxVRSxwPVsicSJdO3ImJnAucHVzaChyKSxuJiZwLnB1c2goIiIuY29uY2F0KG5bMF0sIiAiKS5jb25jYXQoblsxXSwiICIpLmNvbmNhdChuWzJdLCIgUkciKSksYSYmcC5wdXNoKCIiLmNvbmNhdChhWzBdLCIgIikuY29uY2F0KGFbMV0sIiAiKS5jb25jYXQoYVsyXSwiIHJnIikpO3ZhciB2PXRoaXMuZGF0YS5xdWFkUG9pbnRzO3Z8fCh2PVtbe3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVsxXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVsxXX1dXSk7dmFyIHksbT1BKHYpO3RyeXtmb3IobS5zKCk7ISh5PW0ubigpKS5kb25lOyl7dmFyIGI9VCh1KHAseS52YWx1ZSksNCksdz1iWzBdLGs9YlsxXSxTPWJbMl0seD1iWzNdO2w9TWF0aC5taW4obCx3KSxoPU1hdGgubWF4KGgsayksZj1NYXRoLm1pbihmLFMpLGQ9TWF0aC5tYXgoZCx4KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cC5wdXNoKCJRIik7dmFyIE89bmV3IG8uRGljdCh0KSxDPW5ldyBvLkRpY3QodCk7Qy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSk7dmFyIEY9bmV3IGcuU3RyaW5nU3RyZWFtKHAuam9pbigiICIpKTtGLmRpY3Q9QyxPLnNldCgiRm0wIixGKTt2YXIgUD1uZXcgby5EaWN0KHQpO2kmJlAuc2V0KCJCTSIsby5OYW1lLmdldChpKSksIm51bWJlciI9PXR5cGVvZiBzJiZQLnNldCgiQ0EiLHMpLCJudW1iZXIiPT10eXBlb2YgYyYmUC5zZXQoImNhIixjKTt2YXIgST1uZXcgby5EaWN0KHQpO0kuc2V0KCJHUzAiLFApO3ZhciBFPW5ldyBvLkRpY3QodCk7RS5zZXQoIkV4dEdTdGF0ZSIsSSksRS5zZXQoIlhPYmplY3QiLE8pO3ZhciBqPW5ldyBvLkRpY3QodCk7ai5zZXQoIlJlc291cmNlcyIsRSk7dmFyIE09dGhpcy5kYXRhLnJlY3Q9W2wsZixoLGRdO2ouc2V0KCJCQm94IixNKSx0aGlzLmFwcGVhcmFuY2U9bmV3IGcuU3RyaW5nU3RyZWFtKCIvR1MwIGdzIC9GbTAgRG8iKSx0aGlzLmFwcGVhcmFuY2UuZGljdD1qLHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsRil9fV0sW3trZXk6ImNyZWF0ZU5ld0Fubm90YXRpb24iLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4sYSl7dmFyIGksbyxjLHUsbCxmLGg7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT10LmdldE5ld1RlbXBvcmFyeVJlZigpLGUubmV4dD0zLHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShyLHQsYSk7Y2FzZSAzOnJldHVybiBvPWUuc2VudCxjPVtdLG8/KGw9dC5nZXROZXdUZW1wb3JhcnlSZWYoKSx1PXRoaXMuY3JlYXRlTmV3RGljdChyLHQse2FwUmVmOmx9KSxmPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGwubnVtLGwuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGwsbyxjLGYpLG4ucHVzaCh7cmVmOmwsZGF0YTpjLmpvaW4oIiIpfSkpOnU9dGhpcy5jcmVhdGVOZXdEaWN0KHIsdCx7fSksYy5sZW5ndGg9MCxoPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGksdSxjLGgpLGUuYWJydXB0KCJyZXR1cm4iLHtyZWY6aSxkYXRhOmMuam9pbigiIil9KTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbiIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGEsaTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0ocix0LG4pO2Nhc2UgMjpyZXR1cm4gYT1lLnNlbnQsaT10aGlzLmNyZWF0ZU5ld0RpY3Qocix0LHthcDphfSksZS5hYnJ1cHQoInJldHVybiIsbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OmkseHJlZjp0LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOm4uaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR9KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGl9KFUpO3QuTWFya3VwQW5ub3RhdGlvbj1YO3ZhciBIPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGMsdSxsPXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtqKHRoaXMsZiksdD1sLmNhbGwodGhpcyxlKTt2YXIgcj1lLmRpY3QsaT1lLnhyZWYscz10LmRhdGE7dC5yZWY9ZS5yZWYsdC5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzLHMuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5XSURHRVQsdm9pZCAwPT09cy5maWVsZE5hbWUmJihzLmZpZWxkTmFtZT10Ll9jb25zdHJ1Y3RGaWVsZE5hbWUocikpLHZvaWQgMD09PXMuYWN0aW9ucyYmKHMuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSk7dmFyIGM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpyLGtleToiViIsZ2V0QXJyYXk6ITB9KTtzLmZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKGMpO3ZhciB1PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRWIixnZXRBcnJheTohMH0pO2lmKHMuZGVmYXVsdEZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKHUpLHZvaWQgMD09PWMmJmUueGZhRGF0YXNldHMpe3ZhciBoPXQuX3RpdGxlLnN0cjtoJiYodC5faGFzVmFsdWVGcm9tWEZBPSEwLHMuZmllbGRWYWx1ZT1jPWUueGZhRGF0YXNldHMuZ2V0VmFsdWUoaCkpfXZvaWQgMD09PWMmJm51bGwhPT1zLmRlZmF1bHRGaWVsZFZhbHVlJiYocy5maWVsZFZhbHVlPXMuZGVmYXVsdEZpZWxkVmFsdWUpLHMuYWx0ZXJuYXRpdmVUZXh0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIuZ2V0KCJUVSIpfHwiIiksdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSxzLmhhc0FwcGVhcmFuY2U9dC5fbmVlZEFwcGVhcmFuY2VzJiZ2b2lkIDAhPT1zLmZpZWxkVmFsdWUmJm51bGwhPT1zLmZpZWxkVmFsdWV8fHMuaGFzQXBwZWFyYW5jZTt2YXIgZD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGVCJ9KTtzLmZpZWxkVHlwZT1kIGluc3RhbmNlb2Ygby5OYW1lP2QubmFtZTpudWxsO3ZhciBwPSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRSIn0pLGc9ZS5hY3JvRm9ybS5nZXQoIkRSIiksdj10LmFwcGVhcmFuY2UmJnQuYXBwZWFyYW5jZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7cmV0dXJuIHQuX2ZpZWxkUmVzb3VyY2VzPXtsb2NhbFJlc291cmNlczpwLGFjcm9Gb3JtUmVzb3VyY2VzOmcsYXBwZWFyYW5jZVJlc291cmNlczp2LG1lcmdlZFJlc291cmNlczpvLkRpY3QubWVyZ2Uoe3hyZWY6aSxkaWN0QXJyYXk6W3AsdixnXSxtZXJnZVN1YkRpY3RzOiEwfSl9LHMuZmllbGRGbGFncz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGZiJ9KSwoIU51bWJlci5pc0ludGVnZXIocy5maWVsZEZsYWdzKXx8cy5maWVsZEZsYWdzPDApJiYocy5maWVsZEZsYWdzPTApLHMucmVhZE9ubHk9dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFQURPTkxZKSxzLnJlcXVpcmVkPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5SRVFVSVJFRCkscy5oaWRkZW49dC5faGFzRmxhZyhzLmFubm90YXRpb25GbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTiksdH1yZXR1cm4gXyhmLFt7a2V5OiJfZGVjb2RlRm9ybVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSl9KSk6ZSBpbnN0YW5jZW9mIG8uTmFtZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfX0se2tleToiaGFzRmllbGRGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX19LHtrZXk6ImdldFJvdGF0aW9uTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lP2UuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHI9dCYmdC5yb3RhdGlvbjtpZih2b2lkIDA9PT1yJiYocj10aGlzLnJvdGF0aW9uKSwwPT09cilyZXR1cm4gbi5JREVOVElUWV9NQVRSSVg7dmFyIGk9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbz10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4oMCxhLmdldFJvdGF0aW9uTWF0cml4KShyLGksbyl9fSx7a2V5OiJnZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU/ZS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDAscj10JiZ0LnJvdGF0aW9uO2lmKHZvaWQgMD09PXImJihyPXRoaXMucm90YXRpb24pLCF0aGlzLmJhY2tncm91bmRDb2xvciYmIXRoaXMuYm9yZGVyQ29sb3IpcmV0dXJuIiI7dmFyIG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sYT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxvPTA9PT1yfHwxODA9PT1yPyIwIDAgIi5jb25jYXQobiwiICIpLmNvbmNhdChhLCIgcmUiKToiMCAwICIuY29uY2F0KGEsIiAiKS5jb25jYXQobiwiIHJlIikscz0iIjtpZih0aGlzLmJhY2tncm91bmRDb2xvciYmKHM9IiIuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKSwiICIpLmNvbmNhdChvLCIgZiAiKSksdGhpcy5ib3JkZXJDb2xvcil7dmFyIGM9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MTtzKz0iIi5jb25jYXQoYywiIHcgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYm9yZGVyQ29sb3IsITEpLCIgIikuY29uY2F0KG8sIiBTICIpfXJldHVybiBzfX0se2tleToiZ2V0T3BlcmF0b3JMaXN0Iix2YWx1ZToodT1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhLGksbyl7dmFyIHMsYyx1LGwsaCxkLHY7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighaXx8dGhpcyBpbnN0YW5jZW9mIFcpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITAsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDI6aWYodGhpcy5faGFzVGV4dCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNDpyZXR1cm4gZS5uZXh0PTYsdGhpcy5fZ2V0QXBwZWFyYW5jZSh0LHIsYSxvKTtjYXNlIDY6aWYocz1lLnNlbnQsIXRoaXMuYXBwZWFyYW5jZXx8bnVsbCE9PXMpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pKTtjYXNlIDk6aWYoYz1uZXcgcC5PcGVyYXRvckxpc3QsdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UmJm51bGwhPT1zKXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDEyOmlmKHU9WzEsMCwwLDEsMCwwXSxsPVswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dLGg9Qih0aGlzLmRhdGEucmVjdCxsLHUpLCF0aGlzLm9jKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xOCx0LnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCk7Y2FzZSAxODpkPWUuc2VudDtjYXNlIDE5OnJldHVybiB2b2lkIDAhPT1kJiZjLmFkZE9wKG4uT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSxjLmFkZE9wKG4uT1BTLmJlZ2luQW5ub3RhdGlvbixbdGhpcy5kYXRhLmlkLHRoaXMuZGF0YS5yZWN0LGgsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSwhMV0pLHY9bmV3IGcuU3RyaW5nU3RyZWFtKHMpLGUubmV4dD0yNCx0LmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnYsdGFzazpyLHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0OmN9KTtjYXNlIDI0OnJldHVybiBjLmFkZE9wKG4uT1BTLmVuZEFubm90YXRpb24sW10pLHZvaWQgMCE9PWQmJmMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSksZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpjLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX0pO2Nhc2UgMjc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscixuLGEpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfZ2V0TUtEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgby5EaWN0KG51bGwpO3JldHVybiBlJiZ0LnNldCgiUiIsZSksdGhpcy5ib3JkZXJDb2xvciYmdC5zZXQoIkJDIixOKHRoaXMuYm9yZGVyQ29sb3IpKSx0aGlzLmJhY2tncm91bmRDb2xvciYmdC5zZXQoIkJHIixOKHRoaXMuYmFja2dyb3VuZENvbG9yKSksdC5zaXplPjA/dDpudWxsfX0se2tleToic2F2ZSIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsaSl7dmFyIGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4LE8sRixQLFQsSSxFLGosTSxfLEwsUj10aGlzO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz1pP2kuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHU9YyYmYy52YWx1ZSxsPWMmJmMucm90YXRpb24sdSE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiZ2b2lkIDAhPT11KXtlLm5leHQ9NzticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkF8fHZvaWQgMCE9PWwpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6dT11fHx0aGlzLmRhdGEuZmllbGRWYWx1ZTtjYXNlIDc6aWYodm9pZCAwIT09bHx8dGhpcy5faGFzVmFsdWVGcm9tWEZBfHwhQXJyYXkuaXNBcnJheSh1KXx8IUFycmF5LmlzQXJyYXkodGhpcy5kYXRhLmZpZWxkVmFsdWUpfHx1Lmxlbmd0aCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aHx8IXUuZXZlcnkoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1SLmRhdGEuZmllbGRWYWx1ZVt0XX0pKSl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgOTppZih2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKSxmPW51bGwsdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xNCx0aGlzLl9nZXRBcHBlYXJhbmNlKHQscixuLlJlbmRlcmluZ0ludGVudEZsYWcuU0FWRSxpKTtjYXNlIDE0OmlmKG51bGwhPT0oZj1lLnNlbnQpKXtlLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMTc6ZS5uZXh0PTE5O2JyZWFrO2Nhc2UgMTk6aWYoaD0hMSxmJiZmLm5lZWRBcHBlYXJhbmNlcyYmKGg9ITAsZj1udWxsKSxkPXQueHJlZiwocD1kLmZldGNoSWZSZWYodGhpcy5yZWYpKWluc3RhbmNlb2Ygby5EaWN0KXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6dj1uZXcgby5EaWN0KGQpLHk9QShwLmdldEtleXMoKSk7dHJ5e2Zvcih5LnMoKTshKG09eS5uKCkpLmRvbmU7KSJBUCIhPT0oYj1tLnZhbHVlKSYmdi5zZXQoYixwLmdldFJhdyhiKSl9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIHc9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodi5nZXQoIlQiKXx8IiIpLHZhbHVlOnV9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS5pc0FzY2lpKShlKT9lOigwLGEuc3RyaW5nVG9VVEYxNlN0cmluZykoZSwhMCl9LHYuc2V0KCJWIixBcnJheS5pc0FycmF5KHUpP3UubWFwKGspOmsodSkpLChTPXRoaXMuX2dldE1LRGljdChsKSkmJnYuc2V0KCJNSyIsUykseD1kLmVuY3J5cHQsTz14P3guY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pOm51bGwsRj1bXSxQPVt7cmVmOnRoaXMucmVmLGRhdGE6IiIseGZhOncsbmVlZEFwcGVhcmFuY2VzOmh9XSxudWxsIT09ZiYmKFQ9ZC5nZXROZXdUZW1wb3JhcnlSZWYoKSxJPW5ldyBvLkRpY3QoZCksdi5zZXQoIkFQIixJKSxJLnNldCgiTiIsVCksRT1udWxsLHgmJihFPXguY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKFQubnVtLFQuZ2VuKSxmPUUuZW5jcnlwdFN0cmluZyhmKSksaj10aGlzLl9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZCksTT1uZXcgZy5TdHJpbmdTdHJlYW0oZiksKF89TS5kaWN0PW5ldyBvLkRpY3QoZCkpLnNldCgiTGVuZ3RoIixmLmxlbmd0aCksXy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksXy5zZXQoIlJlc291cmNlcyIsaiksXy5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKSwoTD10aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpKSE9PW4uSURFTlRJVFlfTUFUUklYJiZfLnNldCgiTWF0cml4IixMKSwoMCxzLndyaXRlT2JqZWN0KShULE0sRixFKSxQLnB1c2goe3JlZjpULGRhdGE6Ri5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KSxGLmxlbmd0aD0wKSx2LnNldCgiTSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSksKDAscy53cml0ZU9iamVjdCkodGhpcy5yZWYsdixGLE8pLFBbMF0uZGF0YT1GLmpvaW4oIiIpLGUuYWJydXB0KCJyZXR1cm4iLFApO2Nhc2UgNDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXRBcHBlYXJhbmNlIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixvLHMpe3ZhciBjLHUsbCxoLGQscCxnLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLEgscSxHLHosVyxWLFksSyxKLFosUSxlZSx0ZTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAzOmlmKChjPXM/cy5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDApJiYodT1jLmZvcm1hdHRlZFZhbHVlfHxjLnZhbHVlLGw9Yy5yb3RhdGlvbiksdm9pZCAwIT09bHx8dm9pZCAwIT09dXx8dGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9ODticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJiF0aGlzLmFwcGVhcmFuY2Upe2UubmV4dD04O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6aWYoaD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhzKSx2b2lkIDAhPT11KXtlLm5leHQ9MTM7YnJlYWt9aWYodT10aGlzLmRhdGEuZmllbGRWYWx1ZSl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIlEgRU1DIikpO2Nhc2UgMTM6aWYoQXJyYXkuaXNBcnJheSh1KSYmMT09PXUubGVuZ3RoJiYodT11WzBdKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiB1LCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpLHRoaXMuZGF0YS5jb21ibz8oZD10aGlzLmRhdGEub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXt2YXIgdD1lLmV4cG9ydFZhbHVlO3JldHVybiB1PT09dH0pKXx8dGhpcy5kYXRhLm9wdGlvbnNbMF0sdT1kJiZkLmRpc3BsYXlWYWx1ZXx8IiIpOnU9dS50cmltKCksIiIhPT11KXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiUSBFTUMiKSk7Y2FzZSAxODpyZXR1cm4gdm9pZCAwPT09bCYmKGw9dGhpcy5yb3RhdGlvbikscD0tMSx0aGlzLmRhdGEubXVsdGlMaW5lPyhnPXUuc3BsaXQoL1xyXG4/fFxuLykubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3JtYWxpemUoIk5GQyIpfSkpLHA9Zy5sZW5ndGgpOmc9W3UucmVwbGFjZSgvXHJcbj98XG4vLCIiKS5ub3JtYWxpemUoIk5GQyIpXSx2PTEseT0yLG09dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYj10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSw5MCE9PWwmJjI3MCE9PWx8fChiPSh3PVttLGJdKVswXSxtPXdbMV0pLHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpLGUubmV4dD0yOSxmLl9nZXRGb250RGF0YSh0LHIsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2Nhc2UgMjk6az1lLnNlbnQsRj1bXSxQPSExLEk9QShnKTt0cnl7Zm9yKEkucygpOyEoRT1JLm4oKSkuZG9uZTspaj1FLnZhbHVlLChNPWsuZW5jb2RlU3RyaW5nKGopKS5sZW5ndGg+MSYmKFA9ITApLEYucHVzaChNLmpvaW4oIiIpKX1jYXRjaChlKXtJLmUoZSl9ZmluYWxseXtJLmYoKX1pZighKFAmJm8mbi5SZW5kZXJpbmdJbnRlbnRGbGFnLlNBVkUpKXtlLm5leHQ9MzY7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtuZWVkQXBwZWFyYW5jZXM6ITB9KTtjYXNlIDM2OmlmKCFQfHwhdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2UubmV4dD01ODticmVha31pZihfPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixMPW5ldyBpLkZha2VVbmljb2RlRm9udCh0LnhyZWYsXyksUj1MLmNyZWF0ZUZvbnRSZXNvdXJjZXMoZy5qb2luKCIiKSksTj1SLmdldFJhdygiRm9udCIpLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7RD10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250IiksQj1BKE4uZ2V0S2V5cygpKTt0cnl7Zm9yKEIucygpOyEoVT1CLm4oKSkuZG9uZTspJD1VLnZhbHVlLEQuc2V0KCQsTi5nZXRSYXcoJCkpfWNhdGNoKGUpe0IuZShlKX1maW5hbGx5e0IuZigpfX1lbHNlIHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5zZXQoIkZvbnQiLE4pO3JldHVybiBYPUwuZm9udE5hbWUubmFtZSxlLm5leHQ9NDUsZi5fZ2V0Rm9udERhdGEodCxyLHtmb250TmFtZTpYLGZvbnRTaXplOjB9LFIpO2Nhc2UgNDU6Zm9yKGs9ZS5zZW50LEg9MCxxPUYubGVuZ3RoO0g8cTtIKyspRltIXT0oMCxhLnN0cmluZ1RvVVRGMTZTdHJpbmcpKGdbSF0pO0c9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPVgsej10aGlzLl9jb21wdXRlRm9udFNpemUobS0yKnYsYi0yKnksdSxrLHApLFc9VCh6LDMpLFM9V1swXSx4PVdbMV0sTz1XWzJdLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9RyxlLm5leHQ9NjQ7YnJlYWs7Y2FzZSA1ODp0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZHx8KDAsbi53YXJuKSgiX2dldEFwcGVhcmFuY2U6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBhbm5vdGF0aW9uIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseS4iKSxWPXRoaXMuX2NvbXB1dGVGb250U2l6ZShtLTIqdixiLTIqeSx1LGsscCksWT1UKFYsMyksUz1ZWzBdLHg9WVsxXSxPPVlbMl07Y2FzZSA2NDppZihLPWsuZGVzY2VudCxLPWlzTmFOKEspP24uQkFTRUxJTkVfRkFDVE9SKk86TWF0aC5tYXgobi5CQVNFTElORV9GQUNUT1IqTyxNYXRoLmFicyhLKSp4KSxKPU1hdGgubWluKE1hdGguZmxvb3IoKG0teCkvMiksdiksWj10aGlzLmRhdGEudGV4dEFsaWdubWVudCwhdGhpcy5kYXRhLm11bHRpTGluZSl7ZS5uZXh0PTcwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKFMsRixrLHgsYixtLFoseSxKLEssTyxzKSk7Y2FzZSA3MDppZighdGhpcy5kYXRhLmNvbWIpe2UubmV4dD03MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fZ2V0Q29tYkFwcGVhcmFuY2UoUyxrLEZbMF0seCxiLG0seSxKLEssTyxzKSk7Y2FzZSA3MjppZihRPUorSywhKDA9PT1afHxaPjIpKXtlLm5leHQ9NzU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiQlQgIikrUysiIDEgMCAwIDEgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoeSksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUSksIiBUbSAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShGWzBdKSwiKSBUaiIpKyIgRVQgUSBFTUMiKTtjYXNlIDc1OnJldHVybiBlZT17c2hpZnQ6MH0sdGU9dGhpcy5fcmVuZGVyVGV4dChGWzBdLGsseCxiLFosZWUseSxRKSxlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIkJUICIpK1MrIiAxIDAgMCAxIDAgMCBUbSAiLmNvbmNhdCh0ZSkrIiBFVCBRIEVNQyIpO2Nhc2UgNzg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbixhKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2dldFRleHRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5jaGFyc1RvR2x5cGhzKGUpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LndpZHRofSksMCkvMWUzfX0se2tleToiX2NvbXB1dGVGb250U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxvKXt2YXIgcz10aGlzLGM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZSx1PShjfHwxMikqbi5MSU5FX0ZBQ1RPUixsPU1hdGgucm91bmQoZS91KTtpZighYyl7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoMTAwKmUpLzEwMH07aWYoLTE9PT1vKXt2YXIgaD10aGlzLl9nZXRUZXh0V2lkdGgocixhKTtjPWYoTWF0aC5taW4oZS9uLkxJTkVfRkFDVE9SLGg+dD90L2g6MS8wKSksbD0xfWVsc2V7dmFyIGQscD1yLnNwbGl0KC9cclxuP3xcbi8pLGc9W10sdj1BKHApO3RyeXtmb3Iodi5zKCk7IShkPXYubigpKS5kb25lOyl7dmFyIHk9ZC52YWx1ZSxtPWEuZW5jb2RlU3RyaW5nKHkpLmpvaW4oIiIpLGI9YS5jaGFyc1RvR2x5cGhzKG0pLHc9YS5nZXRDaGFyUG9zaXRpb25zKG0pO2cucHVzaCh7bGluZTptLGdseXBoczpiLHBvc2l0aW9uczp3fSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXZhciBrPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wLGk9MCxvPWc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07aWYoKG4rPXMuX3NwbGl0TGluZShudWxsLGEscix0LGMpLmxlbmd0aCpyKT5lKXJldHVybiEwfXJldHVybiExfTtmb3IobD1NYXRoLm1heChsLG8pO2soYz1mKCh1PWUvbCkvbi5MSU5FX0ZBQ1RPUikpOylsKyt9dmFyIFM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx4PVMuZm9udE5hbWUsTz1TLmZvbnRDb2xvcjt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxpLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6Yyxmb250TmFtZTp4LGZvbnRDb2xvcjpPfSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLGMsZS9sXX19LHtrZXk6Il9yZW5kZXJUZXh0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMpe3ZhciB1O3U9MT09PWk/KG4tdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqcikvMjoyPT09aT9uLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKnItczpzO3ZhciBsPSgwLGEubnVtYmVyVG9TdHJpbmcpKHUtby5zaGlmdCk7cmV0dXJuIG8uc2hpZnQ9dSxjPSgwLGEubnVtYmVyVG9TdHJpbmcpKGMpLCIiLmNvbmNhdChsLCIgIikuY29uY2F0KGMsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShlKSwiKSBUaiIpfX0se2tleToiX2dldFNhdmVGaWVsZFJlc291cmNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmllbGRSZXNvdXJjZXMscj10LmxvY2FsUmVzb3VyY2VzLG49dC5hcHBlYXJhbmNlUmVzb3VyY2VzLGE9dC5hY3JvRm9ybVJlc291cmNlcyxpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEmJnRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udE5hbWU7aWYoIWkpcmV0dXJuIHJ8fG8uRGljdC5lbXB0eTtmb3IodmFyIHM9MCxjPVtyLG5dO3M8Yy5sZW5ndGg7cysrKXt2YXIgdT1jW3NdO2lmKHUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBsPXUuZ2V0KCJGb250Iik7aWYobCBpbnN0YW5jZW9mIG8uRGljdCYmbC5oYXMoaSkpcmV0dXJuIHV9fWlmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBmPWEuZ2V0KCJGb250Iik7aWYoZiBpbnN0YW5jZW9mIG8uRGljdCYmZi5oYXMoaSkpe3ZhciBoPW5ldyBvLkRpY3QoZSk7aC5zZXQoaSxmLmdldFJhdyhpKSk7dmFyIGQ9bmV3IG8uRGljdChlKTtyZXR1cm4gZC5zZXQoIkZvbnQiLGgpLG8uRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbZCxyXSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiByfHxvLkRpY3QuZW1wdHl9fSx7a2V5OiJnZXRGaWVsZE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSxbe2tleToiX2dldEZvbnREYXRhIix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpLHMsYyx1O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGk9bmV3IHAuT3BlcmF0b3JMaXN0LHM9e2ZvbnQ6bnVsbCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sYz1uLmZvbnROYW1lLHU9bi5mb250U2l6ZSxlLm5leHQ9NSx0LmhhbmRsZVNldEZvbnQoYSxbYyYmby5OYW1lLmdldChjKSx1XSxudWxsLGkscixzLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscy5mb250KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksZn0oVSkscT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBpO2oodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlKSkuX2hhc1RleHQ9ITA7dmFyIG89ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgaS5kYXRhLmZpZWxkVmFsdWUmJihpLmRhdGEuZmllbGRWYWx1ZT0iIik7dmFyIHM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpvLGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIocyl8fHM8MHx8cz4yKSYmKHM9bnVsbCksaS5kYXRhLnRleHRBbGlnbm1lbnQ9czt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Om8sa2V5OiJNYXhMZW4ifSk7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHxjPDApJiYoYz0wKSxpLmRhdGEubWF4TGVuPWMsaS5kYXRhLm11bHRpTGluZT1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSxpLmRhdGEuY29tYj1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIWkuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT1pLmRhdGEubWF4TGVuLGkuZGF0YS5kb05vdFNjcm9sbD1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpLGl9cmV0dXJuIF8ocixbe2tleToiX2dldENvbWJBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMsdSxsLGYpe3ZhciBoLGQ9aS90aGlzLmRhdGEubWF4TGVuLHA9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoZiksZz1bXSx2PUEodC5nZXRDaGFyUG9zaXRpb25zKHIpKTt0cnl7Zm9yKHYucygpOyEoaD12Lm4oKSkuZG9uZTspe3ZhciB5PVQoaC52YWx1ZSwyKSxtPXlbMF0sYj15WzFdO2cucHVzaCgiKCIuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShyLnN1YnN0cmluZyhtLGIpKSwiKSBUaiIpKX19Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9dmFyIHc9Zy5qb2luKCIgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoZCksIiAwIFRkICIpKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KHAsIkJUICIpK2UrIiAxIDAgMCAxICIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKHMpLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKGMrdSksIiBUbSAiKS5jb25jYXQodykrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixpLG8scyxjLHUsbCxmLGgpe2Zvcih2YXIgZD1bXSxwPWktMipjLGc9e3NoaWZ0OjB9LHY9MCx5PXQubGVuZ3RoO3Y8eTt2KyspZm9yKHZhciBtPXRbdl0sYj10aGlzLl9zcGxpdExpbmUobSxyLG4scCksdz0wLGs9Yi5sZW5ndGg7dzxrO3crKyl7dmFyIFM9Ylt3XSx4PTA9PT12JiYwPT09dz8tdS0oZi1sKTotZjtkLnB1c2godGhpcy5fcmVuZGVyVGV4dChTLHIsbixpLHMsZyxjLHgpKX12YXIgTz10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhoKSxBPWQuam9pbigiXG4iKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KE8sIkJUICIpK2UrIiAxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykobyksIiBUbSAiKS5jb25jYXQoQSkrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfc3BsaXRMaW5lIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e307ZT1hLmxpbmV8fGU7dmFyIGk9YS5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihpLmxlbmd0aDw9MSlyZXR1cm5bZV07Zm9yKHZhciBvPWEucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSkscz1yLzFlMyxjPVtdLHU9LTEsbD0tMSxmPS0xLGg9MCxkPTAscD0wLGc9aS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9VChvW3BdLDIpLHk9dlswXSxtPXZbMV0sYj1pW3BdLHc9Yi53aWR0aCpzOyIgIj09PWIudW5pY29kZT9kK3c+bj8oYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcsdT0tMSxmPS0xKTooZCs9dyx1PXksbD1tLGY9cCk6ZCt3Pm4/LTEhPT11PyhjLnB1c2goZS5zdWJzdHJpbmcoaCxsKSksaD1sLHA9ZisxLHU9LTEsZD0wKTooYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcpOmQrPXd9cmV0dXJuIGg8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhoLGUubGVuZ3RoKSksY319LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1dKSxyfShIKSxHPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGksYyx1PXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtyZXR1cm4gaih0aGlzLGYpLCh0PXUuY2FsbCh0aGlzLGUpKS5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQuZGF0YS5jaGVja0JveD0hdC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucmFkaW9CdXR0b249dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucHVzaEJ1dHRvbj10Lmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTiksdC5kYXRhLmlzVG9vbHRpcE9ubHk9ITEsdC5kYXRhLmNoZWNrQm94P3QuX3Byb2Nlc3NDaGVja0JveChlKTp0LmRhdGEucmFkaW9CdXR0b24/dC5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpOnQuZGF0YS5wdXNoQnV0dG9uPyh0LmRhdGEuaGFzT3duQ2FudmFzPSEwLHQuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpKTooMCxuLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKSx0fXJldHVybiBfKGYsW3trZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLG8pe3ZhciBzLGMsdSxsLGgsZCxnO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5wdXNoQnV0dG9uKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIseSh4KGYucHJvdG90eXBlKSwiZ2V0T3BlcmF0b3JMaXN0Iix0aGlzKS5jYWxsKHRoaXMsdCxyLGEsITEsbykpO2Nhc2UgMjppZihzPW51bGwsYz1udWxsLG8mJih1PW8uZ2V0KHRoaXMuZGF0YS5pZCkscz11P3UudmFsdWU6bnVsbCxjPXU/dS5yb3RhdGlvbjpudWxsKSxudWxsIT09c3x8IXRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNzppZihudWxsPT1zJiYocz10aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUpLCEobD1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiBoPXRoaXMuYXBwZWFyYW5jZSxkPWwuZGljdC5nZXRBcnJheSgiTWF0cml4Iil8fG4uSURFTlRJVFlfTUFUUklYLGMmJmwuZGljdC5zZXQoIk1hdHJpeCIsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSksdGhpcy5hcHBlYXJhbmNlPWwsZz15KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pLHRoaXMuYXBwZWFyYW5jZT1oLGwuZGljdC5zZXQoIk1hdHJpeCIsZCksZS5hYnJ1cHQoInJldHVybiIsZyk7Y2FzZSAxODpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOihpPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5jaGVja0JveCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3NhdmVDaGVja2JveCh0LHIsbikpO2Nhc2UgMjppZighdGhpcy5kYXRhLnJhZGlvQnV0dG9uKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fc2F2ZVJhZGlvQnV0dG9uKHQscixuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlQ2hlY2tib3giLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjppZihpPWEuZ2V0KHRoaXMuZGF0YS5pZCksYz1pJiZpLnJvdGF0aW9uLHU9aSYmaS52YWx1ZSx2b2lkIDAhPT1jKXtlLm5leHQ9MTE7YnJlYWt9aWYodm9pZCAwIT09dSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgODppZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZSE9PXUpe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxMTppZigobD10LnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxNDpyZXR1cm4gdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksdm9pZCAwPT09dSYmKHU9dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpLGY9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykobC5nZXQoIlQiKXx8IiIpLHZhbHVlOnU/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiIifSxoPW8uTmFtZS5nZXQodT90aGlzLmRhdGEuZXhwb3J0VmFsdWU6Ik9mZiIpLGwuc2V0KCJWIixoKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoZD10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLGQpLHA9dC54cmVmLmVuY3J5cHQsZz1udWxsLHAmJihnPXAuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSx2PVsiIi5jb25jYXQodGhpcy5yZWYubnVtLCIgIikuY29uY2F0KHRoaXMucmVmLmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShsLHYsZyksdi5wdXNoKCJcbmVuZG9ialxuIiksZS5hYnJ1cHQoInJldHVybiIsW3tyZWY6dGhpcy5yZWYsZGF0YTp2LmpvaW4oIiIpLHhmYTpmfV0pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlUmFkaW9CdXR0b24iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihhKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAyOmlmKGk9YS5nZXQodGhpcy5kYXRhLmlkKSxjPWkmJmkucm90YXRpb24sdT1pJiZpLnZhbHVlLHZvaWQgMCE9PWMpe2UubmV4dD0xMTticmVha31pZih2b2lkIDAhPT11KXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSA4OmlmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlIT09dSl7ZS5uZXh0PTExO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDExOmlmKChsPXQueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTE0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDE0OnJldHVybiB2b2lkIDA9PT11JiYodT10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSksdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksZj17cGF0aDooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShsLmdldCgiVCIpfHwiIiksdmFsdWU6dT90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LGg9by5OYW1lLmdldCh1P3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIiksZD1udWxsLHA9dC54cmVmLmVuY3J5cHQsdSYmKHRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5SZWY/KGc9dC54cmVmLmZldGNoKHRoaXMucGFyZW50KSx2PW51bGwscCYmKHY9cC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpLGcuc2V0KCJWIixoKSxkPVsiIi5jb25jYXQodGhpcy5wYXJlbnQubnVtLCIgIikuY29uY2F0KHRoaXMucGFyZW50LmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShnLGQsdiksZC5wdXNoKCJcbmVuZG9ialxuIikpOnRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5EaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLGgpKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoeT10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLHkpLG09bnVsbCxwJiYobT1wLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSksYj1bIiIuY29uY2F0KHRoaXMucmVmLm51bSwiICIpLmNvbmNhdCh0aGlzLnJlZi5nZW4sIiBvYmpcbiIpXSwoMCxzLndyaXRlRGljdCkobCxiLG0pLGIucHVzaCgiXG5lbmRvYmpcbiIpLHc9W3tyZWY6dGhpcy5yZWYsZGF0YTpiLmpvaW4oIiIpLHhmYTpmfV0sbnVsbCE9PWQmJncucHVzaCh7cmVmOnRoaXMucGFyZW50LGRhdGE6ZC5qb2luKCIiKSx4ZmE6bnVsbH0pLGUuYWJydXB0KCJyZXR1cm4iLHcpO2Nhc2UgMzM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxzPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGM9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sdT1bMCwwLHMsY10sbD0uOCpNYXRoLm1pbihzLGMpOyJjaGVjayI9PT10PyhyPXt3aWR0aDouNzU1KmwsaGVpZ2h0Oi43MDUqbH0saT0iMyIpOiJkaXNjIj09PXQ/KHI9e3dpZHRoOi43OTEqbCxoZWlnaHQ6LjcwNSpsfSxpPSJsIik6KDAsbi51bnJlYWNoYWJsZSkoIl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAiLmNvbmNhdCh0KSk7dmFyIGY9KDAsYS5udW1iZXJUb1N0cmluZykoKHMtci53aWR0aCkvMiksaD0oMCxhLm51bWJlclRvU3RyaW5nKSgoYy1yLmhlaWdodCkvMiksZD0icSBCVCAvUGRmSnNaYURiICIuY29uY2F0KGwsIiBUZiAwIGcgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIFRkICgiKS5jb25jYXQoaSwiKSBUaiBFVCBRIikscD1uZXcgby5EaWN0KGUueHJlZik7cC5zZXQoIkZvcm1UeXBlIiwxKSxwLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiRm9ybSIpKSxwLnNldCgiVHlwZSIsby5OYW1lLmdldCgiWE9iamVjdCIpKSxwLnNldCgiQkJveCIsdSkscC5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsMCwwXSkscC5zZXQoIkxlbmd0aCIsZC5sZW5ndGgpO3ZhciB2PW5ldyBvLkRpY3QoZS54cmVmKSx5PW5ldyBvLkRpY3QoZS54cmVmKTt5LnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpLHYuc2V0KCJGb250Iix5KSxwLnNldCgiUmVzb3VyY2VzIix2KSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBnLlN0cmluZ1N0cmVhbShkKSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9cCx0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9fSx7a2V5OiJfcHJvY2Vzc0NoZWNrQm94Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIG49dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgbiYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPW4pO3ZhciBhPW51bGwhPT10aGlzLmRhdGEuZmllbGRWYWx1ZSYmIk9mZiIhPT10aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZToiWWVzIixpPXIuZ2V0S2V5cygpO2lmKDA9PT1pLmxlbmd0aClpLnB1c2goIk9mZiIsYSk7ZWxzZSBpZigxPT09aS5sZW5ndGgpIk9mZiI9PT1pWzBdP2kucHVzaChhKTppLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYoaS5pbmNsdWRlcyhhKSlpLmxlbmd0aD0wLGkucHVzaCgiT2ZmIixhKTtlbHNle3ZhciBzPWkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIk9mZiIhPT1lfSkpO2kubGVuZ3RoPTAsaS5wdXNoKCJPZmYiLHMpfWkuaW5jbHVkZXModGhpcy5kYXRhLmZpZWxkVmFsdWUpfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9Ik9mZiIpLHRoaXMuZGF0YS5leHBvcnRWYWx1ZT1pWzFdLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQodGhpcy5kYXRhLmV4cG9ydFZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJjaGVjayIpLHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSksdGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3R9fX19LHtrZXk6Il9wcm9jZXNzUmFkaW9CdXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuZGF0YS5idXR0b25WYWx1ZT1udWxsO3ZhciB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3RoaXMucGFyZW50PWUuZGljdC5nZXRSYXcoIlBhcmVudCIpO3ZhciByPXQuZ2V0KCJWIik7ciBpbnN0YW5jZW9mIG8uTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShyKSl9dmFyIG49ZS5kaWN0LmdldCgiQVAiKTtpZihuIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgYT1uLmdldCgiTiIpO2lmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBpLHM9QShhLmdldEtleXMoKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO2lmKCJPZmYiIT09Yyl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTticmVha319fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIiksdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSx0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdH19fX0se2tleToiX3Byb2Nlc3NQdXNoQnV0dG9uIix2YWx1ZTpmdW5jdGlvbihlKXtlLmRpY3QuaGFzKCJBIil8fGUuZGljdC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQ/KHRoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSFlLmRpY3QuaGFzKCJBIikmJiFlLmRpY3QuaGFzKCJBQSIpLGwuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmUuYXR0YWNobWVudHN9KSk6KDAsbi53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfX0se2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0iYnV0dG9uIjtyZXR1cm4gdGhpcy5kYXRhLmNoZWNrQm94Pyh0PSJjaGVja2JveCIsZT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpOnRoaXMuZGF0YS5yYWRpb0J1dHRvbiYmKHQ9InJhZGlvYnV0dG9uIixlPXRoaXMuZGF0YS5idXR0b25WYWx1ZSkse2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8Ik9mZiIsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxleHBvcnRWYWx1ZXM6ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6dH19fSx7a2V5OiJmYWxsYmFja0ZvbnREaWN0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgby5EaWN0O3JldHVybiBlLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKSxlLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpLGUuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKSwoMCxuLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGZ9KEgpLHo9ZnVuY3Rpb24oZSl7bShvLGUpO3ZhciB0LHI9dyhvKTtmdW5jdGlvbiBvKGUpe3ZhciB0O2oodGhpcyxvKSx0PXIuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZjt0LmRhdGEub3B0aW9ucz1bXTt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Omksa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MCxsPWMubGVuZ3RoO3U8bDt1Kyspe3ZhciBmPXMuZmV0Y2hJZlJlZihjW3VdKSxoPUFycmF5LmlzQXJyYXkoZik7dC5kYXRhLm9wdGlvbnNbdV09e2V4cG9ydFZhbHVlOnQuX2RlY29kZUZvcm1WYWx1ZShoP3MuZmV0Y2hJZlJlZihmWzBdKTpmKSxkaXNwbGF5VmFsdWU6dC5fZGVjb2RlRm9ybVZhbHVlKGg/cy5mZXRjaElmUmVmKGZbMV0pOmYpfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQuZGF0YS5maWVsZFZhbHVlP3QuZGF0YS5maWVsZFZhbHVlPVt0LmRhdGEuZmllbGRWYWx1ZV06dC5kYXRhLmZpZWxkVmFsdWV8fCh0LmRhdGEuZmllbGRWYWx1ZT1bXSksdC5kYXRhLmNvbWJvPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyksdC5kYXRhLm11bHRpU2VsZWN0PXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCksdC5faGFzVGV4dD0hMCx0fXJldHVybiBfKG8sW3trZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19fSx7a2V5OiJfZ2V0QXBwZWFyYW5jZSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxzKXt2YXIgYyx1LGwsZixoLGQscCxnLHYsbSxiLHcsayxTLE8sRixQLEksRSxqLE0sXyxMLFIsTixELEIsVSwkLFgscSxHLHosVyxWLFksSztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmRhdGEuY29tYm8pe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoby5wcm90b3R5cGUpLCJfZ2V0QXBwZWFyYW5jZSIsdGhpcykuY2FsbCh0aGlzLHQscixhLHMpKTtjYXNlIDI6aWYoKGw9cz9zLmdldCh0aGlzLmRhdGEuaWQpOnZvaWQgMCkmJih1PWwucm90YXRpb24sYz1sLnZhbHVlKSx2b2lkIDAhPT11fHx2b2lkIDAhPT1jfHx0aGlzLl9uZWVkQXBwZWFyYW5jZXMpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6Zm9yKHZvaWQgMD09PWM/Yz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KGMpfHwoYz1bY10pLGY9MSxoPTIsZD10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxwPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLDkwIT09dSYmMjcwIT09dXx8KHA9KGc9W2QscF0pWzBdLGQ9Z1sxXSksdj10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsbT1bXSxiPTA7Yjx2O2IrKyl3PXRoaXMuZGF0YS5vcHRpb25zW2JdLmV4cG9ydFZhbHVlLGMuaW5jbHVkZXModykmJm0ucHVzaChiKTtyZXR1cm4gdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSksZS5uZXh0PTE4LEguX2dldEZvbnREYXRhKHQscix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y2FzZSAxODppZihrPWUuc2VudCxPPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUpUz10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle0Y9KGQtZikvdixQPS0xLEU9QSh0aGlzLmRhdGEub3B0aW9ucyk7dHJ5e2ZvcihFLnMoKTshKGo9RS5uKCkpLmRvbmU7KU09ai52YWx1ZS5kaXNwbGF5VmFsdWUsKF89dGhpcy5fZ2V0VGV4dFdpZHRoKE0saykpPlAmJihQPV8sST1NKX1jYXRjaChlKXtFLmUoZSl9ZmluYWxseXtFLmYoKX1MPXRoaXMuX2NvbXB1dGVGb250U2l6ZShGLHAtMipoLEksaywtMSksUj1UKEwsMiksUz1SWzBdLE89UlsxXX1pZihOPU8qbi5MSU5FX0ZBQ1RPUixEPShOLU8pLzIsQj1NYXRoLmZsb29yKGQvTiksMT09PW0ubGVuZ3RoPygkPW1bMF0sVT0kLSQlQik6VT1tLmxlbmd0aD9tWzBdOjAsWD1NYXRoLm1pbihVK0IrMSx2KSxxPVsiL1R4IEJNQyBxIiwiMSAxICIuY29uY2F0KHAsIiAiKS5jb25jYXQoZCwiIHJlIFcgbiIpXSxtLmxlbmd0aCl7cS5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpLEc9QShtKTt0cnl7Zm9yKEcucygpOyEoej1HLm4oKSkuZG9uZTspVz16LnZhbHVlLFU8PVcmJlc8WCYmcS5wdXNoKCIxICIuY29uY2F0KGQtKFctVSsxKSpOLCIgIikuY29uY2F0KHAsIiAiKS5jb25jYXQoTiwiIHJlIGYiKSl9Y2F0Y2goZSl7Ry5lKGUpfWZpbmFsbHl7Ry5mKCl9fWZvcihxLnB1c2goIkJUIixTLCIxIDAgMCAxIDAgIi5jb25jYXQoZCwiIFRtIikpLFY9e3NoaWZ0OjB9LGI9VTtiPFg7YisrKVk9dGhpcy5kYXRhLm9wdGlvbnNbYl0uZGlzcGxheVZhbHVlLEs9Yj09PVU/RDowLHEucHVzaCh0aGlzLl9yZW5kZXJUZXh0KFksayxPLHAsMCxWLGgsLU4rSykpO3JldHVybiBxLnB1c2goIkVUIFEgRU1DIiksZS5hYnJ1cHQoInJldHVybiIscS5qb2luKCJcbiIpKTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksb30oSCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBqKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmRhdGEuZmllbGRWYWx1ZT1udWxsLG59cmV0dXJuIF8ocixbe2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19XSkscn0oSCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdDtyZXR1cm4gYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVEVYVCxhLmRhdGEuaGFzQXBwZWFyYW5jZT9hLmRhdGEubmFtZT0iTm9JY29uIjooYS5kYXRhLnJlY3RbMV09YS5kYXRhLnJlY3RbM10tMjIsYS5kYXRhLnJlY3RbMl09YS5kYXRhLnJlY3RbMF0rMjIsYS5kYXRhLm5hbWU9aS5oYXMoIk5hbWUiKT9pLmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUiKSxpLmhhcygiU3RhdGUiKT8oYS5kYXRhLnN0YXRlPWkuZ2V0KCJTdGF0ZSIpfHxudWxsLGEuZGF0YS5zdGF0ZU1vZGVsPWkuZ2V0KCJTdGF0ZU1vZGVsIil8fG51bGwpOihhLmRhdGEuc3RhdGU9bnVsbCxhLmRhdGEuc3RhdGVNb2RlbD1udWxsKSxhfXJldHVybiBfKHIpfShYKSxZPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuTElOSzt2YXIgaT1EKGUuZGljdCxhLnJlY3RhbmdsZSk7cmV0dXJuIGkmJihhLmRhdGEucXVhZFBvaW50cz1pKSxhLmRhdGEuYm9yZGVyQ29sb3I9YS5kYXRhLmJvcmRlckNvbG9yfHxhLmRhdGEuY29sb3IsbC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6YS5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pLGF9cmV0dXJuIF8ocil9KFUpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Q7YS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9QVVA7dmFyIHM9aS5nZXQoIlBhcmVudCIpO2lmKCFzKXJldHVybigwLG4ud2FybikoIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpLGsoYSk7dmFyIGM9cy5nZXQoIlN1YnR5cGUiKTthLmRhdGEucGFyZW50VHlwZT1jIGluc3RhbmNlb2Ygby5OYW1lP2MubmFtZTpudWxsO3ZhciB1PWkuZ2V0UmF3KCJQYXJlbnQiKTthLmRhdGEucGFyZW50SWQ9dSBpbnN0YW5jZW9mIG8uUmVmP3UudG9TdHJpbmcoKTpudWxsO3ZhciBsPXMuZ2V0QXJyYXkoIlJlY3QiKTtBcnJheS5pc0FycmF5KGwpJiY0PT09bC5sZW5ndGg/YS5kYXRhLnBhcmVudFJlY3Q9bi5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6YS5kYXRhLnBhcmVudFJlY3Q9WzAsMCwwLDBdO3ZhciBmPXMuZ2V0KCJSVCIpO2lmKCgwLG8uaXNOYW1lKShmLG4uQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkmJihzPXMuZ2V0KCJJUlQiKSkscy5oYXMoIk0iKT8oYS5zZXRNb2RpZmljYXRpb25EYXRlKHMuZ2V0KCJNIikpLGEuZGF0YS5tb2RpZmljYXRpb25EYXRlPWEubW9kaWZpY2F0aW9uRGF0ZSk6YS5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCxzLmhhcygiQyIpPyhhLnNldENvbG9yKHMuZ2V0QXJyYXkoIkMiKSksYS5kYXRhLmNvbG9yPWEuY29sb3IpOmEuZGF0YS5jb2xvcj1udWxsLCFhLnZpZXdhYmxlKXt2YXIgaD1zLmdldCgiRiIpO2EuX2lzVmlld2FibGUoaCkmJmEuc2V0RmxhZ3MoaCl9cmV0dXJuIGEuc2V0VGl0bGUocy5nZXQoIlQiKSksYS5kYXRhLnRpdGxlT2JqPWEuX3RpdGxlLGEuc2V0Q29udGVudHMocy5nZXQoIkNvbnRlbnRzIikpLGEuZGF0YS5jb250ZW50c09iaj1hLl9jb250ZW50cyxzLmhhcygiUkMiKSYmKGEuZGF0YS5yaWNoVGV4dD12LlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwocy5nZXQoIlJDIikpKSxhfXJldHVybiBfKHIpfShVKTt0LlBvcHVwQW5ub3RhdGlvbj1LO3ZhciBKPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLnhyZWY7aWYodC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQsdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSwhdC5hcHBlYXJhbmNlJiZ0Ll9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7dmFyIG89bmV3IGkuRmFrZVVuaWNvZGVGb250KGEsInNhbnMtc2VyaWYiKSxjPXQuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dC5hcHBlYXJhbmNlPW8uY3JlYXRlQXBwZWFyYW5jZSh0Ll9jb250ZW50cy5zdHIsdC5yZWN0YW5nbGUsdC5yb3RhdGlvbixjLmZvbnRTaXplfHwxMCxjLmZvbnRDb2xvciksdC5fc3RyZWFtcy5wdXNoKHQuYXBwZWFyYW5jZSxpLkZha2VVbmljb2RlRm9udC50b1VuaWNvZGVTdHJlYW0pfWVsc2UgdC5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLG4ud2FybikoIkZyZWVUZXh0QW5ub3RhdGlvbjogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO3JldHVybiB0fXJldHVybiBfKHMsW3trZXk6Imhhc1RleHRDb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYXBwZWFyYW5jZX19XSxbe2tleToiY3JlYXRlTmV3RGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXIuYXBSZWYsYz1yLmFwLHU9ZS5jb2xvcixsPWUuZm9udFNpemUsZj1lLnJlY3QsaD1lLnJvdGF0aW9uLGQ9ZS51c2VyLHA9ZS52YWx1ZSxnPW5ldyBvLkRpY3QodCk7Zy5zZXQoIlR5cGUiLG8uTmFtZS5nZXQoIkFubm90IikpLGcuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGcmVlVGV4dCIpKSxnLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxnLnNldCgiUmVjdCIsZik7dmFyIHY9Ii9IZWx2ICIuY29uY2F0KGwsIiBUZiAiKS5jb25jYXQoKDAsaS5nZXRQZGZDb2xvcikodSwhMCkpO2lmKGcuc2V0KCJEQSIsdiksZy5zZXQoIkNvbnRlbnRzIiwoMCxhLmlzQXNjaWkpKHApP3A6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShwLCEwKSksZy5zZXQoIkYiLDQpLGcuc2V0KCJCb3JkZXIiLFswLDAsMF0pLGcuc2V0KCJSb3RhdGUiLGgpLGQmJmcuc2V0KCJUIiwoMCxhLmlzQXNjaWkpKGQpP2Q6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShkLCEwKSksc3x8Yyl7dmFyIHk9bmV3IG8uRGljdCh0KTtnLnNldCgiQVAiLHkpLHM/eS5zZXQoIk4iLHMpOnkuc2V0KCJOIixjKX1yZXR1cm4gZ319LHtrZXk6ImNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLHMpe3ZhciBjLHUsbCxmLGgsZCxwLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLHEsRyx6LFcsVixZLEssSixaLFEsZWUsdGUscmUsbmUsYWUsaWUsb2Usc2U7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gYz1zLmJhc2VGb250UmVmLHU9cy5ldmFsdWF0b3IsbD1zLnRhc2ssZj10LmNvbG9yLGg9dC5mb250U2l6ZSxkPXQucmVjdCxwPXQucm90YXRpb24sdj10LnZhbHVlLHk9bmV3IG8uRGljdChyKSxtPW5ldyBvLkRpY3QociksYz9tLnNldCgiSGVsdiIsYyk6KChiPW5ldyBvLkRpY3QocikpLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIkhlbHZldGljYSIpKSxiLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRm9udCIpKSxiLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiVHlwZTEiKSksYi5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSksbS5zZXQoIkhlbHYiLGIpKSx5LnNldCgiRm9udCIsbSksZS5uZXh0PTgsSC5fZ2V0Rm9udERhdGEodSxsLHtmb250TmFtZToiSGVsdmV0aWNhIixmb250U2l6ZTpofSx5KTtjYXNlIDg6dz1lLnNlbnQsaz1UKGQsNCksUz1rWzBdLHg9a1sxXSxPPWtbMl0sRj1rWzNdLFA9Ty1TLEk9Ri14LHAlMTgwIT0wJiYoUD0oRT1bSSxQXSlbMF0sST1FWzFdKSxqPXYuc3BsaXQoIlxuIiksTT1oLzFlMyxfPS0xLzAsTD1bXSxSPUEoaiksZS5wcmV2PTE4LFIucygpO2Nhc2UgMjA6aWYoKE49Ui5uKCkpLmRvbmUpe2UubmV4dD0zNDticmVha31pZihEPU4udmFsdWUsISgoQj13LmVuY29kZVN0cmluZyhEKSkubGVuZ3RoPjEpKXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6RD1CLmpvaW4oIiIpLEwucHVzaChEKSxVPTAsJD13LmNoYXJzVG9HbHlwaHMoRCksWD1BKCQpO3RyeXtmb3IoWC5zKCk7IShxPVgubigpKS5kb25lOylHPXEudmFsdWUsVSs9Ry53aWR0aCpNfWNhdGNoKGUpe1guZShlKX1maW5hbGx5e1guZigpfV89TWF0aC5tYXgoXyxVKTtjYXNlIDMyOmUubmV4dD0yMDticmVhaztjYXNlIDM0OmUubmV4dD0zOTticmVhaztjYXNlIDM2OmUucHJldj0zNixlLnQwPWUuY2F0Y2goMTgpLFIuZShlLnQwKTtjYXNlIDM5OnJldHVybiBlLnByZXY9MzksUi5mKCksZS5maW5pc2goMzkpO2Nhc2UgNDI6Zm9yKHo9MSxfPlAmJih6PVAvXyksVz0xLFY9bi5MSU5FX0ZBQ1RPUipoLFk9bi5MSU5FX0RFU0NFTlRfRkFDVE9SKmgsKEs9VipqLmxlbmd0aCk+SSYmKFc9SS9LKSxKPU1hdGgubWluKHosVyksWj1oKkosUT1bInEiLCIwIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUCksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSSksIiByZSBXIG4iKSwiQlQiLCIxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSStZKSwiIFRtIDAgVGMgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKGYsITApKSwiL0hlbHYgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoWiksIiBUZiIpXSxlZT0oMCxhLm51bWJlclRvU3RyaW5nKShWKSx0ZT0wLHJlPUw7dGU8cmUubGVuZ3RoO3RlKyspbmU9cmVbdGVdLFEucHVzaCgiMCAtIi5jb25jYXQoZWUsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShuZSksIikgVGoiKSk7cmV0dXJuIFEucHVzaCgiRVQiLCJRIiksYWU9US5qb2luKCJcbiIpLChpZT1uZXcgby5EaWN0KHIpKS5zZXQoIkZvcm1UeXBlIiwxKSxpZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksaWUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLGllLnNldCgiQkJveCIsWzAsMCxQLEldKSxpZS5zZXQoIkxlbmd0aCIsYWUubGVuZ3RoKSxpZS5zZXQoIlJlc291cmNlcyIseSkscCYmKG9lPSgwLGEuZ2V0Um90YXRpb25NYXRyaXgpKHAsUCxJKSxpZS5zZXQoIk1hdHJpeCIsb2UpKSwoc2U9bmV3IGcuU3RyaW5nU3RyZWFtKGFlKSkuZGljdD1pZSxlLmFicnVwdCgicmV0dXJuIixzZSk7Y2FzZSA2NzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzE4LDM2LDM5LDQyXV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksc30oWCksWj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5MSU5FO3ZhciBzPWkuZ2V0QXJyYXkoIkwiKTtpZihhLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KHMpLGEuc2V0TGluZUVuZGluZ3MoaS5nZXRBcnJheSgiTEUiKSksYS5kYXRhLmxpbmVFbmRpbmdzPWEubGluZUVuZGluZ3MsIWEuYXBwZWFyYW5jZSl7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sdT1pLmdldCgiQ0EiKSxsPVIoaS5nZXRBcnJheSgiSUMiKSxudWxsKSxmPWw/TihsKTpudWxsLGg9Zj91Om51bGwsZD1hLmJvcmRlclN0eWxlLndpZHRofHwxLHA9MipkLGc9W2EuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0tcCxhLmRhdGEubGluZUNvb3JkaW5hdGVzWzFdLXAsYS5kYXRhLmxpbmVDb29yZGluYXRlc1syXStwLGEuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10rcF07bi5VdGlsLmludGVyc2VjdChhLnJlY3RhbmdsZSxnKXx8KGEucmVjdGFuZ2xlPWcpLGEuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOm8sZXh0cmE6IiIuY29uY2F0KGQsIiB3Iiksc3Ryb2tlQ29sb3I6YyxmaWxsQ29sb3I6ZixzdHJva2VBbHBoYTp1LGZpbGxBbHBoYTpoLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoc1swXSwiICIpLmNvbmNhdChzWzFdLCIgbSIpLCIiLmNvbmNhdChzWzJdLCIgIikuY29uY2F0KHNbM10sIiBsIiksIlMiKSxbdFswXS54LWQsdFsxXS54K2QsdFszXS55LWQsdFsxXS55K2RdfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSxRPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNRVUFSRSwhYS5hcHBlYXJhbmNlKXt2YXIgcz1hLmNvbG9yP04oYS5jb2xvcik6WzAsMCwwXSxjPWkuZ2V0KCJDQSIpLHU9UihpLmdldEFycmF5KCJJQyIpLG51bGwpLGw9dT9OKHUpOm51bGwsZj1sP2M6bnVsbDtpZigwPT09YS5ib3JkZXJTdHlsZS53aWR0aCYmIWwpcmV0dXJuIGsoYSk7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoYS5ib3JkZXJTdHlsZS53aWR0aCwiIHciKSxzdHJva2VDb2xvcjpzLGZpbGxDb2xvcjpsLHN0cm9rZUFscGhhOmMsZmlsbEFscGhhOmYscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzJdLngrYS5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFsyXS55K2EuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtYS5ib3JkZXJTdHlsZS53aWR0aCxvPXRbMV0ueS10WzNdLnktYS5ib3JkZXJTdHlsZS53aWR0aDtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdChyLCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoaSwiICIpLmNvbmNhdChvLCIgcmUiKSksbD9lLnB1c2goIkIiKTplLnB1c2goIlMiKSxbdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX1yZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFLCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIiksdT1SKGkuZ2V0QXJyYXkoIklDIiksbnVsbCksbD11P04odSk6bnVsbCxmPWw/YzpudWxsO2lmKDA9PT1hLmJvcmRlclN0eWxlLndpZHRoJiYhbClyZXR1cm4gayhhKTt2YXIgaD00LzMqTWF0aC50YW4oTWF0aC5QSS84KTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiIiLmNvbmNhdChhLmJvcmRlclN0eWxlLndpZHRoLCIgdyIpLHN0cm9rZUNvbG9yOnMsZmlsbENvbG9yOmwsc3Ryb2tlQWxwaGE6YyxmaWxsQWxwaGE6Zixwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHQpe3ZhciByPXRbMF0ueCthLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzBdLnktYS5ib3JkZXJTdHlsZS53aWR0aC8yLGk9dFszXS54LWEuYm9yZGVyU3R5bGUud2lkdGgvMixvPXRbM10ueSthLmJvcmRlclN0eWxlLndpZHRoLzIscz1yKyhpLXIpLzIsYz1uKyhvLW4pLzIsdT0oaS1yKS8yKmgsZj0oby1uKS8yKmg7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQocywiICIpLmNvbmNhdChvLCIgbSIpLCIiLmNvbmNhdChzK3UsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMsIiBjIiksIiIuY29uY2F0KGksIiAiKS5jb25jYXQoYy1mLCIgIikuY29uY2F0KHMrdSwiICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHMsIiAiKS5jb25jYXQobiwiIGMiKSwiIi5jb25jYXQocy11LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLWYsIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLCIgYyIpLCIiLmNvbmNhdChyLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChzLXUsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiBjIiksImgiKSxsP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSx0ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORSxhLmRhdGEudmVydGljZXM9W10sUyhhKWluc3RhbmNlb2YgcmV8fChhLnNldExpbmVFbmRpbmdzKGkuZ2V0QXJyYXkoIkxFIikpLGEuZGF0YS5saW5lRW5kaW5ncz1hLmxpbmVFbmRpbmdzKTt2YXIgcz1pLmdldEFycmF5KCJWZXJ0aWNlcyIpO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBrKGEpO2Zvcih2YXIgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrPTIpYS5kYXRhLnZlcnRpY2VzLnB1c2goe3g6c1tjXSx5OnNbYysxXX0pO2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBsLGY9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0saD1pLmdldCgiQ0EiKSxkPWEuYm9yZGVyU3R5bGUud2lkdGh8fDEscD0yKmQsZz1bMS8wLDEvMCwtMS8wLC0xLzBdLHY9QShhLmRhdGEudmVydGljZXMpO3RyeXtmb3Iodi5zKCk7IShsPXYubigpKS5kb25lOyl7dmFyIHk9bC52YWx1ZTtnWzBdPU1hdGgubWluKGdbMF0seS54LXApLGdbMV09TWF0aC5taW4oZ1sxXSx5LnktcCksZ1syXT1NYXRoLm1heChnWzJdLHkueCtwKSxnWzNdPU1hdGgubWF4KGdbM10seS55K3ApfX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1uLlV0aWwuaW50ZXJzZWN0KGEucmVjdGFuZ2xlLGcpfHwoYS5yZWN0YW5nbGU9ZyksYS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoZCwiIHciKSxzdHJva2VDb2xvcjpmLHN0cm9rZUFscGhhOmgscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9YS5kYXRhLnZlcnRpY2VzLG49MCxpPXIubGVuZ3RoO248aTtuKyspZS5wdXNoKCIiLmNvbmNhdChyW25dLngsIiAiKS5jb25jYXQocltuXS55LCIgIikuY29uY2F0KDA9PT1uPyJtIjoibCIpKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLHJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPTFlHT04sYX1yZXR1cm4gXyhyKX0odGUpLG5lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkNBUkVULGF9cmV0dXJuIF8ocil9KFgpLGFlPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLmRpY3QsaT1lLnhyZWY7dC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LLHQuZGF0YS5pbmtMaXN0cz1bXTt2YXIgbz1hLmdldEFycmF5KCJJbmtMaXN0Iik7aWYoIUFycmF5LmlzQXJyYXkobykpcmV0dXJuIGsodCk7Zm9yKHZhciBjPTAsdT1vLmxlbmd0aDtjPHU7KytjKXt0LmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKHZhciBsPTAsZj1vW2NdLmxlbmd0aDtsPGY7bCs9Mil0LmRhdGEuaW5rTGlzdHNbY10ucHVzaCh7eDppLmZldGNoSWZSZWYob1tjXVtsXSkseTppLmZldGNoSWZSZWYob1tjXVtsKzFdKX0pfWlmKCF0LmFwcGVhcmFuY2Upe3ZhciBoLGQ9dC5jb2xvcj9OKHQuY29sb3IpOlswLDAsMF0scD1hLmdldCgiQ0EiKSxnPXQuYm9yZGVyU3R5bGUud2lkdGh8fDEsdj0yKmcseT1bMS8wLDEvMCwtMS8wLC0xLzBdLG09QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IobS5zKCk7IShoPW0ubigpKS5kb25lOyl7dmFyIGIsdz1BKGgudmFsdWUpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIFM9Yi52YWx1ZTt5WzBdPU1hdGgubWluKHlbMF0sUy54LXYpLHlbMV09TWF0aC5taW4oeVsxXSxTLnktdikseVsyXT1NYXRoLm1heCh5WzJdLFMueCt2KSx5WzNdPU1hdGgubWF4KHlbM10sUy55K3YpfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX19fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfW4uVXRpbC5pbnRlcnNlY3QodC5yZWN0YW5nbGUseSl8fCh0LnJlY3RhbmdsZT15KSx0Ll9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOiIiLmNvbmNhdChnLCIgdyIpLHN0cm9rZUNvbG9yOmQsc3Ryb2tlQWxwaGE6cCxwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHIpe3ZhciBuLGE9QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IoYS5zKCk7IShuPWEubigpKS5kb25lOyl7Zm9yKHZhciBpPW4udmFsdWUsbz0wLHM9aS5sZW5ndGg7bzxzO28rKyllLnB1c2goIiIuY29uY2F0KGlbb10ueCwiICIpLmNvbmNhdChpW29dLnksIiAiKS5jb25jYXQoMD09PW8/Im0iOiJsIikpO2UucHVzaCgiUyIpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm5bclswXS54LHJbMV0ueCxyWzNdLnksclsxXS55XX19KX1yZXR1cm4gdH1yZXR1cm4gXyhzLG51bGwsW3trZXk6ImNyZWF0ZU5ld0RpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1yLmFwUmVmLGk9ci5hcCxzPWUucGF0aHMsYz1lLnJlY3QsdT1lLnJvdGF0aW9uLGw9bmV3IG8uRGljdCh0KTtsLnNldCgiVHlwZSIsby5OYW1lLmdldCgiQW5ub3QiKSksbC5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkluayIpKSxsLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxsLnNldCgiUmVjdCIsYyksbC5zZXQoIklua0xpc3QiLHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wb2ludHN9KSkpLGwuc2V0KCJGIiw0KSxsLnNldCgiQm9yZGVyIixbMCwwLDBdKSxsLnNldCgiUm90YXRlIix1KTt2YXIgZj1uZXcgby5EaWN0KHQpO3JldHVybiBsLnNldCgiQVAiLGYpLGE/Zi5zZXQoIk4iLGEpOmYuc2V0KCJOIixpKSxsfX0se2tleToiY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIHMsYyx1LGwsZixoLGQscCx2LHksbSxiLHcsayxTLHgsTyxGLFAsSSxFLGosTSxfLEwsUixOLEQsQjtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnM9dC5jb2xvcixjPXQucmVjdCx1PXQucm90YXRpb24sbD10LnBhdGhzLGY9dC50aGlja25lc3MsaD10Lm9wYWNpdHksZD1UKGMsNCkscD1kWzBdLHY9ZFsxXSx5PWRbMl0sbT1kWzNdLGI9eS1wLHc9bS12LHUlMTgwIT0wJiYoYj0oaz1bdyxiXSlbMF0sdz1rWzFdKSxTPVsiIi5jb25jYXQoZiwiIHcgMSBKIDEgaiIpLCIiLmNvbmNhdCgoMCxpLmdldFBkZkNvbG9yKShzLCExKSldLDEhPT1oJiZTLnB1c2goIi9SMCBncyIpLHg9W10sTz1BKGwpO3RyeXtmb3IoTy5zKCk7IShGPU8ubigpKS5kb25lOyl7Zm9yKFA9Ri52YWx1ZS5iZXppZXIseC5sZW5ndGg9MCx4LnB1c2goIiIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMF0pLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMV0pLCIgbSIpKSxJPTIsRT1QLmxlbmd0aDtJPEU7SSs9NilqPVAuc2xpY2UoSSxJKzYpLm1hcChhLm51bWJlclRvU3RyaW5nKS5qb2luKCIgIikseC5wdXNoKCIiLmNvbmNhdChqLCIgYyIpKTt4LnB1c2goIlMiKSxTLnB1c2goeC5qb2luKCJcbiIpKX19Y2F0Y2goZSl7Ty5lKGUpfWZpbmFsbHl7Ty5mKCl9cmV0dXJuIE09Uy5qb2luKCJcbiIpLChfPW5ldyBvLkRpY3QocikpLnNldCgiRm9ybVR5cGUiLDEpLF8uc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGb3JtIikpLF8uc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLF8uc2V0KCJCQm94IixbMCwwLGIsd10pLF8uc2V0KCJMZW5ndGgiLE0ubGVuZ3RoKSx1JiYoTD0oMCxhLmdldFJvdGF0aW9uTWF0cml4KSh1LGIsdyksXy5zZXQoIk1hdHJpeCIsTCkpLDEhPT1oJiYoUj1uZXcgby5EaWN0KHIpLE49bmV3IG8uRGljdChyKSwoRD1uZXcgby5EaWN0KHIpKS5zZXQoIkNBIixoKSxELnNldCgiVHlwZSIsby5OYW1lLmdldCgiRXh0R1N0YXRlIikpLE4uc2V0KCJSMCIsRCksUi5zZXQoIkV4dEdTdGF0ZSIsTiksXy5zZXQoIlJlc291cmNlcyIsUikpLChCPW5ldyBnLlN0cmluZ1N0cmVhbShNKSkuZGljdD1fLGUuYWJydXB0KCJyZXR1cm4iLEIpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHN9KFgpLGllPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe3ZhciBzPWEuYXBwZWFyYW5jZSYmYS5hcHBlYXJhbmNlLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtpZighYS5hcHBlYXJhbmNlfHwhc3x8IXMuaGFzKCJFeHRHU3RhdGUiKSl7YS5hcHBlYXJhbmNlJiYoMCxuLndhcm4pKCJIaWdobGlnaHRBbm5vdGF0aW9uIC0gaWdub3JpbmcgYnVpbHQtaW4gYXBwZWFyYW5jZSBzdHJlYW0uIik7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlsxLDEsMF0sdT1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGZpbGxDb2xvcjpjLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTp1LHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQodFswXS54LCIgIikuY29uY2F0KHRbMF0ueSwiIG0iKSwiIi5jb25jYXQodFsxXS54LCIgIikuY29uY2F0KHRbMV0ueSwiIGwiKSwiIi5jb25jYXQodFszXS54LCIgIikuY29uY2F0KHRbM10ueSwiIGwiKSwiIi5jb25jYXQodFsyXS54LCIgIikuY29uY2F0KHRbMl0ueSwiIGwiKSwiZiIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX1lbHNlIGEuZGF0YS5oYXNQb3B1cD0hMTtyZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksb2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FLGEuZGF0YS5xdWFkUG9pbnRzPUQoaSxudWxsKSl7aWYoIWEuYXBwZWFyYW5jZSl7dmFyIHM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sYz1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjpzLHN0cm9rZUFscGhhOmMscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdCh0WzJdLngsIiAiKS5jb25jYXQodFsyXS55LCIgbSIpLCIiLmNvbmNhdCh0WzNdLngsIiAiKS5jb25jYXQodFszXS55LCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjtpZihhLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWSxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9KHRbMF0ueS10WzJdLnkpLzYsbj1yLGE9dFsyXS54LGk9dFsyXS55LG89dFszXS54O2UucHVzaCgiIi5jb25jYXQoYSwiICIpLmNvbmNhdChpK24sIiBtIikpO2Rve2ErPTIsbj0wPT09bj9yOjAsZS5wdXNoKCIiLmNvbmNhdChhLCIgIikuY29uY2F0KGkrbiwiIGwiKSl9d2hpbGUoYTxvKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMl0ueCxvLGktMipyLGkrMipyXX19KX19ZWxzZSBhLmRhdGEuaGFzUG9wdXA9ITE7cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLGNlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUUklLRU9VVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoKHRbMF0ueCt0WzJdLngpLzIsIiAiKSsiIi5jb25jYXQoKHRbMF0ueSt0WzJdLnkpLzIsIiBtIiksIiIuY29uY2F0KCh0WzFdLngrdFszXS54KS8yLCIgIikrIiIuY29uY2F0KCh0WzFdLnkrdFszXS55KS8yLCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSx1ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiBqKHRoaXMsciksKGE9dC5jYWxsKHRoaXMsZSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TVEFNUCxhfXJldHVybiBfKHIpfShYKSxsZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZixjPW5ldyBoLkZpbGVTcGVjKGkuZ2V0KCJGUyIpLHMpO2EuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5ULGEuZGF0YS5maWxlPWMuc2VyaWFsaXphYmxlO3ZhciB1PWkuZ2V0KCJOYW1lIik7cmV0dXJuIGEuZGF0YS5uYW1lPXUgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodS5uYW1lKToiUHVzaFBpbiIsYX1yZXR1cm4gXyhyKX0oWCl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZha2VVbmljb2RlRm9udD12b2lkIDAsdC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbihlKXt2YXIgdD1lLmZvbnRTaXplLHI9ZS5mb250TmFtZSxuPWUuZm9udENvbG9yO3JldHVybiIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShyKSwiICIpLmNvbmNhdCh0LCIgVGYgIikuY29uY2F0KHcobiwhMCkpfSx0LmdldFBkZkNvbG9yPXcsdC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYihlKS5wYXJzZSgpfTt2YXIgYT1yKDEzNCksaT1yKDEzNSksbz1yKDIpLHM9cigxNDMpLGM9cigxNDQpLHU9cigxMzkpO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWgoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtyZXR1cm4geT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHkoZSx0KX1mdW5jdGlvbiBtKGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxtKGUpfXZhciBiPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ5KGUsdCl9KGMsZSk7dmFyIHQscixpPSh0PWMscj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPW0odCk7aWYocil7dmFyIGk9bSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gcCh0aGlzLGMpLGkuY2FsbCh0aGlzLG5ldyB1LlN0cmluZ1N0cmVhbShlKSl9cmV0dXJuIHYoYyxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDtlLmFyZ3MubGVuZ3RoPTAsdGhpcy5yZWFkKGUpOylpZigwPT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKXt2YXIgcj1lLmZuLG49ZS5hcmdzO3N3aXRjaCgwfHIpe2Nhc2Ugby5PUFMuc2V0Rm9udDp2YXIgaT1mKG4sMiksYz1pWzBdLHU9aVsxXTtjIGluc3RhbmNlb2YgYS5OYW1lJiYodC5mb250TmFtZT1jLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgdSYmdT4wJiYodC5mb250U2l6ZT11KTticmVhaztjYXNlIG8uT1BTLnNldEZpbGxSR0JDb2xvcjpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBvLk9QUy5zZXRGaWxsR3JheTpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0obiwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2Ugby5PUFMuc2V0RmlsbENvbG9yU3BhY2U6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpeygwLG8ud2FybikoJ3BhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gdH19XSksY30oYy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IpO2Z1bmN0aW9uIHcoZSx0KXtpZihlWzBdPT09ZVsxXSYmZVsxXT09PWVbMl0pe3ZhciByPWVbMF0vMjU1O3JldHVybiIiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShyKSwiICIpLmNvbmNhdCh0PyJnIjoiRyIpfXJldHVybiBBcnJheS5mcm9tKGUsKGZ1bmN0aW9uKGUpe3JldHVybigwLGkubnVtYmVyVG9TdHJpbmcpKGUvMjU1KX0pKS5qb2luKCIgIikrIiAiLmNvbmNhdCh0PyJyZyI6IlJHIil9dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMueHJlZj10LHRoaXMud2lkdGhzPW51bGwsdGhpcy5maXJzdENoYXI9MS8wLHRoaXMubGFzdENoYXI9LTEvMCx0aGlzLmZvbnRGYW1pbHk9cjt2YXIgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSk7dGhpcy5jdHhNZWFzdXJlPW4uZ2V0Q29udGV4dCgiMmQiKSxlLl9mb250TmFtZUlkfHwoZS5fZm9udE5hbWVJZD0xKSx0aGlzLmZvbnROYW1lPWEuTmFtZS5nZXQoIkludmFsaWRQREZqc0ZvbnRfIi5jb25jYXQociwiXyIpLmNvbmNhdChlLl9mb250TmFtZUlkKyspKX1yZXR1cm4gdihlLFt7a2V5OiJ0b1VuaWNvZGVSZWYiLGdldDpmdW5jdGlvbigpe2lmKCFlLl90b1VuaWNvZGVSZWYpe3ZhciB0PWUudG9Vbmljb2RlU3RyZWFtPW5ldyB1LlN0cmluZ1N0cmVhbSgiL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luXG4xMiBkaWN0IGJlZ2luXG5iZWdpbmNtYXBcbi9DSURTeXN0ZW1JbmZvXG48PCAvUmVnaXN0cnkgKEFkb2JlKVxuL09yZGVyaW5nIChVQ1MpIC9TdXBwbGVtZW50IDAgPj4gZGVmXG4vQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWZcbi9DTWFwVHlwZSAyIGRlZlxuMSBiZWdpbmNvZGVzcGFjZXJhbmdlXG48MDAwMD4gPEZGRkY+XG5lbmRjb2Rlc3BhY2VyYW5nZVxuMSBiZWdpbmJmcmFuZ2VcbjwwMDAwPiA8RkZGRj4gPDAwMDA+XG5lbmRiZnJhbmdlXG5lbmRjbWFwIENNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcCBlbmQgZW5kIikscj1uZXcgYS5EaWN0KHRoaXMueHJlZik7dC5kaWN0PXIsci5zZXQoIkxlbmd0aCIsMzQ2KSxlLl90b1VuaWNvZGVSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX3RvVW5pY29kZVJlZn19LHtrZXk6ImZvbnREZXNjcmlwdG9yUmVmIixnZXQ6ZnVuY3Rpb24oKXtpZighZS5fZm9udERlc2NyaXB0b3JSZWYpe3ZhciB0PW5ldyBhLkRpY3QodGhpcy54cmVmKTt0LnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSksdC5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKSx0LnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIiksdC5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pLHQuc2V0KCJGb250U3RyZXRjaCIsYS5OYW1lLmdldCgiTm9ybWFsIikpLHQuc2V0KCJGb250V2VpZ2h0Iiw0MDApLHQuc2V0KCJJdGFsaWNBbmdsZSIsMCksZS5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX2ZvbnREZXNjcmlwdG9yUmVmfX0se2tleToiZGVzY2VuZGFudEZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpLGUuc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJGb250IikpLGUuc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJDSURGb250VHlwZTAiKSksZS5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxlLnNldCgiRmlyc3RDaGFyIix0aGlzLmZpcnN0Q2hhciksZS5zZXQoIkxhc3RDaGFyIix0aGlzLmxhc3RDaGFyKSxlLnNldCgiRm9udERlc2NyaXB0b3IiLHRoaXMuZm9udERlc2NyaXB0b3JSZWYpLGUuc2V0KCJEVyIsMWUzKTt2YXIgdCxyLG49W10saT1udWxsLG89bnVsbCxzPWwoKHI9dGhpcy53aWR0aHMuZW50cmllcygpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGQoZSl9KHIpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHIpfHxoKHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKS5zb3J0KCkpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9Zih0LnZhbHVlLDIpLHU9Y1swXSxwPWNbMV07aT91PT09aStvLmxlbmd0aD9vLnB1c2gocCk6KG4ucHVzaChpLG8pLGk9dSxvPVtwXSk6KGk9dSxvPVtwXSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfWkmJm4ucHVzaChpLG8pLGUuc2V0KCJXIixuKTt2YXIgZz1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIGcuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksZy5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxnLnNldCgiU3VwcGxlbWVudCIsMCksZS5zZXQoIkNJRFN5c3RlbUluZm8iLGcpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToiYmFzZUZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtyZXR1cm4gZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKSxlLnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udCIpKSxlLnNldCgiU3VidHlwZSIsYS5OYW1lLmdldCgiVHlwZTAiKSksZS5zZXQoIkVuY29kaW5nIixhLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpLGUuc2V0KCJEZXNjZW5kYW50Rm9udHMiLFt0aGlzLmRlc2NlbmRhbnRGb250UmVmXSksZS5zZXQoIlRvVW5pY29kZSIsdGhpcy50b1VuaWNvZGVSZWYpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToicmVzb3VyY2VzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgYS5EaWN0KHRoaXMueHJlZiksdD1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIHQuc2V0KHRoaXMuZm9udE5hbWUubmFtZSx0aGlzLmJhc2VGb250UmVmKSxlLnNldCgiRm9udCIsdCksZX19LHtrZXk6Il9jcmVhdGVDb250ZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRocz1uZXcgTWFwLHRoaXMuY3R4TWVhc3VyZS5mb250PSIxMDAwcHggIi5jb25jYXQodGhpcy5mb250RmFtaWx5KSx0aGlzLmN0eE1lYXN1cmV9fSx7a2V5OiJjcmVhdGVGb250UmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxuPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYSxpPWwodC52YWx1ZS5zcGxpdCgiIikpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZSxzPW8uY2hhckNvZGVBdCgwKTtpZighdGhpcy53aWR0aHMuaGFzKHMpKXt2YXIgYz1yLm1lYXN1cmVUZXh0KG8pLHU9TWF0aC5jZWlsKGMud2lkdGgpO3RoaXMud2lkdGhzLnNldChzLHUpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKHMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgocyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHRoaXMucmVzb3VyY2VzfX0se2tleToiY3JlYXRlQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixzKXt2YXIgYyxoPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxkPVtdLHA9LTEvMCxnPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihnLnMoKTshKGM9Zy5uKCkpLmRvbmU7KXt2YXIgdj1jLnZhbHVlO2QucHVzaCh2KTt2YXIgeT1oLm1lYXN1cmVUZXh0KHYpLndpZHRoO3A9TWF0aC5tYXgocCx5KTt2YXIgbSxiPWwodi5zcGxpdCgiIikpO3RyeXtmb3IoYi5zKCk7IShtPWIubigpKS5kb25lOyl7dmFyIGs9bS52YWx1ZSxTPWsuY2hhckNvZGVBdCgwKSx4PXRoaXMud2lkdGhzLmdldChTKTtpZih2b2lkIDA9PT14KXt2YXIgTz1oLm1lYXN1cmVUZXh0KGspO3g9TWF0aC5jZWlsKE8ud2lkdGgpLHRoaXMud2lkdGhzLnNldChTLHgpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKFMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgoUyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9cCo9bi8xZTM7dmFyIEE9Zih0LDQpLEM9QVswXSxGPUFbMV0sUD1BWzJdLUMsVD1BWzNdLUY7aWYociUxODAhPTApe3ZhciBJPVtULFBdO1A9SVswXSxUPUlbMV19dmFyIEU9MTtwPlAmJihFPVAvcCk7dmFyIGo9MSxNPW8uTElORV9GQUNUT1IqbixfPW8uTElORV9ERVNDRU5UX0ZBQ1RPUipuLEw9TSpkLmxlbmd0aDtMPlQmJihqPVQvTCk7Zm9yKHZhciBSPW4qTWF0aC5taW4oRSxqKSxOPVsicSIsIjAgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShQKSwiICIpLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUKSwiIHJlIFcgbiIpLCJCVCIsIjEgMCAwIDEgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUK18pLCIgVG0gMCBUYyAiKS5jb25jYXQodyhzLCEwKSksIi8iLmNvbmNhdCh0aGlzLmZvbnROYW1lLm5hbWUsIiAiKS5jb25jYXQoKDAsaS5udW1iZXJUb1N0cmluZykoUiksIiBUZiIpXSxEPSgwLGkubnVtYmVyVG9TdHJpbmcpKE0pLEI9MCxVPWQ7QjxVLmxlbmd0aDtCKyspe3ZhciAkPVVbQl07Ti5wdXNoKCIwIC0iLmNvbmNhdChELCIgVGQgPCIpLmNvbmNhdCgoMCxpLnN0cmluZ1RvVVRGMTZIZXhTdHJpbmcpKCQpLCI+IFRqIikpfU4ucHVzaCgiRVQiLCJRIik7dmFyIFg9Ti5qb2luKCJcbiIpLEg9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2lmKEguc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJGb3JtIikpLEguc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYT2JqZWN0IikpLEguc2V0KCJCQm94IixbMCwwLFAsVF0pLEguc2V0KCJMZW5ndGgiLFgubGVuZ3RoKSxILnNldCgiUmVzb3VyY2VzIix0aGlzLnJlc291cmNlcykscil7dmFyIHE9KDAsaS5nZXRSb3RhdGlvbk1hdHJpeCkocixQLFQpO0guc2V0KCJNYXRyaXgiLHEpfXZhciBHPW5ldyB1LlN0cmluZ1N0cmVhbShYKTtyZXR1cm4gRy5kaWN0PUgsR319XSksZX0oKTt0LkZha2VVbmljb2RlRm9udD1rfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29sb3JTcGFjZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3AodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuIiksdGhpcy5uYW1lPXQsdGhpcy5udW1Db21wcz1yfXZhciB0LHI7cmV0dXJuIHYoZSxbe2tleToiZ2V0UmdiIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtyZXR1cm4gdGhpcy5nZXRSZ2JJdGVtKGUsdCxyLDApLHJ9fSx7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUuaXNEZWZhdWx0RGVjb2RlKHQsdGhpcy5udW1Db21wcyl9fSx7a2V5OiJmaWxsUmdiIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9dCpyLGw9bnVsbCxmPTE8PG8saD1yIT09YXx8dCE9PW47aWYodGhpcy5pc1Bhc3N0aHJvdWdoKG8pKWw9cztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZ1PmYmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2Zvcih2YXIgZD1vPD04P25ldyBVaW50OEFycmF5KGYpOm5ldyBVaW50MTZBcnJheShmKSxwPTA7cDxmO3ArKylkW3BdPXA7dmFyIGc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqZik7aWYodGhpcy5nZXRSZ2JCdWZmZXIoZCwwLGYsZywwLG8sMCksaCl7bD1uZXcgVWludDhBcnJheSgzKnUpO2Zvcih2YXIgdj0wLHk9MDt5PHU7Kyt5KXt2YXIgbT0zKnNbeV07bFt2KytdPWdbbV0sbFt2KytdPWdbbSsxXSxsW3YrK109Z1ttKzJdfX1lbHNlIGZvcih2YXIgYj0wLHc9MDt3PHU7Kyt3KXt2YXIgaz0zKnNbd107ZVtiKytdPWdba10sZVtiKytdPWdbaysxXSxlW2IrK109Z1trKzJdLGIrPWN9fWVsc2UgaD8obD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyp1KSx0aGlzLmdldFJnYkJ1ZmZlcihzLDAsdSxsLDAsbywwKSk6dGhpcy5nZXRSZ2JCdWZmZXIocywwLG4qaSxlLDAsbyxjKTtpZihsKWlmKGgpIWZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe289MSE9PW8/MDpvO2Zvcih2YXIgcyxjPXIvYSx1PW4vaSxsPTAsZj1uZXcgVWludDE2QXJyYXkoYSksaD0zKnIsZD0wO2Q8YTtkKyspZltkXT0zKk1hdGguZmxvb3IoZCpjKTtmb3IodmFyIHA9MDtwPGk7cCsrKWZvcih2YXIgZz1NYXRoLmZsb29yKHAqdSkqaCx2PTA7djxhO3YrKylzPWcrZlt2XSx0W2wrK109ZVtzKytdLHRbbCsrXT1lW3MrK10sdFtsKytdPWVbcysrXSxsKz1vfShsLGUsdCxyLG4sYSxjKTtlbHNlIGZvcih2YXIgUz0wLHg9MCxPPTAsQT1uKmk7TzxBO08rKyllW1MrK109bFt4KytdLGVbUysrXT1sW3grK10sZVtTKytdPWxbeCsrXSxTKz1jfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9fV0sW3trZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRDb2xvclNwYWNlIiBhcmd1bWVudC4nKTt2YXIgaSxvO2UgaW5zdGFuY2VvZiBhLlJlZiYmKG89ZSxlPXQuZmV0Y2goZSkpLGUgaW5zdGFuY2VvZiBhLk5hbWUmJihpPWUubmFtZSksKGl8fG8pJiZyLnNldChpLG8sbil9fSx7a2V5OiJnZXRDYWNoZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2YgYS5SZWYpe3ZhciBuPXIuZ2V0QnlSZWYoZSk7aWYobilyZXR1cm4gbjt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBvLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBhLk5hbWUpe3ZhciBpPXIuZ2V0QnlOYW1lKGUubmFtZSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH19LHtrZXk6InBhcnNlQXN5bmMiLHZhbHVlOih0PWgoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4sYSxpLG8scyxjO3JldHVybiBoKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9dC5jcyxuPXQueHJlZixhPXQucmVzb3VyY2VzLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LnBkZkZ1bmN0aW9uRmFjdG9yeSxzPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsYz10aGlzLl9wYXJzZShyLG4saSxvKSx0aGlzLl9jYWNoZShyLG4scyxjKSxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXtkKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtkKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNzLHI9ZS54cmVmLG49ZS5yZXNvdXJjZXMsYT12b2lkIDA9PT1uP251bGw6bixpPWUucGRmRnVuY3Rpb25GYWN0b3J5LG89ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxzPXRoaXMuZ2V0Q2FjaGVkKHQscixvKTtpZihzKXJldHVybiBzO3ZhciBjPXRoaXMuX3BhcnNlKHQscixhLGkpO3JldHVybiB0aGlzLl9jYWNoZSh0LHIsbyxjKSxjfX0se2tleToiX3BhcnNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgYS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBiKG51bGwpO2RlZmF1bHQ6aWYociBpbnN0YW5jZW9mIGEuRGljdCl7dmFyIG89ci5nZXQoIkNvbG9yU3BhY2UiKTtpZihvIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcz1vLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBhLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogIi5jb25jYXQoZS5uYW1lKSl9aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGMsdSxsLGYsaCxkLHA9dC5mZXRjaElmUmVmKGVbMF0pLm5hbWU7c3dpdGNoKHApe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cmV0dXJuIGY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGQ9Yy5nZXQoIkdhbW1hIiksbmV3IE8oZixoLGQpO2Nhc2UiQ2FsUkdCIjpmPShjPXQuZmV0Y2hJZlJlZihlWzFdKSkuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxoPWMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKSxkPWMuZ2V0QXJyYXkoIkdhbW1hIik7dmFyIGc9Yy5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIG5ldyBBKGYsaCxkLGcpO2Nhc2UiSUNDQmFzZWQiOnZhciB2PXQuZmV0Y2hJZlJlZihlWzFdKS5kaWN0O3U9di5nZXQoIk4iKTt2YXIgeT12LmdldCgiQWx0ZXJuYXRlIik7aWYoeSl7dmFyIGs9dGhpcy5fcGFyc2UoeSx0LHIsaSk7aWYoay5udW1Db21wcz09PXUpcmV0dXJuIGs7KDAsbi53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT11KXJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtpZigzPT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtpZig0PT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7YnJlYWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4obD1lWzFdfHxudWxsKSYmKGw9dGhpcy5fcGFyc2UobCx0LHIsaSkpLG5ldyBiKGwpO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjpsPXRoaXMuX3BhcnNlKGVbMV0sdCxyLGkpO3ZhciBTPXQuZmV0Y2hJZlJlZihlWzJdKSsxLHg9dC5mZXRjaElmUmVmKGVbM10pO3JldHVybiBuZXcgdyhsLFMseCk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOnZhciBGPXQuZmV0Y2hJZlJlZihlWzFdKTt1PUFycmF5LmlzQXJyYXkoRik/Ri5sZW5ndGg6MSxsPXRoaXMuX3BhcnNlKGVbMl0sdCxyLGkpO3ZhciBQPWkuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgbSh1LGwsUCk7Y2FzZSJMYWIiOmY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3ZhciBUPWMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBDKGYsaCxUKTtkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAiLmNvbmNhdChwKSl9fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICIuY29uY2F0KGUpKX19LHtrZXk6ImlzRGVmYXVsdERlY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aClyZXR1cm4oMCxuLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIiksITA7Zm9yKHZhciByPTAsYT1lLmxlbmd0aDtyPGE7cis9MilpZigwIT09ZVtyXXx8MSE9PWVbcisxXSlyZXR1cm4hMTtyZXR1cm4hMH19LHtrZXk6InNpbmdsZXRvbnMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJzaW5nbGV0b25zIix7Z2V0IGdyYXkoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZ3JheSIsbmV3IGspfSxnZXQgcmdiKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJnYiIsbmV3IFMpfSxnZXQgY215aygpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjbXlrIixuZXcgeCl9fSl9fV0pLGV9KCk7dC5Db2xvclNwYWNlPXk7dmFyIG09ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHAodGhpcyxyKSwoaT10LmNhbGwodGhpcywiQWx0ZXJuYXRlIixlKSkuYmFzZT1uLGkudGludEZuPWEsaS50bXBCdWY9bmV3IEZsb2F0MzJBcnJheShuLm51bUNvbXBzKSxpfXJldHVybiB2KHIsW3trZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMudG1wQnVmO3RoaXMudGludEZuKGUsdCxhLDApLHRoaXMuYmFzZS5nZXRSZ2JJdGVtKGEsMCxyLG4pfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU9dGhpcy50aW50Rm4sbD10aGlzLmJhc2UsZj0xLygoMTw8aSktMSksaD1sLm51bUNvbXBzLGQ9bC51c2VzWmVyb1RvT25lUmFuZ2UscD0obC5pc1Bhc3N0aHJvdWdoKDgpfHwhZCkmJjA9PT1vLGc9cD9hOjAsdj1wP246bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqcikseT10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheSh5KSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7Zm9yKHM9MDtzPHI7cysrKXtmb3IoYz0wO2M8eTtjKyspbVtjXT1lW3QrK10qZjtpZih1KG0sMCxiLDApLGQpZm9yKGM9MDtjPGg7YysrKXZbZysrXT0yNTUqYltjXTtlbHNlIGwuZ2V0UmdiSXRlbShiLDAsdixnKSxnKz1ofXB8fGwuZ2V0UmdiQnVmZmVyKHYsMCxyLG4sYSw4LG8pfX0se2tleToiZ2V0T3V0cHV0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fV0pLHJ9KHkpLGI9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gcCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLCJQYXR0ZXJuIixudWxsKSkuYmFzZT1lLG59cmV0dXJuIHYocixbe2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1dKSxyfSh5KSx3PWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLG8pe3ZhciBzO3AodGhpcyxyKSwocz10LmNhbGwodGhpcywiSW5kZXhlZCIsMSkpLmJhc2U9ZSxzLmhpZ2hWYWw9YTt2YXIgYz1lLm51bUNvbXBzKmE7aWYocy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoYyksbyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSl7dmFyIHU9by5nZXRCeXRlcyhjKTtzLmxvb2t1cC5zZXQodSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICIuY29uY2F0KG8pKTtmb3IodmFyIGw9MDtsPGM7KytsKXMubG9va3VwW2xdPTI1NSZvLmNoYXJDb2RlQXQobCl9cmV0dXJuIHN9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSphO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLHIsbiw4LDApfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9dGhpcy5iYXNlLGM9cy5udW1Db21wcyx1PXMuZ2V0T3V0cHV0TGVuZ3RoKGMsbyksbD10aGlzLmxvb2t1cCxmPTA7ZjxyOysrZil7dmFyIGg9ZVt0KytdKmM7cy5nZXRSZ2JCdWZmZXIobCxoLDEsbixhLDgsbyksYSs9dX19fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCgyIT09ZS5sZW5ndGg/KCgwLG4ud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0IiksITApOiFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDE/KCgwLG4ud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpLCEwKTowPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xKX19XSkscn0oeSksaz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlR3JheSIsMSl9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9MjU1KmVbdF07cltuXT1yW24rMV09cltuKzJdPWF9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe2Zvcih2YXIgcz0yNTUvKCgxPDxpKS0xKSxjPXQsdT1hLGw9MDtsPHI7KytsKXt2YXIgZj1zKmVbYysrXTtuW3UrK109ZixuW3UrK109ZixuW3UrK109Zix1Kz1vfX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KX19XSkscn0oeSksUz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlUkdCIiwzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtyW25dPTI1NSplW3RdLHJbbisxXT0yNTUqZVt0KzFdLHJbbisyXT0yNTUqZVt0KzJdfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtpZig4IT09aXx8MCE9PW8pZm9yKHZhciBzPTI1NS8oKDE8PGkpLTEpLGM9dCx1PWEsbD0wO2w8cjsrK2wpblt1KytdPXMqZVtjKytdLG5bdSsrXT1zKmVbYysrXSxuW3UrK109cyplW2MrK10sdSs9bztlbHNlIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lfX1dKSxyfSh5KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe3ZhciBpPWVbdF0qcixvPWVbdCsxXSpyLHM9ZVt0KzJdKnIsYz1lW3QrM10qcjtuW2FdPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipvKzE4LjgyMjkwNTAyMTY1MzAyKnMrMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK28qKDEuNzE0OTc2MzQ3NzM2MjEzNCpvLTUuNjA5NjczNjkwNDA0NzMxNSpzKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrcyooLTIuNTIxNzM0MDEzMTY4MzAzMypzLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0NyksblthKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipvKzYuODcxNDI1NTkyMDQ5MDA3KnMrMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrbyooLTE1LjMxMDM2MTMwNjk2NzgxNypvKzE3LjU3NTI1MTI2MTEwOTQ4MipzKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStzKig0LjQ0NDMzOTEwMjg1MjczOSpzKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KSxuW2ErMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqbyszMC44OTk3ODMwOTcwMzcyOSpzLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrbyooMTAuNDk1OTMyNzM0MzIwNzIqbys2My4wMjM3ODQ5NDc1NDA1MipzKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrcyooLjAzMjk2MDQxMTE0ODczMjE3KnMrMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBmdW5jdGlvbih0KXtzKG4sdCk7dmFyIHI9dShuKTtmdW5jdGlvbiBuKCl7cmV0dXJuIHAodGhpcyxuKSxyLmNhbGwodGhpcywiRGV2aWNlQ01ZSyIsNCl9cmV0dXJuIHYobixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0LHIsMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0LHIsbixhLGksbyxzKXtmb3IodmFyIGM9MS8oKDE8PG8pLTEpLHU9MDt1PG47dSsrKWUodCxyLGMsYSxpKSxyKz00LGkrPTMrc319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fV0pLG59KHkpfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpKXt2YXIgbz10W3JdKmkscz1NYXRoLnBvdyhvLGUuRyksYz1lLllXKnMsdT1NYXRoLm1heCgyOTUuOCpNYXRoLnBvdyhjLC4zMzMzMzMzMzMzMzMzMzMzKS00MC44LDApO25bYV09dSxuW2ErMV09dSxuW2ErMl09dX1yZXR1cm4gZnVuY3Rpb24odCl7cyhhLHQpO3ZhciByPXUoYSk7ZnVuY3Rpb24gYShlLHQsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89ci5jYWxsKHRoaXMsIkNhbEdyYXkiLDEpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheSIpO2lmKHQ9dHx8WzAsMCwwXSxpPWl8fDEsby5YVz1lWzBdLG8uWVc9ZVsxXSxvLlpXPWVbMl0sby5YQj10WzBdLG8uWUI9dFsxXSxvLlpCPXRbMl0sby5HPWksby5YVzwwfHxvLlpXPDB8fDEhPT1vLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgIi5jb25jYXQoby5uYW1lKSsiLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtyZXR1cm4oby5YQjwwfHxvLllCPDB8fG8uWkI8MCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICIuY29uY2F0KG8ubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSksby5YQj1vLllCPW8uWkI9MCksMD09PW8uWEImJjA9PT1vLllCJiYwPT09by5aQnx8KDAsbi53YXJuKSgiIi5jb25jYXQoby5uYW1lLCIsIEJsYWNrUG9pbnQ6IFhCOiAiKS5jb25jYXQoby5YQiwiLCBZQjogIikuY29uY2F0KG8uWUIsIiwgIikrIlpCOiAiLmNvbmNhdChvLlpCLCIsIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4iKSksby5HPDEmJigoMCxuLmluZm8pKCJJbnZhbGlkIEdhbW1hOiAiLmNvbmNhdChvLkcsIiBmb3IgIikuY29uY2F0KG8ubmFtZSwiLCAiKSsiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIiksby5HPTEpLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0aGlzLHQscixuLGEsMSl9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQscixuLGEsaSxvLHMpe2Zvcih2YXIgYz0xLygoMTw8byktMSksdT0wO3U8bjsrK3UpZSh0aGlzLHQscixhLGksYykscis9MSxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCl9fV0pLGF9KHkpfSgpLEE9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSksdD1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSkscj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pLGE9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPW5ldyBGbG9hdDMyQXJyYXkoMyksbz1uZXcgRmxvYXQzMkFycmF5KDMpLGM9bmV3IEZsb2F0MzJBcnJheSgzKSxsPU1hdGgucG93KDI0LzExNiwzKS84O2Z1bmN0aW9uIGYoZSx0LHIpe3JbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0sclsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXSxyWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGU8PS4wMDMxMzA4P2QoMCwxLDEyLjkyKmUpOmU+PS45OTU1NDUyNT8xOmQoMCwxLDEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQscikpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGU8MD8tZygtZSk6ZT44P01hdGgucG93KChlKzE2KS8xMTYsMyk6ZSpsfWZ1bmN0aW9uIG0obixzLHUsbCxwLHYpe3ZhciB5PWQoMCwxLHNbdV0qdiksbT1kKDAsMSxzW3UrMV0qdiksYj1kKDAsMSxzW3UrMl0qdiksdz0xPT09eT8xOk1hdGgucG93KHksbi5HUiksaz0xPT09bT8xOk1hdGgucG93KG0sbi5HRyksUz0xPT09Yj8xOk1hdGgucG93KGIsbi5HQikseD1uLk1YQSp3K24uTVhCKmsrbi5NWEMqUyxPPW4uTVlBKncrbi5NWUIqaytuLk1ZQypTLEE9bi5NWkEqdytuLk1aQiprK24uTVpDKlMsQz1vO0NbMF09eCxDWzFdPU8sQ1syXT1BO3ZhciBGPWM7IWZ1bmN0aW9uKHIsbixhKXtpZigxPT09clswXSYmMT09PXJbMl0pcmV0dXJuIGFbMF09blswXSxhWzFdPW5bMV0sdm9pZChhWzJdPW5bMl0pO3ZhciBvPWE7ZihlLG4sbyk7dmFyIHM9aTshZnVuY3Rpb24oZSx0LHIpe3JbMF09MSp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEqdFsyXS9lWzJdfShyLG8scyksZih0LHMsYSl9KG4ud2hpdGVQb2ludCxDLEYpO3ZhciBQPW87IWZ1bmN0aW9uKGUsdCxyKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXJldHVybiByWzBdPXRbMF0sclsxXT10WzFdLHZvaWQoclsyXT10WzJdKTt2YXIgbj1nKDApLGE9KDEtbikvKDEtZyhlWzBdKSksaT0xLWEsbz0oMS1uKS8oMS1nKGVbMV0pKSxzPTEtbyxjPSgxLW4pLygxLWcoZVsyXSkpLHU9MS1jO3JbMF09dFswXSphK2ksclsxXT10WzFdKm8rcyxyWzJdPXRbMl0qYyt1fShuLmJsYWNrUG9pbnQsRixQKTt2YXIgVD1jOyFmdW5jdGlvbihyLG4sYSl7dmFyIG89YTtmKGUsbixvKTt2YXIgcz1pOyFmdW5jdGlvbihlLHQscil7clswXT0uOTUwNDcqdFswXS9lWzBdLHJbMV09MSp0WzFdL2VbMV0sclsyXT0xLjA4ODgzKnRbMl0vZVsyXX0ocixvLHMpLGYodCxzLGEpfShhLFAsVCk7dmFyIEk9bztmKHIsVCxJKSxsW3BdPTI1NSpoKElbMF0pLGxbcCsxXT0yNTUqaChJWzFdKSxsW3ArMl09MjU1KmgoSVsyXSl9cmV0dXJuIGZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLGksbyl7dmFyIHM7aWYocCh0aGlzLHIpLHM9dC5jYWxsKHRoaXMsIkNhbFJHQiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTthPWF8fG5ldyBGbG9hdDMyQXJyYXkoMyksaT1pfHxuZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pLG89b3x8bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDAsMCwwLDFdKTt2YXIgYz1lWzBdLHU9ZVsxXSxsPWVbMl07cy53aGl0ZVBvaW50PWU7dmFyIGY9YVswXSxoPWFbMV0sZD1hWzJdO2lmKHMuYmxhY2tQb2ludD1hLHMuR1I9aVswXSxzLkdHPWlbMV0scy5HQj1pWzJdLHMuTVhBPW9bMF0scy5NWUE9b1sxXSxzLk1aQT1vWzJdLHMuTVhCPW9bM10scy5NWUI9b1s0XSxzLk1aQj1vWzVdLHMuTVhDPW9bNl0scy5NWUM9b1s3XSxzLk1aQz1vWzhdLGM8MHx8bDwwfHwxIT09dSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICIuY29uY2F0KHMubmFtZSkrIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7cmV0dXJuKGY8MHx8aDwwfHxkPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50IGZvciAiLmNvbmNhdChzLm5hbWUsIiBbIikuY29uY2F0KGYsIiwgIikuY29uY2F0KGgsIiwgIikuY29uY2F0KGQsIl0sICIpKyJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSxzLmJsYWNrUG9pbnQ9bmV3IEZsb2F0MzJBcnJheSgzKSksKHMuR1I8MHx8cy5HRzwwfHxzLkdCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBHYW1tYSBbIi5jb25jYXQocy5HUiwiLCAiKS5jb25jYXQocy5HRywiLCAiKS5jb25jYXQocy5HQiwiXSBmb3IgIikrIiIuY29uY2F0KHMubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSkscy5HUj1zLkdHPXMuR0I9MSksc31yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXttKHRoaXMsZSx0LHIsbiwxKX19LHtrZXk6ImdldFJnYkJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7Zm9yKHZhciBzPTEvKCgxPDxpKS0xKSxjPTA7YzxyOysrYyltKHRoaXMsZSx0LG4sYSxzKSx0Kz0zLGErPTMrb319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9fV0pLHJ9KHkpfSgpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj02LzI5P01hdGgucG93KGUsMyk6MTA4Lzg0MSooZS00LzI5KX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiByK2UqKG4tcikvdH1mdW5jdGlvbiByKHIsbixhLGksbyxzKXt2YXIgYz1uW2FdLHU9blthKzFdLGw9blthKzJdOyExIT09aSYmKGM9dChjLGksMCwxMDApLHU9dCh1LGksci5hbWluLHIuYW1heCksbD10KGwsaSxyLmJtaW4sci5ibWF4KSksdT5yLmFtYXg/dT1yLmFtYXg6dTxyLmFtaW4mJih1PXIuYW1pbiksbD5yLmJtYXg/bD1yLmJtYXg6bDxyLmJtaW4mJihsPXIuYm1pbik7dmFyIGYsaCxkLHA9KGMrMTYpLzExNixnPXArdS81MDAsdj1wLWwvMjAwLHk9ci5YVyplKGcpLG09ci5ZVyplKHApLGI9ci5aVyplKHYpO3IuWlc8MT8oZj0zLjEzMzkqeSstMS42MTcqbSstLjQ5MDYqYixoPS0uOTc4NSp5KzEuOTE2Km0rLjAzMzMqYixkPS4wNzIqeSstLjIyOSptKzEuNDA1NypiKTooZj0zLjI0MDYqeSstMS41MzcyKm0rLS40OTg2KmIsaD0tLjk2ODkqeSsxLjg3NTgqbSsuMDQxNSpiLGQ9LjA1NTcqeSstLjIwNCptKzEuMDU3KmIpLG9bc109MjU1Kk1hdGguc3FydChmKSxvW3MrMV09MjU1Kk1hdGguc3FydChoKSxvW3MrMl09MjU1Kk1hdGguc3FydChkKX1yZXR1cm4gZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PXUoYSk7ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89dC5jYWxsKHRoaXMsIkxhYiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWIiKTtpZihyPXJ8fFswLDAsMF0saT1pfHxbLTEwMCwxMDAsLTEwMCwxMDBdLG8uWFc9ZVswXSxvLllXPWVbMV0sby5aVz1lWzJdLG8uYW1pbj1pWzBdLG8uYW1heD1pWzFdLG8uYm1pbj1pWzJdLG8uYm1heD1pWzNdLG8uWEI9clswXSxvLllCPXJbMV0sby5aQj1yWzJdLG8uWFc8MHx8by5aVzwwfHwxIT09by5ZVyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihvLlhCPDB8fG8uWUI8MHx8by5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQiKSxvLlhCPW8uWUI9by5aQj0wKSwoby5hbWluPm8uYW1heHx8by5ibWluPm8uYm1heCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKSxvLmFtaW49LTEwMCxvLmFtYXg9MTAwLG8uYm1pbj0tMTAwLG8uYm1heD0xMDApLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cih0aGlzLGUsdCwhMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyxzKXtmb3IodmFyIGM9KDE8PG8pLTEsdT0wO3U8bjt1Kyspcih0aGlzLGUsdCxjLGEsaSksdCs9MyxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiEwfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fV0pLGF9KHkpfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXJ0aWFsRXZhbHVhdG9yPXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxNDUpLG89cigxMzQpLHM9cigxNjMpLGM9cigxNjcpLHU9cigxNjYpLGw9cigxNzApLGY9cigxNzkpLGg9cigxODApLGQ9cigxNzEpLHA9cigxODYpLGc9cigxNDYpLHY9cigxODgpLHk9cigxMzkpLG09cigxMzYpLGI9cigxODkpLHc9cigxNDMpLGs9cigxNDgpLFM9cigxNjgpLHg9cigxMzUpLE89cigxNzQpLEE9cigxNjkpLEM9cigxOTApLEY9cigxOTEpLFA9cigxOTIpO2Z1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8RChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fEQoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRSgpe0U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXt1KHt9LCIiKX1jYXRjaChlKXt1PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBsKGUsdCxyLG4pe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBDKG58fFtdKTtyZXR1cm4gYShvLCJfaW52b2tlIix7dmFsdWU6UyhlLHIscyl9KSxvfWZ1bmN0aW9uIGYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9bDt2YXIgaD17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTt1KHYsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoRihbXSkpKTttJiZtIT09dCYmci5jYWxsKG0sbykmJih2PW0pO3ZhciBiPWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gdyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gayhlLHQpe2Z1bmN0aW9uIGkoYSxvLHMsYyl7dmFyIHU9ZihlW2FdLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsaD1sLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09bihoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT90LnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87YSh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPXgobyxyKTtpZihzKXtpZihzPT09aCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWYoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09aCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24geChlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLHgoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksaDt2YXIgYT1mKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsaDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxoKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGgpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gQyhlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gRihlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpQfX1mdW5jdGlvbiBQKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxhKGIsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxhKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPXUoZyxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsdShlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYiksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sdyhrLnByb3RvdHlwZSksdShrLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1rLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgayhsKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LHcoYiksdShiLGMsIkdlbmVyYXRvciIpLHUoYixvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHUoYiwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1GLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsaCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxofSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksaH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6RihlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksaH19LGV9ZnVuY3Rpb24gaihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7aihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7aihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIF8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gUihlLHQscil7cmV0dXJuIHQmJkwoZS5wcm90b3R5cGUsdCksciYmTChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gTihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9RChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gRChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gQihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgVT1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITAsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksJD1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBYKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHIsbj1OKGUpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9WChyLnZhbHVlLCEwKTtpZihpKXJldHVybiBpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4oMCxhLndhcm4pKCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAiLmNvbmNhdChlKSksInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBvLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifXJldHVybiB0P251bGw6KCgwLGEud2FybikoIlVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICIuY29uY2F0KGUubmFtZSkpLCJzb3VyY2Utb3ZlciIpfWZ1bmN0aW9uIEgoZSl7ZS5mbj09PWEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmZS5hcmdzWzBdJiZlLmFyZ3NbMF0uY291bnQ+MCYmZS5hcmdzWzBdLmNvdW50Kyt9dmFyIHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gUihlLFt7a2V5OiJjaGVjayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCsrdGhpcy5jaGVja2VkPGUuQ0hFQ0tfVElNRV9FVkVSWSkmJih0aGlzLmNoZWNrZWQ9MCx0aGlzLmVuZFRpbWU8PURhdGUubm93KCkpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrZS5USU1FX1NMT1RfRFVSQVRJT05fTVMsdGhpcy5jaGVja2VkPTB9fV0sW3trZXk6IlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsMjApfX0se2tleToiQ0hFQ0tfVElNRV9FVkVSWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIkNIRUNLX1RJTUVfRVZFUlkiLDEwMCl9fV0pLGV9KCksRz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLG49dC5oYW5kbGVyLGE9dC5wYWdlSW5kZXgsaT10LmlkRmFjdG9yeSxvPXQuZm9udENhY2hlLHM9dC5idWlsdEluQ01hcENhY2hlLGM9dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsdT10Lmdsb2JhbEltYWdlQ2FjaGUsbD10Lm9wdGlvbnMsZj12b2lkIDA9PT1sP251bGw6bDtfKHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5oYW5kbGVyPW4sdGhpcy5wYWdlSW5kZXg9YSx0aGlzLmlkRmFjdG9yeT1pLHRoaXMuZm9udENhY2hlPW8sdGhpcy5idWlsdEluQ01hcENhY2hlPXMsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yyx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9dSx0aGlzLm9wdGlvbnM9Znx8VSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITEsdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpfXZhciB0LHIsbixnLHgsaixMLEQ7cmV0dXJuIFIoZSxbe2tleToiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bmV3IHAuUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfcGRmRnVuY3Rpb25GYWN0b3J5IixlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9T2JqZWN0LmNyZWF0ZSh0aGlzKTtyZXR1cm4gdC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSksdH19LHtrZXk6Imhhc0JsZW5kTW9kZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLm9iaklkJiZ0LmhhcyhlLm9iaklkKSlyZXR1cm4hMTt2YXIgcj1uZXcgby5SZWZTZXQodCk7ZS5vYmpJZCYmci5wdXQoZS5vYmpJZCk7Zm9yKHZhciBuPVtlXSxpPXRoaXMueHJlZjtuLmxlbmd0aDspe3ZhciBzPW4uc2hpZnQoKSxjPXMuZ2V0KCJFeHRHU3RhdGUiKTtpZihjIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgdSxsPU4oYy5nZXRSYXdWYWx1ZXMoKSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO2lmKGYgaW5zdGFuY2VvZiBvLlJlZil7aWYoci5oYXMoZikpY29udGludWU7dHJ5e2Y9aS5mZXRjaChmKX1jYXRjaChlKXtyLnB1dChmKSwoMCxhLmluZm8pKCdoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKGYgaW5zdGFuY2VvZiBvLkRpY3Qpe2Yub2JqSWQmJnIucHV0KGYub2JqSWQpO3ZhciBoPWYuZ2V0KCJCTSIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpe2lmKCJOb3JtYWwiIT09aC5uYW1lKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09aCYmQXJyYXkuaXNBcnJheShoKSl7dmFyIGQscD1OKGgpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lJiYiTm9ybWFsIiE9PWcubmFtZSlyZXR1cm4hMH19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfX12YXIgdj1zLmdldCgiWE9iamVjdCIpO2lmKHYgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB5LGI9Tih2LmdldFJhd1ZhbHVlcygpKTt0cnl7Zm9yKGIucygpOyEoeT1iLm4oKSkuZG9uZTspe3ZhciB3PXkudmFsdWU7aWYodyBpbnN0YW5jZW9mIG8uUmVmKXtpZihyLmhhcyh3KSljb250aW51ZTt0cnl7dz1pLmZldGNoKHcpfWNhdGNoKGUpe3IucHV0KHcpLCgwLGEuaW5mbykoJ2hhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKHcgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pe3cuZGljdC5vYmpJZCYmci5wdXQody5kaWN0Lm9iaklkKTt2YXIgaz13LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtrIGluc3RhbmNlb2Ygby5EaWN0JiYoay5vYmpJZCYmci5oYXMoay5vYmpJZCl8fChuLnB1c2goayksay5vYmpJZCYmci5wdXQoay5vYmpJZCkpKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19dmFyIFMseD1OKHIpO3RyeXtmb3IoeC5zKCk7IShTPXgubigpKS5kb25lOyl7dmFyIE89Uy52YWx1ZTt0LnB1dChPKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9cmV0dXJuITF9fSx7a2V5OiJmZXRjaEJ1aWx0SW5DTWFwIix2YWx1ZTooRD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXMuYnVpbHRJbkNNYXBDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscik7Y2FzZSAzOmlmKG51bGw9PT10aGlzLm9wdGlvbnMuY01hcFVybCl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBpPSIiLmNvbmNhdCh0aGlzLm9wdGlvbnMuY01hcFVybCkuY29uY2F0KHQsIi5iY21hcCIpLGUubmV4dD03LGZldGNoKGkpO2Nhc2UgNzppZigobz1lLnNlbnQpLm9rKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdmZXRjaEJ1aWx0SW5DTWFwOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoby5zdGF0dXNUZXh0LCciLicpKTtjYXNlIDEwOnJldHVybiBlLnQwPVVpbnQ4QXJyYXksZS5uZXh0PTEzLG8uYXJyYXlCdWZmZXIoKTtjYXNlIDEzOmUudDE9ZS5zZW50LGUudDI9bmV3IGUudDAoZS50MSksZS50Mz1hLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZLG49e2NNYXBEYXRhOmUudDIsY29tcHJlc3Npb25UeXBlOmUudDN9LGUubmV4dD0yMjticmVhaztjYXNlIDE5OnJldHVybiBlLm5leHQ9MjEsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCdWlsdEluQ01hcCIse25hbWU6dH0pO2Nhc2UgMjE6bj1lLnNlbnQ7Y2FzZSAyMjpyZXR1cm4gbi5jb21wcmVzc2lvblR5cGUhPT1hLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSYmdGhpcy5idWlsdEluQ01hcENhY2hlLnNldCh0LG4pLGUuYWJydXB0KCJyZXR1cm4iLG4pO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gRC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hTdGFuZGFyZEZvbnREYXRhIix2YWx1ZTooTD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvLHMsYztyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEocj10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IHkuU3RyZWFtKHIpKTtjYXNlIDM6aWYoIXRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250c3x8IlN5bWJvbCI9PT10fHwiWmFwZkRpbmdiYXRzIj09PXQpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6aWYobj0oMCxsLmdldEZvbnROYW1lVG9GaWxlTWFwKSgpLGk9blt0XSxudWxsPT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2UubmV4dD0yMDticmVha31yZXR1cm4gcz0iIi5jb25jYXQodGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpLmNvbmNhdChpKSxlLm5leHQ9MTAsZmV0Y2gocyk7Y2FzZSAxMDppZigoYz1lLnNlbnQpLm9rKXtlLm5leHQ9MTU7YnJlYWt9KDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQocywnIiB3aXRoICInKS5jb25jYXQoYy5zdGF0dXNUZXh0LCciLicpKSxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZS5uZXh0PTE3LGMuYXJyYXlCdWZmZXIoKTtjYXNlIDE3Om89ZS5zZW50O2Nhc2UgMTg6ZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjA6cmV0dXJuIGUucHJldj0yMCxlLm5leHQ9MjMsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIix7ZmlsZW5hbWU6aX0pO2Nhc2UgMjM6bz1lLnNlbnQsZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjY6ZS5wcmV2PTI2LGUudDA9ZS5jYXRjaCgyMCksKDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoZS50MCwnIi4nKSk7Y2FzZSAyOTppZihvKXtlLm5leHQ9MzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzE6cmV0dXJuIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLnNldCh0LG8pLGUuYWJydXB0KCJyZXR1cm4iLG5ldyB5LlN0cmVhbShvKSk7Y2FzZSAzMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIwLDI2XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiYnVpbGRGb3JtWE9iamVjdCIsdmFsdWU6KGo9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbixpLHMsYyx1KXt2YXIgbCxmLGgsZCxwLGcsdix5LG0sYixrO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobD1yLmRpY3QsZj1sLmdldEFycmF5KCJNYXRyaXgiKSxoPWwuZ2V0QXJyYXkoIkJCb3giKSxoPUFycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9hLlV0aWwubm9ybWFsaXplUmVjdChoKTpudWxsLCFsLmhhcygiT0MiKSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD03LHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMobC5nZXQoIk9DIiksdCk7Y2FzZSA3OmQ9ZS5zZW50O2Nhc2UgODppZih2b2lkIDAhPT1kJiZpLmFkZE9wKGEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSwhKGc9bC5nZXQoIkdyb3VwIikpKXtlLm5leHQ9Mjk7YnJlYWt9aWYocD17bWF0cml4OmYsYmJveDpoLHNtYXNrOm4saXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9LHY9Zy5nZXQoIlMiKSx5PW51bGwsISgwLG8uaXNOYW1lKSh2LCJUcmFuc3BhcmVuY3kiKSl7ZS5uZXh0PTI3O2JyZWFrfWlmKHAuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITEscC5rbm9ja291dD1nLmdldCgiSyIpfHwhMSwhZy5oYXMoIkNTIikpe2UubmV4dD0yNzticmVha31pZihtPWcuZ2V0UmF3KCJDUyIpLCEoYj13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKG0sdGhpcy54cmVmLHUpKSl7ZS5uZXh0PTI0O2JyZWFrfXk9YixlLm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gZS5uZXh0PTI2LHRoaXMucGFyc2VDb2xvclNwYWNlKHtjczptLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KTtjYXNlIDI2Onk9ZS5zZW50O2Nhc2UgMjc6biYmbi5iYWNrZHJvcCYmKHk9eXx8dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLG4uYmFja2Ryb3A9eS5nZXRSZ2Iobi5iYWNrZHJvcCwwKSksaS5hZGRPcChhLk9QUy5iZWdpbkdyb3VwLFtwXSk7Y2FzZSAyOTpyZXR1cm4gaz1nP1tmLG51bGxdOltmLGhdLGkuYWRkT3AoYS5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLGspLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8dCxvcGVyYXRvckxpc3Q6aSxpbml0aWFsU3RhdGU6Y30pLnRoZW4oKGZ1bmN0aW9uKCl7aS5hZGRPcChhLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKSxnJiZpLmFkZE9wKGEuT1BTLmVuZEdyb3VwLFtwXSksdm9pZCAwIT09ZCYmaS5hZGRPcChhLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKSk7Y2FzZSAzMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfc2VuZEltZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPXQ/W3QuYml0bWFwfHx0LmRhdGEuYnVmZmVyXTpudWxsO3JldHVybiB0aGlzLnBhcnNpbmdUeXBlM0ZvbnR8fHI/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW2UsIkltYWdlIix0XSxuKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbZSx0aGlzLnBhZ2VJbmRleCwiSW1hZ2UiLHRdLG4pfX0se2tleToiYnVpbGRQYWludEltYWdlWE9iamVjdCIsdmFsdWU6KHg9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGksbyxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHcsUyx4LE8sQSxDLEYsVCxJLGosTT10aGlzO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj10LnJlc291cmNlcyxuPXQuaW1hZ2UsaT10LmlzSW5saW5lLG89dm9pZCAwIT09aSYmaSxzPXQub3BlcmF0b3JMaXN0LGM9dC5jYWNoZUtleSx1PXQubG9jYWxJbWFnZUNhY2hlLGw9dC5sb2NhbENvbG9yU3BhY2VDYWNoZSxmPW4uZGljdCxoPWYub2JqSWQsZD1mLmdldCgiVyIsIldpZHRoIikscD1mLmdldCgiSCIsIkhlaWdodCIpLGQmJiJudW1iZXIiPT10eXBlb2YgZCYmcCYmIm51bWJlciI9PXR5cGVvZiBwKXtlLm5leHQ9ODticmVha31yZXR1cm4oMCxhLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA4OmlmKCEoLTEhPT0oZz10aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplKSYmZCpwPmcpKXtlLm5leHQ9MTU7YnJlYWt9aWYodj0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiIsIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe2UubmV4dD0xNDticmVha31yZXR1cm4oMCxhLndhcm4pKHYpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcih2KTtjYXNlIDE1OmlmKCFmLmhhcygiT0MiKSl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBlLm5leHQ9MTgsdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhmLmdldCgiT0MiKSxyKTtjYXNlIDE4Onk9ZS5zZW50O2Nhc2UgMTk6aWYoIWYuZ2V0KCJJTSIsIkltYWdlTWFzayIpKXtlLm5leHQ9NDQ7YnJlYWt9aWYodz1mLmdldCgiSSIsIkludGVycG9sYXRlIiksUz1kKzc+PjMseD1uLmdldEJ5dGVzKFMqcCksTz1mLmdldEFycmF5KCJEIiwiRGVjb2RlIiksIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7ZS5uZXh0PTMyO2JyZWFrfXJldHVybihtPVAuUERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6eCx3aWR0aDpkLGhlaWdodDpwLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOm4gaW5zdGFuY2VvZiBrLkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOiEhTyYmT1swXT4wLGludGVycG9sYXRlOnd9KSkuY2FjaGVkPSEhYyxiPVttXSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxiLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6YixvcHRpb25hbENvbnRlbnQ6eX0pLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDMyOmlmKCEobT1QLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5Ongsd2lkdGg6ZCxoZWlnaHQ6cCxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpuIGluc3RhbmNlb2Ygay5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTohIU8mJk9bMF0+MCxpbnRlcnBvbGF0ZTp3LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH0pKS5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtlLm5leHQ9Mzc7YnJlYWt9cmV0dXJuIHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLFtdLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLGFyZ3M6W10sb3B0aW9uYWxDb250ZW50Onl9KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzNzpyZXR1cm4gQT0ibWFza18iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxzLmFkZERlcGVuZGVuY3koQSksdGhpcy5fc2VuZEltZ0RhdGEoQSxtKSxiPVt7ZGF0YTpBLHdpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0LGludGVycG9sYXRlOm0uaW50ZXJwb2xhdGUsY291bnQ6MX1dLHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGIseSksYyYmdS5zZXQoYyxoLHtmbjphLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDQ6aWYoQz1mLmdldCgiU00iLCJTTWFzayIpfHwhMSxGPWYuZ2V0KCJNYXNrIil8fCExLCFvfHxDfHxGfHwhKGQrcDwyMDApKXtlLm5leHQ9NTI7YnJlYWt9cmV0dXJuIFQ9bmV3IFAuUERGSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KSxtPVQuY3JlYXRlSW1hZ2VEYXRhKCEwKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LFttXSx5KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA1MjpJPSJpbWdfIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKSksaj0hMSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/ST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiX3R5cGUzXyIpLmNvbmNhdChJKTpoJiYoaj10aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUoaCx0aGlzLnBhZ2VJbmRleCkpJiYoST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiXyIpLmNvbmNhdChJKSkscy5hZGREZXBlbmRlbmN5KEkpLGI9W0ksZCxwXSxQLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbT1lLmNyZWF0ZUltYWdlRGF0YSghMSksYyYmaCYmaiYmTS5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGgsbS5kYXRhLmxlbmd0aCksTS5fc2VuZEltZ0RhdGEoSSxtLGopfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdVbmFibGUgdG8gZGVjb2RlIGltYWdlICInLmNvbmNhdChJLCciOiAiJykuY29uY2F0KGUsJyIuJykpLE0uX3NlbmRJbWdEYXRhKEksbnVsbCxqKX0pKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGIseSksYyYmKHUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksaCYmKCgwLGEuYXNzZXJ0KSghbywiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGgsdGhpcy5wYWdlSW5kZXgpLGomJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGgse29iaklkOkksZm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5LGJ5dGVTaXplOjB9KSkpO2Nhc2UgNTk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFuZGxlU01hc2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1lLmdldCgiRyIpLHM9e3N1YnR5cGU6ZS5nZXQoIlMiKS5uYW1lLGJhY2tkcm9wOmUuZ2V0KCJCQyIpfSxjPWUuZ2V0KCJUUiIpO2lmKCgwLHAuaXNQREZGdW5jdGlvbikoYykpe2Zvcih2YXIgdT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGMpLGw9bmV3IFVpbnQ4QXJyYXkoMjU2KSxmPW5ldyBGbG9hdDMyQXJyYXkoMSksaD0wO2g8MjU2O2grKylmWzBdPWgvMjU1LHUoZiwwLGYsMCksbFtoXT0yNTUqZlswXXwwO3MudHJhbnNmZXJNYXA9bH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsbyxzLHIsbixhLnN0YXRlLmNsb25lKCksaSl9fSx7a2V5OiJoYW5kbGVUcmFuc2ZlckZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKGUpKXJldHVybiBudWxsO3Q9W2VdfXZhciByLG49W10sYT0wLGk9MCxzPU4odCk7dHJ5e2ZvcihzLnMoKTshKHI9cy5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoYSsrLCgwLG8uaXNOYW1lKSh1LCJJZGVudGl0eSIpKW4ucHVzaChudWxsKTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKHUpKXJldHVybiBudWxsO2Zvcih2YXIgbD10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHUpLGY9bmV3IFVpbnQ4QXJyYXkoMjU2KSxoPW5ldyBGbG9hdDMyQXJyYXkoMSksZD0wO2Q8MjU2O2QrKyloWzBdPWQvMjU1LGwoaCwwLGgsMCksZltkXT0yNTUqaFswXXwwO24ucHVzaChmKSxpKyt9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1yZXR1cm4gMSE9PWEmJjQhPT1hfHwwPT09aT9udWxsOm59fSx7a2V5OiJoYW5kbGVUaWxpbmdUeXBlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGkscyxjLHUpe3ZhciBsPXRoaXMsaD1uZXcgRi5PcGVyYXRvckxpc3QsZD1vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbaS5nZXQoIlJlc291cmNlcyIpLHJdfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOmMscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Omh9KS50aGVuKChmdW5jdGlvbigpe3ZhciByPWguZ2V0SVIoKSxuPSgwLGYuZ2V0VGlsaW5nUGF0dGVybklSKShyLGksdCk7cy5hZGREZXBlbmRlbmNpZXMoaC5kZXBlbmRlbmNpZXMpLHMuYWRkT3AoZSxuKSxpLm9iaklkJiZ1LnNldChudWxsLGkub2JqSWQse29wZXJhdG9yTGlzdElSOnIsZGljdDppfSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihsLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBsLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJufSksdm9pZCgwLGEud2FybikoJ2hhbmRsZVRpbGluZ1R5cGUgLSBpZ25vcmluZyBwYXR0ZXJuOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSl9fSx7a2V5OiJoYW5kbGVTZXRGb250Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksYyl7dmFyIHU9dGhpcyxsPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsLGY9YXJndW1lbnRzLmxlbmd0aD43JiZ2b2lkIDAhPT1hcmd1bWVudHNbN10/YXJndW1lbnRzWzddOm51bGwsaD10JiZ0WzBdaW5zdGFuY2VvZiBvLk5hbWU/dFswXS5uYW1lOm51bGw7cmV0dXJuIHRoaXMubG9hZEZvbnQoaCxyLGUsbCxmKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YSh1LGUsaSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbi5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyksdH0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkVHlwZTN9KSxuZXcgeih7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udCgiVHlwZTMgZm9udCBsb2FkIGVycm9yOiAiLmNvbmNhdChlKSksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp1Lm9wdGlvbnN9KX0pKTp0fSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjLmZvbnQ9ZS5mb250LGUuc2VuZCh1LmhhbmRsZXIpLGUubG9hZGVkTmFtZX0pKX19LHtrZXk6ImhhbmRsZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIG49ci5mb250LGk9bi5jaGFyc1RvR2x5cGhzKHQpO3JldHVybiBuLmRhdGEmJihyLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09ci5maWxsQ29sb3JTcGFjZS5uYW1lfHxuLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJmUuYnVpbGRGb250UGF0aHMobixpLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpLGl9fSx7a2V5OiJlbnN1cmVTdGF0ZUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlLmZvbnQpe3ZhciB0PW5ldyBhLkZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFN0YXRlfSksdm9pZCgwLGEud2FybikoJ2Vuc3VyZVN0YXRlRm9udDogIicuY29uY2F0KHQsJyIuJykpO3Rocm93IHR9fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTooZz1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPXQucmVzb3VyY2VzLG49dC5nU3RhdGUsaT10Lm9wZXJhdG9yTGlzdCxzPXQuY2FjaGVLZXksYz10LnRhc2ssdT10LnN0YXRlTWFuYWdlcixsPXQubG9jYWxHU3RhdGVDYWNoZSxmPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsaD1uLm9iaklkLGQ9ITAscD1bXSxnPVByb21pc2UucmVzb2x2ZSgpLHY9TihuLmdldEtleXMoKSk7dHJ5e2ZvcihtPWZ1bmN0aW9uKCl7dmFyIGU9eS52YWx1ZSx0PW4uZ2V0KGUpO3N3aXRjaChlKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6cC5wdXNoKFtlLHRdKTticmVhaztjYXNlIkZvbnQiOmQ9ITEsZz1nLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGIuaGFuZGxlU2V0Rm9udChyLG51bGwsdFswXSxpLGMsdS5zdGF0ZSkudGhlbigoZnVuY3Rpb24ocil7aS5hZGREZXBlbmRlbmN5KHIpLHAucHVzaChbZSxbcix0WzFdXV0pfSkpfSkpO2JyZWFrO2Nhc2UiQk0iOnAucHVzaChbZSxYKHQpXSk7YnJlYWs7Y2FzZSJTTWFzayI6aWYoKDAsby5pc05hbWUpKHQsIk5vbmUiKSl7cC5wdXNoKFtlLCExXSk7YnJlYWt9dCBpbnN0YW5jZW9mIG8uRGljdD8oZD0hMSxnPWcudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYi5oYW5kbGVTTWFzayh0LHIsaSxjLHUsZil9KSkscC5wdXNoKFtlLCEwXSkpOigwLGEud2FybikoIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIlRSIjp2YXIgcz1iLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odCk7cC5wdXNoKFtlLHNdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsYS5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2UpO2JyZWFrO2RlZmF1bHQ6KDAsYS5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZSl9fSx2LnMoKTshKHk9di5uKCkpLmRvbmU7KW0oKX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZy50aGVuKChmdW5jdGlvbigpe3AubGVuZ3RoPjAmJmkuYWRkT3AoYS5PUFMuc2V0R1N0YXRlLFtwXSksZCYmbC5zZXQocyxoLHApfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRGb250Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGksdT10aGlzLGw9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwsZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06bnVsbCxoPWZ1bmN0aW9uKCl7dmFyIGU9TShFKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyB6KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IHMuRXJyb3JGb250KCdGb250ICInLmNvbmNhdCh0LCciIGlzIG5vdCBhdmFpbGFibGUuJykpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPXRoaXMueHJlZjtpZihyKXIgaW5zdGFuY2VvZiBvLlJlZiYmKGk9cik7ZWxzZXt2YXIgcD1uLmdldCgiRm9udCIpO3AmJihpPXAuZ2V0UmF3KHQpKX1pZighaSl7dmFyIGc9J0ZvbnQgIicuY29uY2F0KHR8fHImJnIudG9TdHJpbmcoKSwnIiBpcyBub3QgYXZhaWxhYmxlJyk7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMmJiF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpcmV0dXJuKDAsYS53YXJuKSgiIi5jb25jYXQoZywiLiIpKSxoKCk7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3Npbmd9KSwoMCxhLndhcm4pKCIiLmNvbmNhdChnLCIgLS0gYXR0ZW1wdGluZyB0byBmYWxsYmFjayB0byBhIGRlZmF1bHQgZm9udC4iKSksaT1sfHxlLmZhbGxiYWNrRm9udERpY3R9aWYodGhpcy5wYXJzaW5nVHlwZTNGb250JiZ0aGlzLnR5cGUzRm9udFJlZnMuaGFzKGkpKXJldHVybiBoKCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoaSk7aWYoISgocj1kLmZldGNoSWZSZWYoaSkpaW5zdGFuY2VvZiBvLkRpY3QpKXJldHVybiBoKCk7aWYoci5jYWNoZUtleSYmdGhpcy5mb250Q2FjaGUuaGFzKHIuY2FjaGVLZXkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoci5jYWNoZUtleSk7dmFyIHYseT0oMCxhLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RyeXsodj10aGlzLnByZUV2YWx1YXRlRm9udChyKSkuY3NzRm9udEluZm89Zn1jYXRjaChlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkRm9udCAtIHByZUV2YWx1YXRlRm9udCBmYWlsZWQ6ICInLmNvbmNhdChlLCciLicpKSxoKCl9dmFyIG0sYj12LHc9Yi5kZXNjcmlwdG9yLGs9Yi5oYXNoLFM9aSBpbnN0YW5jZW9mIG8uUmVmO2lmKFMmJihtPSJmIi5jb25jYXQoaS50b1N0cmluZygpKSksayYmdyBpbnN0YW5jZW9mIG8uRGljdCl7dy5mb250QWxpYXNlc3x8KHcuZm9udEFsaWFzZXM9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHg9dy5mb250QWxpYXNlcztpZih4W2tdKXt2YXIgTz14W2tdLmFsaWFzUmVmO2lmKFMmJk8mJnRoaXMuZm9udENhY2hlLmhhcyhPKSlyZXR1cm4gdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaSxPKSx0aGlzLmZvbnRDYWNoZS5nZXQoaSl9ZWxzZSB4W2tdPXtmb250SUQ6dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCl9O1MmJih4W2tdLmFsaWFzUmVmPWkpLG09eFtrXS5mb250SUR9cmV0dXJuIFM/dGhpcy5mb250Q2FjaGUucHV0KGkseS5wcm9taXNlKToobXx8KG09dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCkpLHIuY2FjaGVLZXk9ImNhY2hlS2V5XyIuY29uY2F0KG0pLHRoaXMuZm9udENhY2hlLnB1dChyLmNhY2hlS2V5LHkucHJvbWlzZSkpLCgwLGEuYXNzZXJ0KShtJiZtLnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKSxyLmxvYWRlZE5hbWU9IiIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmdldERvY0lkKCksIl8iKS5jb25jYXQobSksdGhpcy50cmFuc2xhdGVGb250KHYpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuZm9udFR5cGUmJmQuc3RhdHMuYWRkRm9udFR5cGUoZS5mb250VHlwZSkseS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250OmUsZGljdDpyLGV2YWx1YXRvck9wdGlvbnM6dS5vcHRpb25zfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt1LmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250VHJhbnNsYXRlfSksKDAsYS53YXJuKSgnbG9hZEZvbnQgLSB0cmFuc2xhdGVGb250IGZhaWxlZDogIicuY29uY2F0KGUsJyIuJykpO3RyeXt2YXIgdD13JiZ3LmdldCgiRm9udEZpbGUzIiksbj10JiZ0LmdldCgiU3VidHlwZSIpLGk9KDAsYy5nZXRGb250VHlwZSkodi50eXBlLG4mJm4ubmFtZSk7dm9pZCAwIT09aSYmZC5zdGF0cy5hZGRGb250VHlwZShpKX1jYXRjaChlKXt9eS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250Om5ldyBzLkVycm9yRm9udChlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKX0pKSx5LnByb21pc2V9fSx7a2V5OiJidWlsZFBhdGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9ZS5sZW5ndGgtMTtpZihyfHwocj1bXSksaTwwfHxlLmZuQXJyYXlbaV0hPT1hLk9QUy5jb25zdHJ1Y3RQYXRoKXt2YXIgbztzd2l0Y2gobiYmKCgwLGEud2FybikoJ0VuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIicuY29uY2F0KHQsJyIgaW5zaWRlIG9mIGEgdGV4dCBvYmplY3QuJykpLGUuYWRkT3AoYS5PUFMuc2F2ZSxudWxsKSksdCl7Y2FzZSBhLk9QUy5yZWN0YW5nbGU6dmFyIHM9clswXStyWzJdLGM9clsxXStyWzNdO289W01hdGgubWluKHJbMF0scyksTWF0aC5tYXgoclswXSxzKSxNYXRoLm1pbihyWzFdLGMpLE1hdGgubWF4KHJbMV0sYyldO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmNhc2UgYS5PUFMubGluZVRvOm89W3JbMF0sclswXSxyWzFdLHJbMV1dO2JyZWFrO2RlZmF1bHQ6bz1bMS8wLC0xLzAsMS8wLC0xLzBdfWUuYWRkT3AoYS5PUFMuY29uc3RydWN0UGF0aCxbW3RdLHIsb10pLG4mJmUuYWRkT3AoYS5PUFMucmVzdG9yZSxudWxsKX1lbHNle3ZhciB1LGw9ZS5hcmdzQXJyYXlbaV07bFswXS5wdXNoKHQpLCh1PWxbMV0pLnB1c2guYXBwbHkodSxJKHIpKTt2YXIgZj1sWzJdO3N3aXRjaCh0KXtjYXNlIGEuT1BTLnJlY3RhbmdsZTp2YXIgaD1yWzBdK3JbMl0sZD1yWzFdK3JbM107ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0saCksZlsxXT1NYXRoLm1heChmWzFdLHJbMF0saCksZlsyXT1NYXRoLm1pbihmWzJdLHJbMV0sZCksZlszXT1NYXRoLm1heChmWzNdLHJbMV0sZCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0pLGZbMV09TWF0aC5tYXgoZlsxXSxyWzBdKSxmWzJdPU1hdGgubWluKGZbMl0sclsxXSksZlszXT1NYXRoLm1heChmWzNdLHJbMV0pfX19fSx7a2V5OiJwYXJzZUNvbG9yU3BhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmNzLG49ZS5yZXNvdXJjZXMsaT1lLmxvY2FsQ29sb3JTcGFjZUNhY2hlO3JldHVybiB3LkNvbG9yU3BhY2UucGFyc2VBc3luYyh7Y3M6cix4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6bixwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29sb3JTcGFjZX0pLCgwLGEud2FybikoJ3BhcnNlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6ICInLmNvbmNhdChlLCciLicpKSxudWxsO3Rocm93IGV9KSl9fSx7a2V5OiJwYXJzZVNoYWRpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc2hhZGluZyxyPWUucmVzb3VyY2VzLG49ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxhPWUubG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLGk9YS5nZXQodCk7aWYoIWkpe3ZhciBvPWYuUGF0dGVybi5wYXJzZVNoYWRpbmcodCx0aGlzLnhyZWYscix0aGlzLmhhbmRsZXIsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LG4pLmdldElSKCk7aT0icGF0dGVybl8iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxhLnNldCh0LGkpLHRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtpLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixvXSl9cmV0dXJuIGl9fSx7a2V5OiJoYW5kbGVDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4saSxzLGMsdSxsLGgpe3ZhciBkPXIucG9wKCk7aWYoZCBpbnN0YW5jZW9mIG8uTmFtZSl7dmFyIHA9aS5nZXRSYXcoZC5uYW1lKSxnPXAgaW5zdGFuY2VvZiBvLlJlZiYmbC5nZXRCeVJlZihwKTtpZihnKXRyeXt2YXIgdj1uLmJhc2U/bi5iYXNlLmdldFJnYihyLDApOm51bGwseT0oMCxmLmdldFRpbGluZ1BhdHRlcm5JUikoZy5vcGVyYXRvckxpc3RJUixnLmRpY3Qsdik7cmV0dXJuIHZvaWQgZS5hZGRPcCh0LHkpfWNhdGNoKGUpe312YXIgYj10aGlzLnhyZWYuZmV0Y2hJZlJlZihwKTtpZihiKXt2YXIgdz1iIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2IuZGljdDpiLGs9dy5nZXQoIlBhdHRlcm5UeXBlIik7aWYoMT09PWspe3ZhciBTPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKHIsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQsUyxzLGIsdyxlLGMsbCl9aWYoMj09PWspe3ZhciB4PXcuZ2V0KCJTaGFkaW5nIiksTz13LmdldEFycmF5KCJNYXRyaXgiKSxBPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOngscmVzb3VyY2VzOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6aH0pO3JldHVybiB2b2lkIGUuYWRkT3AodCxbIlNoYWRpbmciLEEsT10pfXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiLmNvbmNhdChrKSl9fXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5OYW1lOiAiLmNvbmNhdChkKSl9fSx7a2V5OiJfcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKCsrdD4xMCkoMCxhLndhcm4pKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtlbHNle3ZhciBuPWUubGVuZ3RoLGk9dGhpcy54cmVmLmZldGNoSWZSZWYoZVswXSk7aWYoIShuPDIpJiZpIGluc3RhbmNlb2Ygby5OYW1lKXtzd2l0Y2goaS5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOnIucHVzaChpLm5hbWUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQoMCxhLndhcm4pKCJJbnZhbGlkIG9wZXJhdG9yICIuY29uY2F0KGkubmFtZSwiIGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpKX1mb3IodmFyIHM9MTtzPG47cysrKXt2YXIgYz1lW3NdLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9W107ci5wdXNoKGwpLHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24odSx0LGwpfWVsc2UgYyBpbnN0YW5jZW9mIG8uUmVmJiZyLnB1c2goYy50b1N0cmluZygpKX19ZWxzZSgwLGEud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9fX0se2tleToicGFyc2VNYXJrZWRDb250ZW50UHJvcHMiLHZhbHVlOihuPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXt2YXIgbixpLHMsYyx1LGwsZixoLGQscDtyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEodCBpbnN0YW5jZW9mIG8uTmFtZSkpe2UubmV4dD01O2JyZWFrfWk9ci5nZXQoIlByb3BlcnRpZXMiKSxuPWkuZ2V0KHQubmFtZSksZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNTppZighKHQgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9OTticmVha31uPXQsZS5uZXh0PTEwO2JyZWFrO2Nhc2UgOTp0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTtjYXNlIDEwOmlmKCJPQ0ciIT09KHM9bi5nZXQoIlR5cGUiKS5uYW1lKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOm4ub2JqSWR9KTtjYXNlIDE1OmlmKCJPQ01EIiE9PXMpe2UubmV4dD0zMTticmVha31pZihjPW4uZ2V0KCJWRSIpLCFBcnJheS5pc0FycmF5KGMpKXtlLm5leHQ9MjI7YnJlYWt9aWYodT1bXSx0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGMsMCx1KSwhKHUubGVuZ3RoPjApKXtlLm5leHQ9MjI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOiJPQ01EIixleHByZXNzaW9uOnV9KTtjYXNlIDIyOmlmKGw9bi5nZXQoIk9DR3MiKSwhKEFycmF5LmlzQXJyYXkobCl8fGwgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9Mjk7YnJlYWt9aWYoZj1bXSxBcnJheS5pc0FycmF5KGwpKXtoPU4obCk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSxmLnB1c2gocC50b1N0cmluZygpKX1jYXRjaChlKXtoLmUoZSl9ZmluYWxseXtoLmYoKX19ZWxzZSBmLnB1c2gobC5vYmpJZCk7cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOnMsaWRzOmYscG9saWN5Om4uZ2V0KCJQIilpbnN0YW5jZW9mIG8uTmFtZT9uLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9KTtjYXNlIDI5OmlmKCEobCBpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOmwudG9TdHJpbmcoKX0pO2Nhc2UgMzE6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnN0cmVhbSxuPWUudGFzayxpPWUucmVzb3VyY2VzLHM9ZS5vcGVyYXRvckxpc3QsYz1lLmluaXRpYWxTdGF0ZSx1PXZvaWQgMD09PWM/bnVsbDpjLGw9ZS5mYWxsYmFja0ZvbnREaWN0LGY9dm9pZCAwPT09bD9udWxsOmw7aWYoaT1pfHxvLkRpY3QuZW1wdHksdT11fHxuZXcgWSwhcyl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTt2YXIgaD10aGlzLGQ9dGhpcy54cmVmLHA9ITEsZz1uZXcgdi5Mb2NhbEltYWdlQ2FjaGUseT1uZXcgdi5Mb2NhbENvbG9yU3BhY2VDYWNoZSxiPW5ldyB2LkxvY2FsR1N0YXRlQ2FjaGUsaz1uZXcgdi5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSxTPW5ldyBNYXAseD1pLmdldCgiWE9iamVjdCIpfHxvLkRpY3QuZW1wdHksTz1pLmdldCgiUGF0dGVybiIpfHxvLkRpY3QuZW1wdHksQT1uZXcgVyh1KSxDPW5ldyBLKHIsZCxBKSxGPW5ldyBxO2Z1bmN0aW9uIFAoZSl7Zm9yKHZhciB0PTAscj1DLnNhdmVkU3RhdGVzRGVwdGg7dDxyO3QrKylzLmFkZE9wKGEuT1BTLnJlc3RvcmUsW10pfXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBjPWZ1bmN0aW9uKG4pe1Byb21pc2UuYWxsKFtuLHMucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQscil9Y2F0Y2goZSl7cihlKX19KSxyKX07bi5lbnN1cmVOb3RUZXJtaW5hdGVkKCksRi5yZXNldCgpO2Zvcih2YXIgdSxsLHYsVCxFLGosTT17fTshKHU9Ri5jaGVjaygpKSYmKE0uYXJncz1udWxsLEMucmVhZChNKSk7KXt2YXIgXz1NLmFyZ3MsTD1NLmZuO3N3aXRjaCgwfEwpe2Nhc2UgYS5PUFMucGFpbnRYT2JqZWN0OmlmKGo9X1swXWluc3RhbmNlb2Ygby5OYW1lLEU9X1swXS5uYW1lLGope3ZhciBSPWcuZ2V0QnlOYW1lKEUpO2lmKFIpe3MuYWRkSW1hZ2VPcHMoUi5mbixSLmFyZ3MsUi5vcHRpb25hbENvbnRlbnQpLEgoUiksXz1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBjKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFqKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTt2YXIgcj14LmdldFJhdyhFKTtpZihyIGluc3RhbmNlb2Ygby5SZWYpe3ZhciBjPWcuZ2V0QnlSZWYocik7aWYoYylyZXR1cm4gcy5hZGRJbWFnZU9wcyhjLmZuLGMuYXJncyxjLm9wdGlvbmFsQ29udGVudCksSChjKSx2b2lkIGUoKTt2YXIgdT1oLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShyLGgucGFnZUluZGV4KTtpZih1KXJldHVybiBzLmFkZERlcGVuZGVuY3kodS5vYmpJZCkscy5hZGRJbWFnZU9wcyh1LmZuLHUuYXJncyx1Lm9wdGlvbmFsQ29udGVudCksdm9pZCBlKCk7cj1kLmZldGNoKHIpfWlmKCEociBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7dmFyIGw9ci5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEobCBpbnN0YW5jZW9mIG8uTmFtZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSI9PT1sLm5hbWUpcmV0dXJuIEEuc2F2ZSgpLHZvaWQgaC5idWlsZEZvcm1YT2JqZWN0KGkscixudWxsLHMsbixBLnN0YXRlLmNsb25lKCkseSkudGhlbigoZnVuY3Rpb24oKXtBLnJlc3RvcmUoKSxlKCl9KSx0KTtpZigiSW1hZ2UiIT09bC5uYW1lKXtpZigiUFMiIT09bC5uYW1lKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KGwubmFtZSkpOygwLGEuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpyLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3R9KSx2b2lkKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogIicuY29uY2F0KGUsJyIuJykpO3Rocm93IGV9fSkpKTtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIEQ9X1sxXTtyZXR1cm4gdm9pZCBjKGguaGFuZGxlU2V0Rm9udChpLF8sbnVsbCxzLG4sQS5zdGF0ZSxmKS50aGVuKChmdW5jdGlvbihlKXtzLmFkZERlcGVuZGVuY3koZSkscy5hZGRPcChhLk9QUy5zZXRGb250LFtlLERdKX0pKSk7Y2FzZSBhLk9QUy5iZWdpblRleHQ6cD0hMDticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6cD0hMTticmVhaztjYXNlIGEuT1BTLmVuZElubGluZUltYWdlOnZhciBCPV9bMF0uY2FjaGVLZXk7aWYoQil7dmFyIFU9Zy5nZXRCeU5hbWUoQik7aWYoVSl7cy5hZGRJbWFnZU9wcyhVLmZuLFUuYXJncyxVLm9wdGlvbmFsQ29udGVudCksSChVKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMoaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpfWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkIsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pKTtjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFBLnN0YXRlLmZvbnQpe2guZW5zdXJlU3RhdGVGb250KEEuc3RhdGUpO2NvbnRpbnVlfV9bMF09aC5oYW5kbGVUZXh0KF9bMF0sQS5zdGF0ZSk7YnJlYWs7Y2FzZSBhLk9QUy5zaG93U3BhY2VkVGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX12YXIgWCxxPVtdLEc9QS5zdGF0ZSx6PU4oX1swXSk7dHJ5e2Zvcih6LnMoKTshKFg9ei5uKCkpLmRvbmU7KXt2YXIgVyxWPVgudmFsdWU7InN0cmluZyI9PXR5cGVvZiBWPyhXPXEpLnB1c2guYXBwbHkoVyxJKGguaGFuZGxlVGV4dChWLEcpKSk6Im51bWJlciI9PXR5cGVvZiBWJiZxLnB1c2goVil9fWNhdGNoKGUpe3ouZShlKX1maW5hbGx5e3ouZigpfV9bMF09cSxMPWEuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmVTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxzLmFkZE9wKGEuT1BTLnNldFdvcmRTcGFjaW5nLFtfLnNoaWZ0KCldKSxzLmFkZE9wKGEuT1BTLnNldENoYXJTcGFjaW5nLFtfLnNoaWZ0KCldKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpBLnN0YXRlLnRleHRSZW5kZXJpbmdNb2RlPV9bMF07YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTp2YXIgWT13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihZKXtBLnN0YXRlLmZpbGxDb2xvclNwYWNlPVk7Y29udGludWV9cmV0dXJuIHZvaWQgYyhoLnBhcnNlQ29sb3JTcGFjZSh7Y3M6X1swXSxyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5fSkudGhlbigoZnVuY3Rpb24oZSl7ZSYmKEEuc3RhdGUuZmlsbENvbG9yU3BhY2U9ZSl9KSkpO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp2YXIgSz13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihLKXtBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Sztjb250aW51ZX1yZXR1cm4gdm9pZCBjKGgucGFyc2VDb2xvclNwYWNlKHtjczpfWzBdLHJlc291cmNlczppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnl9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoQS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWUpfSkpKTtjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpfPShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3I6Xz0oVD1BLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsR3JheTpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlR3JheTpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6QS5zdGF0ZS5maWxsQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLF89dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ayxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoXywwKTticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZVJHQkNvbG9yOkEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IsXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKF8sMCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLm5hbWUpcmV0dXJuIHZvaWQgYyhoLmhhbmRsZUNvbG9yTihzLGEuT1BTLnNldEZpbGxDb2xvck4sXyxULE8saSxuLHksayxTKSk7Xz1ULmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkubmFtZSlyZXR1cm4gdm9pZCBjKGguaGFuZGxlQ29sb3JOKHMsYS5PUFMuc2V0U3Ryb2tlQ29sb3JOLF8sVCxPLGksbix5LGssUykpO189VC5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2hhZGluZ0ZpbGw6dmFyIEo9aS5nZXQoIlNoYWRpbmciKTtpZighSil0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO3ZhciBaPUouZ2V0KF9bMF0ubmFtZSk7aWYoIVopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIik7Xz1baC5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6WixyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5LGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpTfSldLEw9YS5PUFMuc2hhZGluZ0ZpbGw7YnJlYWs7Y2FzZSBhLk9QUy5zZXRHU3RhdGU6aWYoaj1fWzBdaW5zdGFuY2VvZiBvLk5hbWUsRT1fWzBdLm5hbWUsail7dmFyIFE9Yi5nZXRCeU5hbWUoRSk7aWYoUSl7US5sZW5ndGg+MCYmcy5hZGRPcChhLk9QUy5zZXRHU3RhdGUsW1FdKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBjPXIuZ2V0KEUpO2lmKCEoYyBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2guc2V0R1N0YXRlKHtyZXNvdXJjZXM6aSxnU3RhdGU6YyxvcGVyYXRvckxpc3Q6cyxjYWNoZUtleTpFLHRhc2s6bixzdGF0ZU1hbmFnZXI6QSxsb2NhbEdTdGF0ZUNhY2hlOmIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckV4dEdTdGF0ZX0pLHZvaWQoMCxhLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICInLmNvbmNhdChlLCciLicpKTt0aHJvdyBlfX0pKSk7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86Y2FzZSBhLk9QUy5jdXJ2ZVRvOmNhc2UgYS5PUFMuY3VydmVUbzI6Y2FzZSBhLk9QUy5jdXJ2ZVRvMzpjYXNlIGEuT1BTLmNsb3NlUGF0aDpjYXNlIGEuT1BTLnJlY3RhbmdsZTpoLmJ1aWxkUGF0aChzLEwsXyxwKTtjb250aW51ZTtjYXNlIGEuT1BTLm1hcmtQb2ludDpjYXNlIGEuT1BTLm1hcmtQb2ludFByb3BzOmNhc2UgYS5PUFMuYmVnaW5Db21wYXQ6Y2FzZSBhLk9QUy5lbmRDb21wYXQ6Y29udGludWU7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZighKF9bMF1pbnN0YW5jZW9mIG8uTmFtZSkpeygwLGEud2FybikoIkV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9Ii5jb25jYXQoX1swXSkpO2NvbnRpbnVlfWlmKCJPQyI9PT1fWzBdLm5hbWUpcmV0dXJuIHZvaWQgYyhoLnBhcnNlTWFya2VkQ29udGVudFByb3BzKF9bMV0saSkudGhlbigoZnVuY3Rpb24oZSl7cy5hZGRPcChhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihoLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBoLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50fSksdm9pZCgwLGEud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSkpO189W19bMF0ubmFtZSxfWzFdaW5zdGFuY2VvZiBvLkRpY3Q/X1sxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpjYXNlIGEuT1BTLmVuZE1hcmtlZENvbnRlbnQ6ZGVmYXVsdDppZihudWxsIT09Xyl7Zm9yKGw9MCx2PV8ubGVuZ3RoO2w8diYmIShfW2xdaW5zdGFuY2VvZiBvLkRpY3QpO2wrKyk7aWYobDx2KXsoMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIitMKTtjb250aW51ZX19fXMuYWRkT3AoTCxfKX11P2MoJCk6KFAoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0fSksKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQobi5uYW1lLCciICcpKyd0YXNrOiAiJy5jb25jYXQoZSwnIi4nKSksdm9pZCBQKCk7dGhyb3cgZX19KSl9fSx7a2V5OiJnZXRUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLG49ZS50YXNrLGk9ZS5yZXNvdXJjZXMscz1lLnN0YXRlTWFuYWdlcixjPXZvaWQgMD09PXM/bnVsbDpzLHU9ZS5jb21iaW5lVGV4dEl0ZW1zLGw9dm9pZCAwIT09dSYmdSxmPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaD12b2lkIDAhPT1mJiZmLGQ9ZS5zaW5rLHA9ZS5zZWVuU3R5bGVzLGc9dm9pZCAwPT09cD9uZXcgU2V0OnAseT1lLnZpZXdCb3gsdz1lLm1hcmtlZENvbnRlbnREYXRhLGs9dm9pZCAwPT09dz9udWxsOnc7aT1pfHxvLkRpY3QuZW1wdHksYz1jfHxuZXcgVyhuZXcgViksaCYmKGs9a3x8e2xldmVsOjB9KTt2YXIgUz17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9LHg9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sTz1bIiAiLCIgIl0sQT0wO2Z1bmN0aW9uIEMoZSl7dmFyIHQ9KEErMSklMixyPSIgIiE9PU9bQV0mJiIgIj09PU9bdF07cmV0dXJuIE9bQV09ZSxBPXQscn1mdW5jdGlvbiBGKCl7T1swXT1PWzFdPSIgIixBPTB9dmFyIFAsST0uMSxFPS4wMyxqPS0uMixNPS4xLF89LjYsTD10aGlzLFI9dGhpcy54cmVmLE49W10sRD1udWxsLEI9bmV3IHYuTG9jYWxJbWFnZUNhY2hlLFU9bmV3IHYuTG9jYWxHU3RhdGVDYWNoZSxYPW5ldyBLKHIsUixjKTtmdW5jdGlvbiBIKCl7dmFyIGU9UC5mb250LHQ9W1AuZm9udFNpemUqUC50ZXh0SFNjYWxlLDAsMCxQLmZvbnRTaXplLDAsUC50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKFAuZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxhLmlzQXJyYXlFcXVhbCkoUC5mb250TWF0cml4LGEuRk9OVF9JREVOVElUWV9NQVRSSVgpKXt2YXIgcj1lLmJib3hbM10tZS5iYm94WzFdO3I+MCYmKHRbM10qPXIqUC5mb250TWF0cml4WzNdKX1yZXR1cm4gYS5VdGlsLnRyYW5zZm9ybShQLmN0bSxhLlV0aWwudHJhbnNmb3JtKFAudGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gRygpe2lmKHguaW5pdGlhbGl6ZWQpcmV0dXJuIHg7dmFyIGU9UCx0PWUuZm9udCxyPWUubG9hZGVkTmFtZTtnLmhhcyhyKXx8KGcuYWRkKHIpLFMuc3R5bGVzW3JdPXtmb250RmFtaWx5OnQuZmFsbGJhY2tOYW1lLGFzY2VudDp0LmFzY2VudCxkZXNjZW50OnQuZGVzY2VudCx2ZXJ0aWNhbDp0LnZlcnRpY2FsfSkseC5mb250TmFtZT1yO3ZhciBuPXgudHJhbnNmb3JtPUgoKTt0LnZlcnRpY2FsPyh4LndpZHRoPXgudG90YWxXaWR0aD1NYXRoLmh5cG90KG5bMF0sblsxXSkseC5oZWlnaHQ9eC50b3RhbEhlaWdodD0wLHgudmVydGljYWw9ITApOih4LndpZHRoPXgudG90YWxXaWR0aD0wLHguaGVpZ2h0PXgudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChuWzJdLG5bM10pLHgudmVydGljYWw9ITEpO3ZhciBhPU1hdGguaHlwb3QoUC50ZXh0TGluZU1hdHJpeFswXSxQLnRleHRMaW5lTWF0cml4WzFdKSxpPU1hdGguaHlwb3QoUC5jdG1bMF0sUC5jdG1bMV0pO3JldHVybiB4LnRleHRBZHZhbmNlU2NhbGU9aSphLHgudHJhY2tpbmdTcGFjZU1pbj1QLmZvbnRTaXplKkkseC5ub3RBU3BhY2U9UC5mb250U2l6ZSpFLHgubmVnYXRpdmVTcGFjZU1heD1QLmZvbnRTaXplKmoseC5zcGFjZUluRmxvd01pbj1QLmZvbnRTaXplKk0seC5zcGFjZUluRmxvd01heD1QLmZvbnRTaXplKl8seC5oYXNFT0w9ITEseC5pbml0aWFsaXplZD0hMCx4fWZ1bmN0aW9uIHooKXtpZih4LmluaXRpYWxpemVkKXt2YXIgZT1NYXRoLmh5cG90KFAudGV4dExpbmVNYXRyaXhbMF0sUC50ZXh0TGluZU1hdHJpeFsxXSksdD1NYXRoLmh5cG90KFAuY3RtWzBdLFAuY3RtWzFdKSplO3QhPT14LnRleHRBZHZhbmNlU2NhbGUmJih4LnZlcnRpY2FsPyh4LnRvdGFsSGVpZ2h0Kz14LmhlaWdodCp4LnRleHRBZHZhbmNlU2NhbGUseC5oZWlnaHQ9MCk6KHgudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUseC53aWR0aD0wKSx4LnRleHRBZHZhbmNlU2NhbGU9dCl9fWZ1bmN0aW9uIFkoZSx0KXtyZXR1cm4gTC5sb2FkRm9udChlLHQsaSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udC5pc1R5cGUzRm9udD9lLmxvYWRUeXBlM0RhdGEoTCxpLG4pLmNhdGNoKChmdW5jdGlvbigpe30pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpOmV9KSkudGhlbigoZnVuY3Rpb24oZSl7UC5sb2FkZWROYW1lPWUubG9hZGVkTmFtZSxQLmZvbnQ9ZS5mb250LFAuZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBKKGUsdCxyKXt2YXIgbj1NYXRoLmh5cG90KHJbMF0sclsxXSk7cmV0dXJuWyhyWzBdKmUrclsxXSp0KS9uLChyWzJdKmUrclszXSp0KS9uXX1mdW5jdGlvbiBaKCl7dmFyIGU9SCgpLHQ9ZVs0XSxyPWVbNV0sbj10LXlbMF0sYT1yLXlbMV07aWYobjwwfHxuPnlbMl18fGE8MHx8YT55WzNdKXJldHVybiExO2lmKCFsfHwhUC5mb250fHwheC5wcmV2VHJhbnNmb3JtKXJldHVybiEwO3ZhciBpPXgucHJldlRyYW5zZm9ybVs0XSxvPXgucHJldlRyYW5zZm9ybVs1XTtpZihpPT09dCYmbz09PXIpcmV0dXJuITA7dmFyIHM9LTE7c3dpdGNoKGVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXT9zPWVbMF0+MD8wOjE4MDplWzFdJiYwPT09ZVswXSYmMD09PWVbM10mJihzPWVbMV0+MD85MDoyNzApLHMpe2Nhc2UgMDpicmVhaztjYXNlIDkwOnZhciBjPVtyLHRdO3Q9Y1swXSxyPWNbMV07dmFyIHU9W28saV07aT11WzBdLG89dVsxXTticmVhaztjYXNlIDE4MDp2YXIgZj1bLXQsLXIsLWksLW9dO3Q9ZlswXSxyPWZbMV0saT1mWzJdLG89ZlszXTticmVhaztjYXNlIDI3MDp2YXIgaD1bLXIsLXRdO3Q9aFswXSxyPWhbMV07dmFyIGQ9Wy1vLC1pXTtpPWRbMF0sbz1kWzFdO2JyZWFrO2RlZmF1bHQ6dmFyIHA9VChKKHQscixlKSwyKTt0PXBbMF0scj1wWzFdO3ZhciBnPVQoSihpLG8seC5wcmV2VHJhbnNmb3JtKSwyKTtpPWdbMF0sbz1nWzFdfWlmKFAuZm9udC52ZXJ0aWNhbCl7dmFyIHY9KG8tcikveC50ZXh0QWR2YW5jZVNjYWxlLG09dC1pLGI9TWF0aC5zaWduKHguaGVpZ2h0KTtyZXR1cm4gdjxiKngubmVnYXRpdmVTcGFjZU1heD9NYXRoLmFicyhtKT4uNSp4LndpZHRoPyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKG0pPngud2lkdGg/KGVlKCksITApOih2PD1iKngubm90QVNwYWNlJiZGKCksdjw9Yip4LnRyYWNraW5nU3BhY2VNaW4/eC5oZWlnaHQrPXY6dGUodix4LnByZXZUcmFuc2Zvcm0sYil8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDpNYXRoLmFicyh2KSx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOnguaGVpZ2h0Kz12KSwhMCl9dmFyIHc9KHQtaSkveC50ZXh0QWR2YW5jZVNjYWxlLGs9ci1vLE89TWF0aC5zaWduKHgud2lkdGgpO3JldHVybiB3PE8qeC5uZWdhdGl2ZVNwYWNlTWF4P01hdGguYWJzKGspPi41KnguaGVpZ2h0PyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKGspPnguaGVpZ2h0PyhlZSgpLCEwKToodzw9Typ4Lm5vdEFTcGFjZSYmRigpLHc8PU8qeC50cmFja2luZ1NwYWNlTWluP3gud2lkdGgrPXc6dGUodyx4LnByZXZUcmFuc2Zvcm0sTyl8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDpNYXRoLmFicyh3KSxoZWlnaHQ6MCx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOngud2lkdGgrPXcpLCEwKX1mdW5jdGlvbiBRKGUpe3ZhciB0PWUuY2hhcnMscj1lLmV4dHJhU3BhY2luZyxuPVAuZm9udDtpZih0KWZvcih2YXIgYT1uLmNoYXJzVG9HbHlwaHModCksaT1QLmZvbnRNYXRyaXhbMF0qUC5mb250U2l6ZSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1hW29dLHU9Yy5jYXRlZ29yeTtpZighdS5pc0ludmlzaWJsZUZvcm1hdE1hcmspe3ZhciBsPVAuY2hhclNwYWNpbmcrKG8rMT09PXM/cjowKSxmPWMud2lkdGg7bi52ZXJ0aWNhbCYmKGY9Yy52bWV0cmljP2Mudm1ldHJpY1swXTotZik7dmFyIGg9ZippO2lmKHUuaXNXaGl0ZXNwYWNlKW4udmVydGljYWw/KGwrPS1oK1Aud29yZFNwYWNpbmcsUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWwpKToobCs9aCtQLndvcmRTcGFjaW5nLFAudHJhbnNsYXRlVGV4dE1hdHJpeChsKlAudGV4dEhTY2FsZSwwKSksQygiICIpO2Vsc2UgaWYoWigpKXt2YXIgZD1HKCk7dS5pc1plcm9XaWR0aERpYWNyaXRpYyYmKGg9MCksbi52ZXJ0aWNhbD8oUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsaCksaD1NYXRoLmFicyhoKSxkLmhlaWdodCs9aCk6KGgqPVAudGV4dEhTY2FsZSxQLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCwwKSxkLndpZHRoKz1oKSxoJiYoZC5wcmV2VHJhbnNmb3JtPUgoKSk7dmFyIHA9Yy5ub3JtYWxpemVkVW5pY29kZTtDKHApJiZkLnN0ci5wdXNoKCIgIiksZC5zdHIucHVzaChwKSxsJiYobi52ZXJ0aWNhbD9QLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtbCk6UC50cmFuc2xhdGVUZXh0TWF0cml4KGwqUC50ZXh0SFNjYWxlLDApKX19fWVsc2V7dmFyIGc9UC5jaGFyU3BhY2luZytyO2cmJihuLnZlcnRpY2FsP1AudHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1nKTpQLnRyYW5zbGF0ZVRleHRNYXRyaXgoZypQLnRleHRIU2NhbGUsMCkpfX1mdW5jdGlvbiBlZSgpe0YoKSx4LmluaXRpYWxpemVkPyh4Lmhhc0VPTD0hMCxyZSgpKTpTLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06SCgpLGZvbnROYW1lOlAubG9hZGVkTmFtZSxoYXNFT0w6ITB9KX1mdW5jdGlvbiB0ZShlLHQscil7aWYocip4LnNwYWNlSW5GbG93TWluPD1lJiZlPD1yKnguc3BhY2VJbkZsb3dNYXgpcmV0dXJuIHguaW5pdGlhbGl6ZWQmJihGKCkseC5zdHIucHVzaCgiICIpKSwhMTt2YXIgbj14LmZvbnROYW1lLGE9MDtyZXR1cm4geC52ZXJ0aWNhbCYmKGE9ZSxlPTApLHJlKCksRigpLFMuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6TWF0aC5hYnMoZSksaGVpZ2h0Ok1hdGguYWJzKGEpLHRyYW5zZm9ybTp0fHxIKCksZm9udE5hbWU6bixoYXNFT0w6ITF9KSwhMH1mdW5jdGlvbiByZSgpe3ZhciBlLHQscjt4LmluaXRpYWxpemVkJiZ4LnN0ciYmKHgudmVydGljYWw/eC50b3RhbEhlaWdodCs9eC5oZWlnaHQqeC50ZXh0QWR2YW5jZVNjYWxlOngudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUsUy5pdGVtcy5wdXNoKCh0PShlPXgpLnN0ci5qb2luKCIiKSx7c3RyOihyPSgwLGIuYmlkaSkodCwtMSxlLnZlcnRpY2FsKSkuc3RyLGRpcjpyLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9KSkseC5pbml0aWFsaXplZD0hMSx4LnN0ci5sZW5ndGg9MCl9ZnVuY3Rpb24gbmUoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9Uy5pdGVtcy5sZW5ndGg7MCE9PXQmJihlJiZ0PDEwfHwoZC5lbnF1ZXVlKFMsdCksUy5pdGVtcz1bXSxTLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpKSl9dmFyIGFlPW5ldyBxO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBzPWZ1bmN0aW9uKG4pe25lKCEwKSxQcm9taXNlLmFsbChbbixkLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSh0LHIpfWNhdGNoKGUpe3IoZSl9fSkscil9O24uZW5zdXJlTm90VGVybWluYXRlZCgpLGFlLnJlc2V0KCk7Zm9yKHZhciB1LGY9e30scD1bXTshKHU9YWUuY2hlY2soKSkmJihwLmxlbmd0aD0wLGYuYXJncz1wLFgucmVhZChmKSk7KXtQPWMuc3RhdGU7dmFyIHY9Zi5mbjtzd2l0Y2gocD1mLmFyZ3MsMHx2KXtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIGI9cFswXS5uYW1lLHc9cFsxXTtpZihQLmZvbnQmJmI9PT1QLmZvbnROYW1lJiZ3PT09UC5mb250U2l6ZSlicmVhaztyZXR1cm4gcmUoKSxQLmZvbnROYW1lPWIsUC5mb250U2l6ZT13LHZvaWQgcyhZKGIsbnVsbCkpO2Nhc2UgYS5PUFMuc2V0VGV4dFJpc2U6UC50ZXh0UmlzZT1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0SFNjYWxlOlAudGV4dEhTY2FsZT1wWzBdLzEwMDticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6UC5sZWFkaW5nPXBbMF07YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDpQLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KHBbMF0scFsxXSksUC50ZXh0TWF0cml4PVAudGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpQLmxlYWRpbmc9LXBbMV0sUC50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0pLFAudGV4dE1hdHJpeD1QLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZTpQLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0TWF0cml4OlAuc2V0VGV4dE1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSksUC5zZXRUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSkseigpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0Q2hhclNwYWNpbmc6UC5jaGFyU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6UC53b3JkU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuYmVnaW5UZXh0OlAudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLFAudGV4dExpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNob3dTcGFjZWRUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfWZvcih2YXIgeD0oUC5mb250LnZlcnRpY2FsPzE6LTEpKlAuZm9udFNpemUvMWUzLE89cFswXSxBPTAsQz1PLmxlbmd0aDtBPEMtMTtBKyspe3ZhciBGPU9bQV07aWYoInN0cmluZyI9PXR5cGVvZiBGKU4ucHVzaChGKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgRiYmMCE9PUYpe3ZhciBUPU4uam9pbigiIik7Ti5sZW5ndGg9MCxRKHtjaGFyczpULGV4dHJhU3BhY2luZzpGKnh9KX19dmFyIEk9Ty5hdCgtMSk7aWYoInN0cmluZyI9PXR5cGVvZiBJJiZOLnB1c2goSSksTi5sZW5ndGg+MCl7dmFyIEU9Ti5qb2luKCIiKTtOLmxlbmd0aD0wLFEoe2NoYXJzOkUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIWMuc3RhdGUuZm9udCl7TC5lbnN1cmVTdGF0ZUZvbnQoYy5zdGF0ZSk7Y29udGludWV9UC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVAud29yZFNwYWNpbmc9cFswXSxQLmNoYXJTcGFjaW5nPXBbMV0sUC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMl0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLnBhaW50WE9iamVjdDpyZSgpLER8fChEPWkuZ2V0KCJYT2JqZWN0Iil8fG8uRGljdC5lbXB0eSk7dmFyIGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lO2lmKGomJkIuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO3ZhciByPUQuZ2V0UmF3KE0pO2lmKHIgaW5zdGFuY2VvZiBvLlJlZil7aWYoQi5nZXRCeVJlZihyKSlyZXR1cm4gdm9pZCBlKCk7aWYoTC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEocixMLnBhZ2VJbmRleCkpcmV0dXJuIHZvaWQgZSgpO3I9Ui5mZXRjaChyKX1pZighKHIgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO3ZhciBzPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKHMgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09cy5uYW1lKXJldHVybiBCLnNldChNLHIuZGljdC5vYmpJZCwhMCksdm9pZCBlKCk7dmFyIHU9Yy5zdGF0ZS5jbG9uZSgpLGY9bmV3IFcodSkscD1yLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpO0FycmF5LmlzQXJyYXkocCkmJjY9PT1wLmxlbmd0aCYmZi50cmFuc2Zvcm0ocCksbmUoKTt2YXIgdj17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITAsZC5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBkLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gZC5yZWFkeX19O0wuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6bixyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fGksc3RhdGVNYW5hZ2VyOmYsY29tYmluZVRleHRJdGVtczpsLGluY2x1ZGVNYXJrZWRDb250ZW50Omgsc2luazp2LHNlZW5TdHlsZXM6Zyx2aWV3Qm94OnksbWFya2VkQ29udGVudERhdGE6a30pLnRoZW4oKGZ1bmN0aW9uKCl7di5lbnF1ZXVlSW52b2tlZHx8Qi5zZXQoTSxyLmRpY3Qub2JqSWQsITApLGUoKX0pLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYoIUwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIFhPYmplY3Q6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmlmKGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lLGomJlUuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBuPXIuZ2V0KE0pO2lmKCEobiBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBzPW4uZ2V0KCJGb250Iik7aWYoIXMpcmV0dXJuIFUuc2V0KE0sbi5vYmpJZCwhMCksdm9pZCBlKCk7cmUoKSxQLmZvbnROYW1lPW51bGwsUC5mb250U2l6ZT1zWzFdLFkobnVsbCxzWzBdKS50aGVuKGUsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZighTC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSl9fSkpKTtjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpyZSgpLGgmJihrLmxldmVsKyssUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpwWzBdaW5zdGFuY2VvZiBvLk5hbWU/cFswXS5uYW1lOm51bGx9KSk7YnJlYWs7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZihyZSgpLGgpe2subGV2ZWwrKzt2YXIgXz1udWxsO3BbMV1pbnN0YW5jZW9mIG8uRGljdCYmKF89cFsxXS5nZXQoIk1DSUQiKSksUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihfKT8iIi5jb25jYXQoTC5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCksIl9tY2lkIikuY29uY2F0KF8pOm51bGwsdGFnOnBbMF1pbnN0YW5jZW9mIG8uTmFtZT9wWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2UgYS5PUFMuZW5kTWFya2VkQ29udGVudDppZihyZSgpLGgpe2lmKDA9PT1rLmxldmVsKWJyZWFrO2subGV2ZWwtLSxTLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9fWlmKFMuaXRlbXMubGVuZ3RoPj1kLmRlc2lyZWRTaXplKXt1PSEwO2JyZWFrfX11P3MoJCk6KHJlKCksbmUoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4oMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIicuY29uY2F0KG4ubmFtZSwnIiAnKSsndGFzazogIicuY29uY2F0KGUsJyIuJykpLHJlKCksdm9pZCBuZSgpO3Rocm93IGV9fSkpfX0se2tleToiZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLHM9dGhpcy54cmVmLGw9dGhpcy5yZWFkVG9Vbmljb2RlKHIudG9Vbmljb2RlfHxlLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSk7aWYoci5jb21wb3NpdGUpe3ZhciBmPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7ZiBpbnN0YW5jZW9mIG8uRGljdCYmKHIuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZi5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OmYuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7dmFyIGg9ZS5nZXQoIkNJRFRvR0lETWFwIik7aCBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSYmKG49aC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2V4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICInLmNvbmNhdChlLCciLicpKX19dmFyIGQscD1bXSxnPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe2lmKChkPWUuZ2V0KCJFbmNvZGluZyIpKWluc3RhbmNlb2Ygby5EaWN0KXtpZihnPShnPWQuZ2V0KCJCYXNlRW5jb2RpbmciKSlpbnN0YW5jZW9mIG8uTmFtZT9nLm5hbWU6bnVsbCxkLmhhcygiRGlmZmVyZW5jZXMiKSl7dmFyIHYseT0wLGI9TihkLmdldCgiRGlmZmVyZW5jZXMiKSk7dHJ5e2ZvcihiLnMoKTshKHY9Yi5uKCkpLmRvbmU7KXt2YXIgdz12LnZhbHVlLGs9cy5mZXRjaElmUmVmKHcpO2lmKCJudW1iZXIiPT10eXBlb2Ygayl5PWs7ZWxzZXtpZighKGsgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICIuY29uY2F0KGspKTtwW3krK109ay5uYW1lfX19Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9fX1lbHNlIGlmKGQgaW5zdGFuY2VvZiBvLk5hbWUpZz1kLm5hbWU7ZWxzZXt2YXIgUz0iRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcihTKTsoMCxhLndhcm4pKFMpfSJNYWNSb21hbkVuY29kaW5nIiE9PWcmJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1nJiYiV2luQW5zaUVuY29kaW5nIiE9PWcmJihnPW51bGwpfWlmKGcpci5kZWZhdWx0RW5jb2Rpbmc9KDAsdS5nZXRFbmNvZGluZykoZyk7ZWxzZXt2YXIgeD0hIShyLmZsYWdzJmMuRm9udEZsYWdzLlN5bWJvbGljKSxPPSEhKHIuZmxhZ3MmYy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2Q9dS5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fE98fChkPXUuV2luQW5zaUVuY29kaW5nKSx4JiYoZD11Lk1hY1JvbWFuRW5jb2Rpbmcsci5maWxlJiYhci5pc0ludGVybmFsRm9udHx8KC9TeW1ib2wvaS50ZXN0KHIubmFtZSk/ZD11LlN5bWJvbFNldEVuY29kaW5nOi9EaW5nYmF0c3xXaW5nZGluZ3MvaS50ZXN0KHIubmFtZSkmJihkPXUuWmFwZkRpbmdiYXRzRW5jb2RpbmcpKSksci5kZWZhdWx0RW5jb2Rpbmc9ZH1yZXR1cm4gci5kaWZmZXJlbmNlcz1wLHIuYmFzZUVuY29kaW5nTmFtZT1nLHIuaGFzRW5jb2Rpbmc9ISFnfHxwLmxlbmd0aD4wLHIuZGljdD1lLGwudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIudG9Vbmljb2RlPWUsaS5idWlsZFRvVW5pY29kZShyKX0pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci50b1VuaWNvZGU9ZSxuJiYoci5jaWRUb0dpZE1hcD1pLnJlYWRDaWRUb0dpZE1hcChuLGUpKSxyfSkpfX0se2tleToiX3NpbXBsZUZvbnRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07KDAsYS5hc3NlcnQpKCFlLmNvbXBvc2l0ZSwiTXVzdCBiZSBhIHNpbXBsZSBmb250LiIpO3ZhciByPVtdLG49ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxpPWUuYmFzZUVuY29kaW5nTmFtZSxvPWUuZGlmZmVyZW5jZXM7Zm9yKHZhciBzIGluIG8pe3ZhciBjPW9bc107Ii5ub3RkZWYiIT09YyYmKG5bc109Yyl9dmFyIGw9KDAsUy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgZiBpbiBuKXt2YXIgaD1uW2ZdO2lmKCIiIT09aCl7dmFyIGQ9bFtoXTtpZih2b2lkIDA9PT1kKXt2YXIgcD0wO3N3aXRjaChoWzBdKXtjYXNlIkciOjM9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYoaC5sZW5ndGg+PTMmJmgubGVuZ3RoPD00KXt2YXIgZz1oLnN1YnN0cmluZygxKTtpZih0KXtwPXBhcnNlSW50KGcsMTYpO2JyZWFrfWlmKHA9K2csTnVtYmVyLmlzTmFOKHApJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGcsMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOi0xIT09KGQ9KDAsQS5nZXRVbmljb2RlRm9yR2x5cGgpKGgsbCkpJiYocD1kKX1pZihwPjAmJnA8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIocCkpe2lmKGkmJnA9PT0rZil7dmFyIHY9KDAsdS5nZXRFbmNvZGluZykoaSk7aWYodiYmKGg9dltmXSkpe3JbZl09U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtjb250aW51ZX19cltmXT1TdHJpbmcuZnJvbUNvZGVQb2ludChwKX19ZWxzZSByW2ZdPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9fXJldHVybiByfX0se2tleToiYnVpbGRUb1VuaWNvZGUiLHZhbHVlOihyPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbixzLGMsdSxsO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD0hIXQudG9Vbmljb2RlJiZ0LnRvVW5pY29kZS5sZW5ndGg+MCwhdC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIXQuY29tcG9zaXRlJiZ0Lmhhc0VuY29kaW5nJiYodC5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHQpKSxlLmFicnVwdCgicmV0dXJuIix0LnRvVW5pY29kZSk7Y2FzZSA0OmlmKHQuY29tcG9zaXRlKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGQuVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUodCkpKTtjYXNlIDY6aWYoIXQuY29tcG9zaXRlfHwoIXQuY01hcC5idWlsdEluQ01hcHx8dC5jTWFwIGluc3RhbmNlb2YgaS5JZGVudGl0eUNNYXApJiYoIkFkb2JlIiE9PXQuY2lkU3lzdGVtSW5mby5yZWdpc3RyeXx8IkdCMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJDTlMxIiE9PXQuY2lkU3lzdGVtSW5mby5vcmRlcmluZyYmIkphcGFuMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJLb3JlYTEiIT09dC5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiByPXQuY2lkU3lzdGVtSW5mbyxuPXIucmVnaXN0cnkscz1yLm9yZGVyaW5nLGM9by5OYW1lLmdldCgiIi5jb25jYXQobiwiLSIpLmNvbmNhdChzLCItVUNTMiIpKSxlLm5leHQ9MTEsaS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7Y2FzZSAxMTpyZXR1cm4gdT1lLnNlbnQsbD1bXSx0LmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9dS5sb29rdXAodCk7ciYmKGxbZV09U3RyaW5nLmZyb21DaGFyQ29kZSgoci5jaGFyQ29kZUF0KDApPDw4KStyLmNoYXJDb2RlQXQoMSkpKX0pKSxlLmFicnVwdCgicmV0dXJuIixuZXcgZC5Ub1VuaWNvZGVNYXAobCkpO2Nhc2UgMTU6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKHQuZmlyc3RDaGFyLHQubGFzdENoYXIpKTtjYXNlIDE2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlYWRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIG8uTmFtZT9pLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuSWRlbnRpdHlDTWFwP25ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBkLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTplIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2kuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBpLklkZW50aXR5Q01hcClyZXR1cm4gbmV3IGQuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk7dmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCJudW1iZXIiIT10eXBlb2Ygcil7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErPTIpe3ZhciBpPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtpZig1NTI5Nj09KDYzNDg4JmkpKXthKz0yO3ZhciBvPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtuLnB1c2goKCgxMDIzJmkpPDwxMCkrKDEwMjMmbykrNjU1MzYpfWVsc2Ugbi5wdXNoKGkpfXRbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLG4pfWVsc2UgdFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludChyKX0pKSxuZXcgZC5Ub1VuaWNvZGVNYXAodCl9KSwoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZX0pLCgwLGEud2FybikoJ3JlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIicuY29uY2F0KGUsJyIuJykpLG51bGw7dGhyb3cgZX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfX0se2tleToicmVhZENpZFRvR2lkTWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXt2YXIgaT1lW24rK108PDh8ZVtuXSxvPW4+PjE7KDAhPT1pfHx0LmhhcyhvKSkmJihyW29dPWkpfXJldHVybiByfX0se2tleToiZXh0cmFjdFdpZHRocyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxzLHUsbCxmLGgsZD10aGlzLnhyZWYscD1bXSxnPTAsdj1bXTtpZihyLmNvbXBvc2l0ZSl7aWYoZz1lLmhhcygiRFciKT9lLmdldCgiRFciKToxZTMsaD1lLmdldCgiVyIpKWZvcihhPTAsaT1oLmxlbmd0aDthPGk7YSsrKWlmKGw9ZC5mZXRjaElmUmVmKGhbYSsrXSksZj1kLmZldGNoSWZSZWYoaFthXSksQXJyYXkuaXNBcnJheShmKSlmb3Iocz0wLHU9Zi5sZW5ndGg7czx1O3MrKylwW2wrK109ZC5mZXRjaElmUmVmKGZbc10pO2Vsc2V7dmFyIHk9ZC5mZXRjaElmUmVmKGhbKythXSk7Zm9yKHM9bDtzPD1mO3MrKylwW3NdPXl9aWYoci52ZXJ0aWNhbCl7dmFyIG09ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYobj1bbVsxXSwuNSpnLG1bMF1dLG09ZS5nZXQoIlcyIikpZm9yKGE9MCxpPW0ubGVuZ3RoO2E8aTthKyspaWYobD1kLmZldGNoSWZSZWYobVthKytdKSxmPWQuZmV0Y2hJZlJlZihtW2FdKSxBcnJheS5pc0FycmF5KGYpKWZvcihzPTAsdT1mLmxlbmd0aDtzPHU7cysrKXZbbCsrXT1bZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbc10pXTtlbHNle3ZhciBiPVtkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKV07Zm9yKHM9bDtzPD1mO3MrKyl2W3NdPWJ9fX1lbHNle3ZhciB3PXIuZmlyc3RDaGFyO2lmKGg9ZS5nZXQoIldpZHRocyIpKXtmb3Iocz13LGE9MCxpPWgubGVuZ3RoO2E8aTthKyspcFtzKytdPWQuZmV0Y2hJZlJlZihoW2FdKTtnPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle3ZhciBrPWUuZ2V0KCJCYXNlRm9udCIpO2lmKGsgaW5zdGFuY2VvZiBvLk5hbWUpe3ZhciBTPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGsubmFtZSk7cD10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKFMud2lkdGhzLHIpLGc9Uy5kZWZhdWx0V2lkdGh9fX12YXIgeD0hMCxPPWc7Zm9yKHZhciBBIGluIHApe3ZhciBDPXBbQV07aWYoQylpZihPKXtpZihPIT09Qyl7eD0hMTticmVha319ZWxzZSBPPUN9eCYmKHIuZmxhZ3N8PWMuRm9udEZsYWdzLkZpeGVkUGl0Y2gpLHIuZGVmYXVsdFdpZHRoPWcsci53aWR0aHM9cCxyLmRlZmF1bHRWTWV0cmljcz1uLHIudm1ldHJpY3M9dn19LHtrZXk6ImlzU2VyaWZGb250Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfX0se2tleToiZ2V0QmFzZUZvbnRNZXRyaWNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPSExLGE9KDAsbC5nZXRTdGRGb250TWFwKSgpW2VdfHxlLGk9KDAsTy5nZXRNZXRyaWNzKSgpO2EgaW4gaXx8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTt2YXIgbz1pW2FdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygbz8odD1vLG49ITApOnI9bygpLHtkZWZhdWx0V2lkdGg6dCxtb25vc3BhY2U6bix3aWR0aHM6cn19fSx7a2V5OiJidWlsZENoYXJDb2RlVG9XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZyxpPTA7aTwyNTY7aSsrKWkgaW4gbiYmZVtuW2ldXT9yW2ldPWVbbltpXV06aSBpbiBhJiZlW2FbaV1dJiYocltpXT1lW2FbaV1dKTtyZXR1cm4gcn19LHtrZXk6InByZUV2YWx1YXRlRm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShyIGluc3RhbmNlb2Ygby5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTt2YXIgbixpLHM9ITE7aWYoIlR5cGUwIj09PXIubmFtZSl7dmFyIGM9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCFjKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KGMpP3RoaXMueHJlZi5mZXRjaElmUmVmKGNbMF0pOmMpaW5zdGFuY2VvZiBvLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZighKChyPWUuZ2V0KCJTdWJ0eXBlIikpaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO3M9ITB9dmFyIHU9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChzPzY1NTM1OjI1NSksZj1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihmKXtuPW5ldyBDLk11cm11ckhhc2gzXzY0O3ZhciBoPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpbi51cGRhdGUoaC5uYW1lKTtlbHNlIGlmKGggaW5zdGFuY2VvZiBvLlJlZiluLnVwZGF0ZShoLnRvU3RyaW5nKCkpO2Vsc2UgaWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQscD1OKGguZ2V0UmF3VmFsdWVzKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lKW4udXBkYXRlKGcubmFtZSk7ZWxzZSBpZihnIGluc3RhbmNlb2Ygby5SZWYpbi51cGRhdGUoZy50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZykpe2Zvcih2YXIgdj1nLmxlbmd0aCx5PW5ldyBBcnJheSh2KSxiPTA7Yjx2O2IrKyl7dmFyIHc9Z1tiXTt3IGluc3RhbmNlb2Ygby5OYW1lP3lbYl09dy5uYW1lOigibnVtYmVyIj09dHlwZW9mIHd8fHcgaW5zdGFuY2VvZiBvLlJlZikmJih5W2JdPXcudG9TdHJpbmcoKSl9bi51cGRhdGUoeS5qb2luKCkpfX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fWlmKG4udXBkYXRlKCIiLmNvbmNhdCh1LCItIikuY29uY2F0KGwpKSwoaT1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSlpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSl7dmFyIGs9aS5zdHJ8fGksUz1rLmJ1ZmZlcj9uZXcgVWludDhBcnJheShrLmJ1ZmZlci5idWZmZXIsMCxrLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoay5ieXRlcy5idWZmZXIsay5zdGFydCxrLmVuZC1rLnN0YXJ0KTtuLnVwZGF0ZShTKX1lbHNlIGkgaW5zdGFuY2VvZiBvLk5hbWUmJm4udXBkYXRlKGkubmFtZSk7dmFyIHg9ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheSh4KSl7dmFyIE8sQT1bXSxGPU4oeCk7dHJ5e2ZvcihGLnMoKTshKE89Ri5uKCkpLmRvbmU7KXt2YXIgUD1PLnZhbHVlOygibnVtYmVyIj09dHlwZW9mIFB8fFAgaW5zdGFuY2VvZiBvLlJlZikmJkEucHVzaChQLnRvU3RyaW5nKCkpfX1jYXRjaChlKXtGLmUoZSl9ZmluYWxseXtGLmYoKX1uLnVwZGF0ZShBLmpvaW4oKSl9aWYocyl7bi51cGRhdGUoImNvbXBvc2l0ZUZvbnQiKTt2YXIgVD1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoVCkpe3ZhciBJLEU9W10saj1OKFQpO3RyeXtmb3Ioai5zKCk7IShJPWoubigpKS5kb25lOyl7dmFyIE09SS52YWx1ZTtpZigibnVtYmVyIj09dHlwZW9mIE18fE0gaW5zdGFuY2VvZiBvLlJlZilFLnB1c2goTS50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoTSkpe3ZhciBfLEw9W10sUj1OKE0pO3RyeXtmb3IoUi5zKCk7IShfPVIubigpKS5kb25lOyl7dmFyIEQ9Xy52YWx1ZTsoIm51bWJlciI9PXR5cGVvZiBEfHxEIGluc3RhbmNlb2Ygby5SZWYpJiZMLnB1c2goRC50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9RS5wdXNoKCJbIi5jb25jYXQoTC5qb2luKCksIl0iKSl9fX1jYXRjaChlKXtqLmUoZSl9ZmluYWxseXtqLmYoKX1uLnVwZGF0ZShFLmpvaW4oKSl9dmFyIEI9ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO0IgaW5zdGFuY2VvZiBvLk5hbWU/bi51cGRhdGUoQi5uYW1lKTpCIGluc3RhbmNlb2Ygby5SZWY/bi51cGRhdGUoQi50b1N0cmluZygpKTpCIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtJiZuLnVwZGF0ZShCLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6ZixkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6cyx0eXBlOnIubmFtZSxmaXJzdENoYXI6dSxsYXN0Q2hhcjpsLHRvVW5pY29kZTppLGhhc2g6bj9uLmhleGRpZ2VzdCgpOiIifX19LHtrZXk6InRyYW5zbGF0ZUZvbnQiLHZhbHVlOih0PU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbix1LGYsZCxwLGcsdixtLGIsdyxrLFMseCxPLEEsQyxGLFAsVCxJLGosTSxfLEwsUixELEIsVSwkLFgsSCxxLEcseixXPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPXQuZGVzY3JpcHRvcixuPXQuZGljdCx1PXQuYmFzZURpY3QsZj10LmNvbXBvc2l0ZSxkPXQudHlwZSxwPXQuZmlyc3RDaGFyLGc9dC5sYXN0Q2hhcix2PXQudG9Vbmljb2RlLG09dC5jc3NGb250SW5mbyxiPSJUeXBlMyI9PT1kLHIpe2UubmV4dD0yNzticmVha31pZighYil7ZS5uZXh0PTk7YnJlYWt9KHI9bmV3IG8uRGljdChudWxsKSkuc2V0KCJGb250TmFtZSIsby5OYW1lLmdldChkKSksci5zZXQoIkZvbnRCQm94IixuLmdldEFycmF5KCJGb250QkJveCIpfHxbMCwwLDAsMF0pLGUubmV4dD0yNzticmVhaztjYXNlIDk6aWYoKGs9bi5nZXQoIkJhc2VGb250IikpaW5zdGFuY2VvZiBvLk5hbWUpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQiKTtjYXNlIDEyOmlmKGs9ay5uYW1lLnJlcGxhY2UoL1ssX10vZywiLSIpLFM9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoaykseD1rLnNwbGl0KCItIilbMF0sTz0odGhpcy5pc1NlcmlmRm9udCh4KT9jLkZvbnRGbGFncy5TZXJpZjowKXwoUy5tb25vc3BhY2U/Yy5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsbC5nZXRTeW1ib2xzRm9udHMpKClbeF0/Yy5Gb250RmxhZ3MuU3ltYm9saWM6Yy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpLHc9e3R5cGU6ZCxuYW1lOmssbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsd2lkdGhzOlMud2lkdGhzLGRlZmF1bHRXaWR0aDpTLmRlZmF1bHRXaWR0aCxpc1NpbXVsYXRlZEZsYWdzOiEwLGZsYWdzOk8sZmlyc3RDaGFyOnAsbGFzdENoYXI6Zyx0b1VuaWNvZGU6dix4SGVpZ2h0OjAsY2FwSGVpZ2h0OjAsaXRhbGljQW5nbGU6MCxpc1R5cGUzRm9udDpifSxBPW4uZ2V0KCJXaWR0aHMiKSxDPSgwLGwuZ2V0U3RhbmRhcmRGb250TmFtZSkoayksRj1udWxsLCFDKXtlLm5leHQ9MjY7YnJlYWt9cmV0dXJuIHcuaXNTdGFuZGFyZEZvbnQ9ITAsZS5uZXh0PTI0LHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEMpO2Nhc2UgMjQ6Rj1lLnNlbnQsdy5pc0ludGVybmFsRm9udD0hIUY7Y2FzZSAyNjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobixuLHcpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKEEpe3ZhciB0LHI9W10sbj1wLGE9TihBKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBpPXQudmFsdWU7cltuKytdPVcueHJlZi5mZXRjaElmUmVmKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLndpZHRocz1yfWVsc2UgZS53aWR0aHM9Vy5idWlsZENoYXJDb2RlVG9XaWR0aChTLndpZHRocyxlKTtyZXR1cm4gbmV3IHMuRm9udChrLEYsZSl9KSkpO2Nhc2UgMjc6aWYoUD1yLmdldCgiRm9udE5hbWUiKSxUPW4uZ2V0KCJCYXNlRm9udCIpLCJzdHJpbmciPT10eXBlb2YgUCYmKFA9by5OYW1lLmdldChQKSksInN0cmluZyI9PXR5cGVvZiBUJiYoVD1vLk5hbWUuZ2V0KFQpKSxifHwoST1QJiZQLm5hbWUsaj1UJiZULm5hbWUsSSE9PWomJigoMCxhLmluZm8pKCJUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyBcIiIuY29uY2F0KEksJyIgYnV0ICcpKyJzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcIiIuY29uY2F0KGosJyIuJykpLEkmJmomJmouc3RhcnRzV2l0aChJKSYmKFA9VCkpKSwoUD1QfHxUKWluc3RhbmNlb2Ygby5OYW1lKXtlLm5leHQ9MzU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7Y2FzZSAzNTplLnByZXY9MzUsTT1yLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKSxlLm5leHQ9NDU7YnJlYWs7Y2FzZSAzOTppZihlLnByZXY9MzksZS50MD1lLmNhdGNoKDM1KSx0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXtlLm5leHQ9NDM7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDQzOigwLGEud2FybikoJ3RyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJy5jb25jYXQoUC5uYW1lLCciIGZvbnQgZmlsZTogIicpLmNvbmNhdChlLnQwLCciLicpKSxNPW5ldyB5Lk51bGxTdHJlYW07Y2FzZSA0NTppZihCPSExLFU9ITEsJD1udWxsLCFNKXtlLm5leHQ9NTI7YnJlYWt9TS5kaWN0JiYoKFg9TS5kaWN0LmdldCgiU3VidHlwZSIpKWluc3RhbmNlb2Ygby5OYW1lJiYoXz1YLm5hbWUpLEw9TS5kaWN0LmdldCgiTGVuZ3RoMSIpLFI9TS5kaWN0LmdldCgiTGVuZ3RoMiIpLEQ9TS5kaWN0LmdldCgiTGVuZ3RoMyIpKSxlLm5leHQ9NzQ7YnJlYWs7Y2FzZSA1MjppZighbSl7ZS5uZXh0PTY2O2JyZWFrfWlmKCEoSD0oMCxoLmdldFhmYUZvbnROYW1lKShQLm5hbWUpKSl7ZS5uZXh0PTY0O2JyZWFrfXJldHVybiBtLmZvbnRGYW1pbHk9IiIuY29uY2F0KG0uZm9udEZhbWlseSwiLVBkZkpTLVhGQSIpLG0ubWV0cmljcz1ILm1ldHJpY3N8fG51bGwsJD1ILmZhY3RvcnN8fG51bGwsZS5uZXh0PTYwLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEgubmFtZSk7Y2FzZSA2MDpNPWUuc2VudCxVPSEhTSx1PW49KDAsaC5nZXRYZmFGb250RGljdCkoUC5uYW1lKSxmPSEwO2Nhc2UgNjQ6ZS5uZXh0PTc0O2JyZWFrO2Nhc2UgNjY6aWYoYil7ZS5uZXh0PTc0O2JyZWFrfWlmKCEocT0oMCxsLmdldFN0YW5kYXJkRm9udE5hbWUpKFAubmFtZSkpKXtlLm5leHQ9NzQ7YnJlYWt9cmV0dXJuIEI9ITAsZS5uZXh0PTcyLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKHEpO2Nhc2UgNzI6TT1lLnNlbnQsVT0hIU07Y2FzZSA3NDppZih3PXt0eXBlOmQsbmFtZTpQLm5hbWUsc3VidHlwZTpfLGZpbGU6TSxsZW5ndGgxOkwsbGVuZ3RoMjpSLGxlbmd0aDM6RCxpc1N0YW5kYXJkRm9udDpCLGlzSW50ZXJuYWxGb250OlUsbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsY29tcG9zaXRlOmYsZml4ZWRQaXRjaDohMSxmb250TWF0cml4Om4uZ2V0QXJyYXkoIkZvbnRNYXRyaXgiKXx8YS5GT05UX0lERU5USVRZX01BVFJJWCxmaXJzdENoYXI6cCxsYXN0Q2hhcjpnLHRvVW5pY29kZTp2LGJib3g6ci5nZXRBcnJheSgiRm9udEJCb3giKXx8bi5nZXRBcnJheSgiRm9udEJCb3giKSxhc2NlbnQ6ci5nZXQoIkFzY2VudCIpLGRlc2NlbnQ6ci5nZXQoIkRlc2NlbnQiKSx4SGVpZ2h0OnIuZ2V0KCJYSGVpZ2h0Iil8fDAsY2FwSGVpZ2h0OnIuZ2V0KCJDYXBIZWlnaHQiKXx8MCxmbGFnczpyLmdldCgiRmxhZ3MiKSxpdGFsaWNBbmdsZTpyLmdldCgiSXRhbGljQW5nbGUiKXx8MCxpc1R5cGUzRm9udDpiLGNzc0ZvbnRJbmZvOm0sc2NhbGVGYWN0b3JzOiR9LCFmKXtlLm5leHQ9ODM7YnJlYWt9cmV0dXJuKEc9dS5nZXQoIkVuY29kaW5nIikpaW5zdGFuY2VvZiBvLk5hbWUmJih3LmNpZEVuY29kaW5nPUcubmFtZSksZS5uZXh0PTgwLGkuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzpHLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2Nhc2UgODA6ej1lLnNlbnQsdy5jTWFwPXosdy52ZXJ0aWNhbD13LmNNYXAudmVydGljYWw7Y2FzZSA4MzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobix1LHcpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBXLmV4dHJhY3RXaWR0aHMobixyLGUpLG5ldyBzLkZvbnQoUC5uYW1lLE0sZSl9KSkpO2Nhc2UgODQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1szNSwzOV1dKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSxbe2tleToiYnVpbGRGb250UGF0aHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe2Z1bmN0aW9uIGkodCl7dmFyIGk9IiIuY29uY2F0KGUubG9hZGVkTmFtZSwiX3BhdGhfIikuY29uY2F0KHQpO3RyeXtpZihlLnJlbmRlcmVyLmhhc0J1aWx0UGF0aCh0KSlyZXR1cm47ci5zZW5kKCJjb21tb25vYmoiLFtpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX1jYXRjaChlKXtpZihuLmlnbm9yZUVycm9ycylyZXR1cm4gci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRCdWlsZFBhdGh9KSx2b2lkKDAsYS53YXJuKSgiYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAiLmNvbmNhdChpLCcgZ2x5cGg6ICInKS5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19dmFyIG8scz1OKHQpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIGM9by52YWx1ZTtpKGMuZm9udENoYXIpO3ZhciB1PWMuYWNjZW50O3UmJnUuZm9udENoYXImJmkodS5mb250Q2hhcil9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX19LHtrZXk6ImZhbGxiYWNrRm9udERpY3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkRpY3Q7cmV0dXJuIGUuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiUERGSlMtRmFsbGJhY2tGb250IikpLGUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKSxlLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSwoMCxhLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGV9KCk7dC5QYXJ0aWFsRXZhbHVhdG9yPUc7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQubG9hZGVkTmFtZSxuPXQuZm9udCxhPXQuZGljdCxpPXQuZXZhbHVhdG9yT3B0aW9ucztfKHRoaXMsZSksdGhpcy5sb2FkZWROYW1lPXIsdGhpcy5mb250PW4sdGhpcy5kaWN0PWEsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1pfHxVLHRoaXMudHlwZTNMb2FkZWQ9bnVsbCx0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPW4uaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsLHRoaXMuc2VudD0hMX1yZXR1cm4gUihlLFt7a2V5OiJzZW5kIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNlbnR8fCh0aGlzLnNlbnQ9ITAsZS5zZW5kKCJjb21tb25vYmoiLFt0aGlzLmxvYWRlZE5hbWUsIkZvbnQiLHRoaXMuZm9udC5leHBvcnREYXRhKHRoaXMuX2V2YWx1YXRvck9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllcyldKSl9fSx7a2V5OiJmYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mb250LmRhdGEmJih0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlPSEwLEcuYnVpbGRGb250UGF0aHModGhpcy5mb250LHRoaXMuZm9udC5nbHlwaENhY2hlVmFsdWVzLGUsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucykpfX0se2tleToibG9hZFR5cGUzRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7dmFyIGk9ZS5jbG9uZSh7aWdub3JlRXJyb3JzOiExfSk7aS5wYXJzaW5nVHlwZTNGb250PSEwO3ZhciBzPW5ldyBvLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCksaS50eXBlM0ZvbnRSZWZzPXM7dmFyIGMsdT10aGlzLmZvbnQsbD10aGlzLnR5cGUzRGVwZW5kZW5jaWVzLGY9UHJvbWlzZS5yZXNvbHZlKCksaD10aGlzLmRpY3QuZ2V0KCJDaGFyUHJvY3MiKSxkPXRoaXMuZGljdC5nZXQoIlJlc291cmNlcyIpfHx0LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxnPWEuVXRpbC5ub3JtYWxpemVSZWN0KHUuYmJveHx8WzAsMCwwLDBdKSx2PWdbMl0tZ1swXSx5PWdbM10tZ1sxXSxtPU1hdGguaHlwb3Qodix5KSxiPU4oaC5nZXRLZXlzKCkpO3RyeXt2YXIgdz1mdW5jdGlvbigpe3ZhciBlPWMudmFsdWU7Zj1mLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9aC5nZXQoZSksbz1uZXcgRi5PcGVyYXRvckxpc3Q7cmV0dXJuIGkuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Om99KS50aGVuKChmdW5jdGlvbigpe28uZm5BcnJheVswXT09PWEuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyYmbi5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhvLG0pLHBbZV09by5nZXRJUigpO3ZhciB0LHI9TihvLmRlcGVuZGVuY2llcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2wuYWRkKGkpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLGEud2FybikoJ1R5cGUzIGZvbnQgcmVzb3VyY2UgIicuY29uY2F0KGUsJyIgaXMgbm90IGF2YWlsYWJsZS4nKSk7dmFyIHI9bmV3IEYuT3BlcmF0b3JMaXN0O3BbZV09ci5nZXRJUigpfSkpfSkpfTtmb3IoYi5zKCk7IShjPWIubigpKS5kb25lOyl3KCl9Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9cmV0dXJuIHRoaXMudHlwZTNMb2FkZWQ9Zi50aGVuKChmdW5jdGlvbigpe3UuY2hhclByb2NPcGVyYXRvckxpc3Q9cCxuLl9iYm94JiYodS5pc0NoYXJCQm94PSEwLHUuYmJveD1uLl9iYm94KX0pKSx0aGlzLnR5cGUzTG9hZGVkfX0se2tleToiX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpOYU4scj1hLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1yWzJdLXJbMF0saT1yWzNdLXJbMV0sbz1NYXRoLmh5cG90KG4saSk7MD09PW58fDA9PT1pPyhlLmZuQXJyYXkuc3BsaWNlKDAsMSksZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSkpOigwPT09dHx8TWF0aC5yb3VuZChvL3QpPj0xMCkmJih0aGlzLl9iYm94fHwodGhpcy5fYmJveD1bMS8wLDEvMCwtMS8wLC0xLzBdKSx0aGlzLl9iYm94WzBdPU1hdGgubWluKHRoaXMuX2Jib3hbMF0sclswXSksdGhpcy5fYmJveFsxXT1NYXRoLm1pbih0aGlzLl9iYm94WzFdLHJbMV0pLHRoaXMuX2Jib3hbMl09TWF0aC5tYXgodGhpcy5fYmJveFsyXSxyWzJdKSx0aGlzLl9iYm94WzNdPU1hdGgubWF4KHRoaXMuX2Jib3hbM10sclszXSkpO2Zvcih2YXIgcz0wLGM9ZS5sZW5ndGg7czxjOyl7c3dpdGNoKGUuZm5BcnJheVtzXSl7Y2FzZSBhLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHM6YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOmNhc2UgYS5PUFMuc2V0RmlsbENvbG9yU3BhY2U6Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNvbG9yTjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvck46Y2FzZSBhLk9QUy5zZXRTdHJva2VHcmF5OmNhc2UgYS5PUFMuc2V0RmlsbEdyYXk6Y2FzZSBhLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6Y2FzZSBhLk9QUy5zaGFkaW5nRmlsbDpjYXNlIGEuT1BTLnNldFJlbmRlcmluZ0ludGVudDplLmZuQXJyYXkuc3BsaWNlKHMsMSksZS5hcmdzQXJyYXkuc3BsaWNlKHMsMSksYy0tO2NvbnRpbnVlO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmZvcih2YXIgdT1UKGUuYXJnc0FycmF5W3NdLDEpWzBdLGw9MCxmPXUubGVuZ3RoO2w8Zjspe3N3aXRjaChUKHVbbF0sMSlbMF0pe2Nhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIkJHIjpjYXNlIkJHMiI6Y2FzZSJVQ1IiOmNhc2UiVUNSMiI6dS5zcGxpY2UobCwxKSxmLS07Y29udGludWV9bCsrfX1zKyt9fX1dKSxlfSgpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5ldyBZO18odGhpcyxlKSx0aGlzLnN0YXRlPXQsdGhpcy5zdGF0ZVN0YWNrPVtdfXJldHVybiBSKGUsW3trZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKSx0aGlzLnN0YXRlPWUuY2xvbmUoKX19LHtrZXk6InJlc3RvcmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZVN0YWNrLnBvcCgpO2UmJih0aGlzLnN0YXRlPWUpfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnN0YXRlLmN0bT1hLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLGUpfX1dKSxlfSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoYS5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udE5hbWU9bnVsbCx0aGlzLmZvbnRTaXplPTAsdGhpcy5sb2FkZWROYW1lPW51bGwsdGhpcy5mb250PW51bGwsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4PWEuSURFTlRJVFlfTUFUUklYLnNsaWNlKCksdGhpcy50ZXh0TGluZU1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wfXJldHVybiBSKGUsW3trZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz10aGlzLnRleHRNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJzZXRUZXh0TGluZU1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dExpbmVNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJ0cmFuc2xhdGVUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dE1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XX19LHtrZXk6InRyYW5zbGF0ZVRleHRMaW5lTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dExpbmVNYXRyaXg7cls0XT1yWzBdKmUrclsyXSp0K3JbNF0scls1XT1yWzFdKmUrclszXSp0K3JbNV19fSx7a2V5OiJjYXJyaWFnZVJldHVybiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyksdGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIGUudGV4dE1hdHJpeD10aGlzLnRleHRNYXRyaXguc2xpY2UoKSxlLnRleHRMaW5lTWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKSxlLmZvbnRNYXRyaXg9dGhpcy5mb250TWF0cml4LnNsaWNlKCksZX19XSksZX0oKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe18odGhpcyxlKSx0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGEuSURFTlRJVFlfTUFUUklYKSx0aGlzLmZvbnQ9bnVsbCx0aGlzLnRleHRSZW5kZXJpbmdNb2RlPWEuVGV4dFJlbmRlcmluZ01vZGUuRklMTCx0aGlzLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksdGhpcy5zdHJva2VDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9cmV0dXJuIFIoZSxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fV0pLGV9KCksSz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bmV3IFc7Xyh0aGlzLGUpLHRoaXMucGFyc2VyPW5ldyBnLlBhcnNlcih7bGV4ZXI6bmV3IGcuTGV4ZXIodCxlLm9wTWFwKSx4cmVmOnJ9KSx0aGlzLnN0YXRlTWFuYWdlcj1uLHRoaXMubm9uUHJvY2Vzc2VkQXJncz1bXSx0aGlzLl9pc1BhdGhPcD0hMSx0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wfXJldHVybiBSKGUsW3trZXk6InNhdmVkU3RhdGVzRGVwdGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10LmFyZ3M7Oyl7dmFyIG49dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYobiBpbnN0YW5jZW9mIG8uQ21kKXt2YXIgaT1uLmNtZCxzPWUub3BNYXBbaV07aWYoIXMpeygwLGEud2FybikoJ1Vua25vd24gY29tbWFuZCAiJy5jb25jYXQoaSwnIi4nKSk7Y29udGludWV9dmFyIGM9cy5pZCx1PXMubnVtQXJncyxsPW51bGwhPT1yP3IubGVuZ3RoOjA7aWYodGhpcy5faXNQYXRoT3B8fCh0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wKSx0aGlzLl9pc1BhdGhPcD1jPj1hLk9QUy5tb3ZlVG8mJmM8PWEuT1BTLmVuZFBhdGgscy52YXJpYWJsZUFyZ3MpbD51JiYoMCxhLmluZm8pKCJDb21tYW5kICIuY29uY2F0KGksIjogZXhwZWN0ZWQgWzAsICIpLmNvbmNhdCh1LCJdIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIikpO2Vsc2V7aWYobCE9PXUpe2Zvcih2YXIgZj10aGlzLm5vblByb2Nlc3NlZEFyZ3M7bD51OylmLnB1c2goci5zaGlmdCgpKSxsLS07Zm9yKDtsPHUmJjAhPT1mLmxlbmd0aDspbnVsbD09PXImJihyPVtdKSxyLnVuc2hpZnQoZi5wb3AoKSksbCsrfWlmKGw8dSl7dmFyIGg9ImNvbW1hbmQgIi5jb25jYXQoaSwiOiBleHBlY3RlZCAiKS5jb25jYXQodSwiIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIik7aWYodGhpcy5faXNQYXRoT3AmJisrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM+ZS5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCAiLmNvbmNhdChoKSk7KDAsYS53YXJuKSgiU2tpcHBpbmcgIi5jb25jYXQoaCkpLG51bGwhPT1yJiYoci5sZW5ndGg9MCk7Y29udGludWV9fXJldHVybiB0aGlzLnByZXByb2Nlc3NDb21tYW5kKGMsciksdC5mbj1jLHQuYXJncz1yLCEwfWlmKG49PT1vLkVPRilyZXR1cm4hMTtpZihudWxsIT09biYmKG51bGw9PT1yJiYocj1bXSksci5wdXNoKG4pLHIubGVuZ3RoPjMzKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX0se2tleToicHJlcHJvY2Vzc0NvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSBhLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIGEuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fV0sW3trZXk6Im9wTWFwIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx4LmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6YS5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuSj17aWQ6YS5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmo9e2lkOmEuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuTT17aWQ6YS5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmQ9e2lkOmEuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5yaT17aWQ6YS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaT17aWQ6YS5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5ncz17aWQ6YS5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUucT17aWQ6YS5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlE9e2lkOmEuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5jbT17aWQ6YS5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUubT17aWQ6YS5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUubD17aWQ6YS5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuYz17aWQ6YS5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLnY9e2lkOmEuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUueT17aWQ6YS5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5oPXtpZDphLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5yZT17aWQ6YS5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuUz17aWQ6YS5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUucz17aWQ6YS5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5mPXtpZDphLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRj17aWQ6YS5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJmKiJdPXtpZDphLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CPXtpZDphLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIkIqIl09e2lkOmEuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmI9e2lkOmEuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJiKiJdPXtpZDphLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLm49e2lkOmEuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5XPXtpZDphLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIlcqIl09e2lkOmEuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJUPXtpZDphLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FVD17aWQ6YS5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlRjPXtpZDphLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR3PXtpZDphLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR6PXtpZDphLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UTD17aWQ6YS5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRmPXtpZDphLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVHI9e2lkOmEuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHM9e2lkOmEuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGQ9e2lkOmEuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVEQ9e2lkOmEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLlRtPXtpZDphLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGVbIlQqIl09e2lkOmEuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGo9e2lkOmEuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVEo9e2lkOmEuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbIiciXT17aWQ6YS5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlWyciJ109e2lkOmEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuZDA9e2lkOmEuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLmQxPXtpZDphLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5DUz17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmNzPXtpZDphLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlNDPXtpZDphLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLlNDTj17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxlLnNjPXtpZDphLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sZS5zY249e2lkOmEuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuRz17aWQ6YS5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmc9e2lkOmEuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuUkc9e2lkOmEuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUucmc9e2lkOmEuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxlLks9e2lkOmEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLms9e2lkOmEuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5zaD17aWQ6YS5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CST17aWQ6YS5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLklEPXtpZDphLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVJPXtpZDphLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkRvPXtpZDphLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NUD17aWQ6YS5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRFA9e2lkOmEuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuQk1DPXtpZDphLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CREM9e2lkOmEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuRU1DPXtpZDphLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlg9e2lkOmEuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRVg9e2lkOmEuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJNPW51bGwsZS5CRD1udWxsLGUudHJ1ZT1udWxsLGUuZmE9bnVsbCxlLmZhbD1udWxsLGUuZmFscz1udWxsLGUuZmFsc2U9bnVsbCxlLm51PW51bGwsZS5udWw9bnVsbCxlLm51bGw9bnVsbH0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3BNYXAiLGUoKSl9fSx7a2V5OiJNQVhfSU5WQUxJRF9QQVRIX09QUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCl9fV0pLGV9KCk7dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9S30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTQ2KSxzPXIoMTM1KSxjPXIoMTM5KTtmdW5jdGlvbiB1KCl7dT1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGwoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gZihlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1sO3ZhciBoPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1mKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxsPXUudmFsdWU7cmV0dXJuIGwmJiJvYmplY3QiPT1wKGwpJiZyLmNhbGwobCwiX19hd2FpdCIpP3QucmVzb2x2ZShsLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShsKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9ZihlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWYobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGwodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBsKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtsKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtsKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaChlLHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saChlLHQpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scChlKX1mdW5jdGlvbiBnKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1wKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXAoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHkoZSx0LHIpe3JldHVybiB0JiZ2KGUucHJvdG90eXBlLHQpLHImJnYoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBtPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sYj1NYXRoLnBvdygyLDI0KS0xLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtnKHRoaXMsZSksdGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wLHRoaXMuX21hcD1bXSx0aGlzLm5hbWU9IiIsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLnVzZUNNYXA9bnVsbCx0aGlzLmJ1aWx0SW5DTWFwPXR9cmV0dXJuIHkoZSxbe2tleToiYWRkQ29kZXNwYWNlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxyKSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfX0se2tleToibWFwQ2lkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0LWU+Yil0aHJvdyBuZXcgRXJyb3IoIm1hcENpZFJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2Zvcig7ZTw9dDspdGhpcy5fbWFwW2UrK109cisrfX0se2tleToibWFwQmZSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHQtZT5iKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgtMTtlPD10Oyl7dGhpcy5fbWFwW2UrK109cjt2YXIgYT1yLmNoYXJDb2RlQXQobikrMTtyPWE+MjU1P3Iuc3Vic3RyaW5nKDAsbi0xKStTdHJpbmcuZnJvbUNoYXJDb2RlKHIuY2hhckNvZGVBdChuLTEpKzEpKyJcMCI6ci5zdWJzdHJpbmcoMCxuKStTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYodC1lPmIpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgsYT0wO2U8PXQmJmE8bjspdGhpcy5fbWFwW2VdPXJbYSsrXSwrK2V9fSx7a2V5OiJtYXBPbmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJjb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcCxyPXQubGVuZ3RoO2lmKHI8PTY1NTM2KWZvcih2YXIgbj0wO248cjtuKyspdm9pZCAwIT09dFtuXSYmZShuLHRbbl0pO2Vsc2UgZm9yKHZhciBhIGluIHQpZShhLHRbYV0pfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgciBpbiB0KWlmKHRbcl09PT1lKXJldHVybiAwfHI7cmV0dXJuLTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcH19LHtrZXk6InJlYWRDaGFyQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wLGE9dGhpcy5jb2Rlc3BhY2VSYW5nZXMsaT0wLG89YS5sZW5ndGg7aTxvO2krKyl7bj0objw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2Zvcih2YXIgcz1hW2ldLGM9MCx1PXMubGVuZ3RoO2M8dTspe3ZhciBsPXNbYysrXSxmPXNbYysrXTtpZihuPj1sJiZuPD1mKXJldHVybiByLmNoYXJjb2RlPW4sdm9pZChyLmxlbmd0aD1pKzEpfX1yLmNoYXJjb2RlPTAsci5sZW5ndGg9MX19LHtrZXk6ImdldENoYXJDb2RlTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXMscj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGE9dFtyXSxpPTAsbz1hLmxlbmd0aDtpPG87KXt2YXIgcz1hW2krK10sYz1hW2krK107aWYoZT49cyYmZTw9YylyZXR1cm4gcisxfXJldHVybiAxfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19XSksZX0oKTt0LkNNYXA9dzt2YXIgaz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaChlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1kKHQpO2lmKHIpe3ZhciBhPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSx0KXt2YXIgcjtyZXR1cm4gZyh0aGlzLGkpLChyPWEuY2FsbCh0aGlzKSkudmVydGljYWw9ZSxyLmFkZENvZGVzcGFjZVJhbmdlKHQsMCw2NTUzNSkscn1yZXR1cm4geShpLFt7a2V5OiJtYXBDaWRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheSIpfX0se2tleToibWFwT25lIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lIil9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOnZvaWQgMH19LHtrZXk6ImNvbnRhaW5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzV9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PD02NTUzNTt0KyspZSh0LHQpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6LTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBBcnJheSg2NTUzNiksdD0wO3Q8PTY1NTM1O3QrKyllW3RdPXQ7cmV0dXJuIGV9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiA2NTUzNn19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwIil9fV0pLGl9KHcpO3QuSWRlbnRpdHlDTWFwPWs7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTAsbj0wO248PXQ7bisrKXI9cjw8OHxlW25dO3JldHVybiByPj4+MH1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIDE9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdKTozPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSxlWzJdLGVbM10pOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gcihlLHQscil7Zm9yKHZhciBuPTAsYT1yO2E+PTA7YS0tKW4rPWVbYV0rdFthXSxlW2FdPTI1NSZuLG4+Pj04fWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MSxuPXQ7bj49MCYmcj4wO24tLSlyKz1lW25dLGVbbl09MjU1JnIscj4+PTh9dmFyIGk9MTYsbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Zyh0aGlzLGUpLHRoaXMuYnVmZmVyPXQsdGhpcy5wb3M9MCx0aGlzLmVuZD10Lmxlbmd0aCx0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmV0dXJuIHkoZSxbe2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX19LHtrZXk6InJlYWROdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Rve3ZhciByPXRoaXMucmVhZEJ5dGUoKTtpZihyPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZyKSx0PXQ8PDd8MTI3JnJ9d2hpbGUoIWUpO3JldHVybiB0fX0se2tleToicmVhZFNpZ25lZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfX0se2tleToicmVhZEhleCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKSx0aGlzLnBvcys9dCsxfX0se2tleToicmVhZEhleE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixhPXRoaXMudG1wQnVmLGk9MDtkb3t2YXIgbz10aGlzLnJlYWRCeXRlKCk7aWYobzwwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO3I9ISgxMjgmbyksYVtpKytdPTEyNyZvfXdoaWxlKCFyKTtmb3IodmFyIHM9dCxjPTAsdT0wO3M+PTA7KXtmb3IoO3U8OCYmYS5sZW5ndGg+MDspY3w9YVstLWldPDx1LHUrPTc7ZVtzXT0yNTUmYyxzLS0sYz4+PTgsdS09OH19fSx7a2V5OiJyZWFkSGV4U2lnbmVkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2Zvcih2YXIgcj0xJmVbdF0/MjU1OjAsbj0wLGE9MDthPD10O2ErKyluPSgxJm4pPDw4fGVbYV0sZVthXT1uPj4xXnJ9fSx7a2V5OiJyZWFkU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlYWROdW1iZXIoKSx0PSIiLHI9MDtyPGU7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX1dKSxlfSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7Zyh0aGlzLG4pfXZhciBzO3JldHVybiB5KG4sW3trZXk6InByb2Nlc3MiLHZhbHVlOihzPWYodSgpLm1hcmsoKGZ1bmN0aW9uIG4ocyxjLGwpe3ZhciBmLGgsZCxwLGcsdix5LG0sYix3LGssUyx4LE8sQSxDLEYsUCxULEksRTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOmY9bmV3IG8ocyksaD1mLnJlYWRCeXRlKCksYy52ZXJ0aWNhbD0hISgxJmgpLGQ9bnVsbCxwPW5ldyBVaW50OEFycmF5KGkpLGc9bmV3IFVpbnQ4QXJyYXkoaSksdj1uZXcgVWludDhBcnJheShpKSx5PW5ldyBVaW50OEFycmF5KGkpLG09bmV3IFVpbnQ4QXJyYXkoaSk7Y2FzZSA5OmlmKCEoKHc9Zi5yZWFkQnl0ZSgpKT49MCkpe24ubmV4dD02ODticmVha31pZig3IT0oaz13Pj41KSl7bi5uZXh0PTIwO2JyZWFrfW4udDA9MzEmdyxuLm5leHQ9MD09PW4udDA/MTU6MT09PW4udDA/MTc6MTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZi5yZWFkU3RyaW5nKCksbi5hYnJ1cHQoImJyZWFrIiwxOSk7Y2FzZSAxNzpyZXR1cm4gZD1mLnJlYWRTdHJpbmcoKSxuLmFicnVwdCgiYnJlYWsiLDE5KTtjYXNlIDE5OnJldHVybiBuLmFicnVwdCgiY29udGludWUiLDkpO2Nhc2UgMjA6aWYoUz0hISgxNiZ3KSwhKDErKHg9MTUmdyk+aSkpe24ubmV4dD0yNDticmVha310aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjYXNlIDI0Ok89MSxBPWYucmVhZE51bWJlcigpLG4udDE9ayxuLm5leHQ9MD09PW4udDE/Mjk6MT09PW4udDE/MzU6Mj09PW4udDE/NDE6Mz09PW4udDE/NDY6ND09PW4udDE/NTM6NT09PW4udDE/NTg6NjU7YnJlYWs7Y2FzZSAyOTpmb3IoZi5yZWFkSGV4KHAseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksYy5hZGRDb2Rlc3BhY2VSYW5nZSh4KzEsZShwLHgpLGUoZyx4KSksQz0xO0M8QTtDKyspYShnLHgpLGYucmVhZEhleE51bWJlcihwLHgpLHIocCxnLHgpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGMuYWRkQ29kZXNwYWNlUmFuZ2UoeCsxLGUocCx4KSxlKGcseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDM1OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxmLnJlYWROdW1iZXIoKSxGPTE7RjxBO0YrKylhKGcseCksZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksZi5yZWFkTnVtYmVyKCk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNDE6Zm9yKGYucmVhZEhleCh2LHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBPbmUoZSh2LHgpLGIpLFA9MTtQPEE7UCsrKWEodix4KSxTfHwoZi5yZWFkSGV4TnVtYmVyKG0seCkscih2LG0seCkpLGI9Zi5yZWFkU2lnbmVkKCkrKGIrMSksYy5tYXBPbmUoZSh2LHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDQ2OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxiPWYucmVhZE51bWJlcigpLGMubWFwQ2lkUmFuZ2UoZShwLHgpLGUoZyx4KSxiKSxUPTE7VDxBO1QrKylhKGcseCksUz9wLnNldChnKTooZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCkpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBDaWRSYW5nZShlKHAseCksZShnLHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDUzOmZvcihmLnJlYWRIZXgodixPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcE9uZShlKHYsTyksdCh5LHgpKSxJPTE7STxBO0krKylhKHYsTyksU3x8KGYucmVhZEhleE51bWJlcihtLE8pLHIodixtLE8pKSxhKHkseCksZi5yZWFkSGV4U2lnbmVkKG0seCkscih5LG0seCksYy5tYXBPbmUoZSh2LE8pLHQoeSx4KSk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNTg6Zm9yKGYucmVhZEhleChwLE8pLGYucmVhZEhleE51bWJlcihnLE8pLHIoZyxwLE8pLGYucmVhZEhleCh5LHgpLGMubWFwQmZSYW5nZShlKHAsTyksZShnLE8pLHQoeSx4KSksRT0xO0U8QTtFKyspYShnLE8pLFM/cC5zZXQoZyk6KGYucmVhZEhleE51bWJlcihwLE8pLHIocCxnLE8pKSxmLnJlYWRIZXhOdW1iZXIoZyxPKSxyKGcscCxPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcEJmUmFuZ2UoZShwLE8pLGUoZyxPKSx0KHkseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDY1OnRocm93IG5ldyBFcnJvcigiQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzIC0gdW5rbm93biB0eXBlOiAiLmNvbmNhdChrKSk7Y2FzZSA2NjpuLm5leHQ9OTticmVhaztjYXNlIDY4OmlmKCFkKXtuLm5leHQ9NzA7YnJlYWt9cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGwoZCkpO2Nhc2UgNzA6cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksZnVuY3Rpb24oZSx0LHIpe3JldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLG59KCk7cmV0dXJuIHN9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHIoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gbChyLG4pe2Zvcig7Oyl7dmFyIGk9bi5nZXRPYmooKTtpZihpPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkoaSwiZW5kYmZjaGFyIikpcmV0dXJuO3QoaSk7dmFyIG89ZShpKTt0KGk9bi5nZXRPYmooKSk7dmFyIHM9aTtyLm1hcE9uZShvLHMpfX1mdW5jdGlvbiBoKHIsaSl7Zm9yKDs7KXt2YXIgbz1pLmdldE9iaigpO2lmKG89PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShvLCJlbmRiZnJhbmdlIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTt0KG89aS5nZXRPYmooKSk7dmFyIGM9ZShvKTtpZihvPWkuZ2V0T2JqKCksTnVtYmVyLmlzSW50ZWdlcihvKXx8InN0cmluZyI9PXR5cGVvZiBvKXt2YXIgdT1OdW1iZXIuaXNJbnRlZ2VyKG8pP1N0cmluZy5mcm9tQ2hhckNvZGUobyk6bztyLm1hcEJmUmFuZ2UocyxjLHUpfWVsc2V7aWYoISgwLGEuaXNDbWQpKG8sIlsiKSlicmVhaztvPWkuZ2V0T2JqKCk7Zm9yKHZhciBsPVtdOyEoMCxhLmlzQ21kKShvLCJdIikmJm8hPT1hLkVPRjspbC5wdXNoKG8pLG89aS5nZXRPYmooKTtyLm1hcEJmUmFuZ2VUb0FycmF5KHMsYyxsKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gZChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkY2hhciIpKXJldHVybjt0KG8pO3ZhciBzPWUobyk7cihvPWkuZ2V0T2JqKCkpO3ZhciBjPW87bi5tYXBPbmUocyxjKX19ZnVuY3Rpb24gcChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkcmFuZ2UiKSlyZXR1cm47dChvKTt2YXIgcz1lKG8pO3Qobz1pLmdldE9iaigpKTt2YXIgYz1lKG8pO3Iobz1pLmdldE9iaigpKTt2YXIgdT1vO24ubWFwQ2lkUmFuZ2UocyxjLHUpfX1mdW5jdGlvbiBnKHQscil7Zm9yKDs7KXt2YXIgaT1yLmdldE9iaigpO2lmKGk9PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZigic3RyaW5nIiE9dHlwZW9mIGkpYnJlYWs7dmFyIG89ZShpKTtpZigic3RyaW5nIiE9dHlwZW9mKGk9ci5nZXRPYmooKSkpYnJlYWs7dmFyIHM9ZShpKTt0LmFkZENvZGVzcGFjZVJhbmdlKGkubGVuZ3RoLG8scyl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHYoZSx0KXt2YXIgcj10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIocikmJihlLnZlcnRpY2FsPSEhcil9ZnVuY3Rpb24geShlLHQpe3ZhciByPXQuZ2V0T2JqKCk7ciBpbnN0YW5jZW9mIGEuTmFtZSYmKGUubmFtZT1yLm5hbWUpfWZ1bmN0aW9uIGIoZSx0LHIsbil7cmV0dXJuIHguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHgoKXtyZXR1cm4oeD1mKHUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixpLG8pe3ZhciBjLGYsbTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGUucHJldj0xLChtPXIuZ2V0T2JqKCkpIT09YS5FT0Ype2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiYnJlYWsiLDM5KTtjYXNlIDc6aWYoIShtIGluc3RhbmNlb2YgYS5OYW1lKSl7ZS5uZXh0PTEyO2JyZWFrfSJXTW9kZSI9PT1tLm5hbWU/dih0LHIpOiJDTWFwTmFtZSI9PT1tLm5hbWUmJnkodCxyKSxjPW0sZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMTI6aWYoIShtIGluc3RhbmNlb2YgYS5DbWQpKXtlLm5leHQ9Mjk7YnJlYWt9ZS50MD1tLmNtZCxlLm5leHQ9ImVuZGNtYXAiPT09ZS50MD8xNjoidXNlY21hcCI9PT1lLnQwPzE3OiJiZWdpbmNvZGVzcGFjZXJhbmdlIj09PWUudDA/MTk6ImJlZ2luYmZjaGFyIj09PWUudDA/MjE6ImJlZ2luY2lkY2hhciI9PT1lLnQwPzIzOiJiZWdpbmJmcmFuZ2UiPT09ZS50MD8yNToiYmVnaW5jaWRyYW5nZSI9PT1lLnQwPzI3OjI5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMzkpO2Nhc2UgMTc6cmV0dXJuIGMgaW5zdGFuY2VvZiBhLk5hbWUmJihmPWMubmFtZSksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAxOTpyZXR1cm4gZyh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjE6cmV0dXJuIGwodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDIzOnJldHVybiBkKHQsciksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAyNTpyZXR1cm4gaCh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjc6cmV0dXJuIHAodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDI5OmUubmV4dD0zNzticmVhaztjYXNlIDMxOmlmKGUucHJldj0zMSxlLnQxPWUuY2F0Y2goMSksIShlLnQxIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpe2UubmV4dD0zNTticmVha310aHJvdyBlLnQxO2Nhc2UgMzU6cmV0dXJuKDAsbi53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZS50MSksZS5hYnJ1cHQoImNvbnRpbnVlIiwwKTtjYXNlIDM3OmUubmV4dD0wO2JyZWFrO2Nhc2UgMzk6aWYoIW8mJmYmJihvPWYpLCFvKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLE8odCxpLG8pKTtjYXNlIDQyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDQzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbMSwzMV1dKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKGUsdCxyKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQSgpe3JldHVybihBPWYodSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGk7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsQyhuLHIpO2Nhc2UgMjppZih0LnVzZUNNYXA9ZS5zZW50LDA9PT10Lm51bUNvZGVzcGFjZVJhbmdlcyl7Zm9yKGE9dC51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcyxpPTA7aTxhLmxlbmd0aDtpKyspdC5jb2Rlc3BhY2VSYW5nZXNbaV09YVtpXS5zbGljZSgpO3QubnVtQ29kZXNwYWNlUmFuZ2VzPXQudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIHQudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuY29udGFpbnMoZSl8fHQubWFwT25lKGUsdC51c2VDTWFwLmxvb2t1cChlKSl9KSksZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQyhlLHQpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGKCl7cmV0dXJuKEY9Zih1KCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBhLGkscyxsLGY7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiSWRlbnRpdHktSCIhPT10KXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITEsMikpO2Nhc2UgNDppZigiSWRlbnRpdHktViIhPT10KXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITAsMikpO2Nhc2UgNjppZihtLmluY2x1ZGVzKHQpKXtlLm5leHQ9ODticmVha310aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiK3QpO2Nhc2UgODppZihyKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIscih0KTtjYXNlIDEyOmlmKGE9ZS5zZW50LGk9YS5jTWFwRGF0YSxzPWEuY29tcHJlc3Npb25UeXBlLGw9bmV3IHcoITApLHMhPT1uLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZKXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChuZXcgUykucHJvY2VzcyhpLGwsKGZ1bmN0aW9uKGUpe3JldHVybiBPKGwscixlKX0pKSk7Y2FzZSAxODppZihzIT09bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2UubmV4dD0yMTticmVha31yZXR1cm4gZj1uZXcgby5MZXhlcihuZXcgYy5TdHJlYW0oaSkpLGUuYWJydXB0KCJyZXR1cm4iLGIobCxmLHIsbnVsbCkpO2Nhc2UgMjE6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIENNYXAgImNvbXByZXNzaW9uVHlwZSIgdmFsdWU6ICcuY29uY2F0KHMpKTtjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJue2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZih1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4scyxjO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1lLmVuY29kaW5nLG49ZS5mZXRjaEJ1aWx0SW5DTWFwLHM9ZS51c2VDTWFwLCEociBpbnN0YW5jZW9mIGEuTmFtZSkpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixDKHIubmFtZSxuKSk7Y2FzZSA3OmlmKCEociBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSkpe3QubmV4dD0xNDticmVha31yZXR1cm4gdC5uZXh0PTEwLGIobmV3IHcsbmV3IG8uTGV4ZXIociksbixzKTtjYXNlIDEwOmlmKCEoYz10LnNlbnQpLmlzSWRlbnRpdHlDTWFwKXt0Lm5leHQ9MTM7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEMoYy5uYW1lLG4pKTtjYXNlIDEzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIik7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSgpfX19KCk7dC5DTWFwRmFjdG9yeT14fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGFyc2VyPXQuTGluZWFyaXphdGlvbj10LkxleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpLG89cigxNDcpLHM9cigxNDkpLGM9cigxNTApLHU9cigxNTIpLGw9cigxNTMpLGY9cigxNTYpLGg9cigxNTgpLGQ9cigxNjApLHA9cigxMzkpLGc9cigxNjEpLHY9cigxNjIpO2Z1bmN0aW9uIHkoZSl7cmV0dXJuIHk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHkoZSl9ZnVuY3Rpb24gbShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT15KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB3KGUsdCxyKXtyZXR1cm4gdCYmYihlLnByb3RvdHlwZSx0KSxyJiZiKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5sZXhlcixuPXQueHJlZixhPXQuYWxsb3dTdHJlYW1zLGk9dm9pZCAwIT09YSYmYSxvPXQucmVjb3ZlcnlNb2RlLHM9dm9pZCAwIT09byYmbzttKHRoaXMsZSksdGhpcy5sZXhlcj1yLHRoaXMueHJlZj1uLHRoaXMuYWxsb3dTdHJlYW1zPWksdGhpcy5yZWNvdmVyeU1vZGU9cyx0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbWFnZUlkPTAsdGhpcy5yZWZpbGwoKX1yZXR1cm4gdyhlLFt7a2V5OiJyZWZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5idWYxPXRoaXMubGV4ZXIuZ2V0T2JqKCksdGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJ1ZjIgaW5zdGFuY2VvZiBhLkNtZCYmIklEIj09PXRoaXMuYnVmMi5jbWQ/KHRoaXMuYnVmMT10aGlzLmJ1ZjIsdGhpcy5idWYyPW51bGwpOih0aGlzLmJ1ZjE9dGhpcy5idWYyLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpKX19LHtrZXk6InRyeVNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5zaGlmdCgpLCEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9dGhpcy5idWYxO2lmKHRoaXMuc2hpZnQoKSx0IGluc3RhbmNlb2YgYS5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpmb3IodmFyIHI9W107ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspci5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHI7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9cmV0dXJuIHRoaXMuc2hpZnQoKSxyO2Nhc2UiPDwiOmZvcih2YXIgbz1uZXcgYS5EaWN0KHRoaXMueHJlZik7ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09YS5FT0Y7KWlmKHRoaXMuYnVmMSBpbnN0YW5jZW9mIGEuTmFtZSl7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO28uc2V0KHMsdGhpcy5nZXRPYmooZSkpfWVsc2UoMCxuLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpLHRoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIG87dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1yZXR1cm4oMCxhLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShvLGUpOm86KHRoaXMuc2hpZnQoKSxvKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJSIikpe3ZhciBjPWEuUmVmLmdldCh0LHRoaXMuYnVmMSk7cmV0dXJuIHRoaXMuc2hpZnQoKSx0aGlzLnNoaWZ0KCksY31yZXR1cm4gdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJmU/ZS5kZWNyeXB0U3RyaW5nKHQpOnR9fSx7a2V5OiJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbz10aGlzLmxleGVyLHM9ZS5wb3MsYz0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YyljPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YyljPTczPT09dD8yOjA7ZWxzZSBpZigzMj09PXR8fDEwPT09dHx8MTM9PT10KXtyPWUucG9zO2Zvcih2YXIgdT1lLnBlZWtCeXRlcygxMCksbD0wLGY9dS5sZW5ndGg7bDxmO2wrKylpZigoMCE9PSh0PXVbbF0pfHwwPT09dVtsKzFdKSYmMTAhPT10JiYxMyE9PXQmJih0PDMyfHx0PjEyNykpe2M9MDticmVha31pZigyIT09Yyljb250aW51ZTtpZihvLmtub3duQ29tbWFuZHMpe3ZhciBoPW8ucGVla09iaigpO2ggaW5zdGFuY2VvZiBhLkNtZCYmIW8ua25vd25Db21tYW5kc1toLmNtZF0mJihjPTApfWVsc2UoMCxuLndhcm4pKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCAtIGBsZXhlci5rbm93bkNvbW1hbmRzYCBpcyB1bmRlZmluZWQuIik7aWYoMj09PWMpYnJlYWt9ZWxzZSBjPTA7LTE9PT10JiYoKDAsbi53YXJuKSgiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhvdXQgZmluZGluZyBhIHZhbGlkIEVJIG1hcmtlciIpLHImJigoMCxuLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpLGUuc2tpcCgtKGUucG9zLXIpKSkpO3ZhciBkPTQ7cmV0dXJuIGUuc2tpcCgtZCksdD1lLnBlZWtCeXRlKCksZS5za2lwKGQpLCgwLGkuaXNXaGl0ZVNwYWNlKSh0KXx8ZC0tLGUucG9zLWQtc319LHtrZXk6ImZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLGE9ZS5wb3MsaT0hMTstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09dCl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0OihyPWUuZ2V0VWludDE2KCkpPjI/ZS5za2lwKHItMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfXZhciBvPWUucG9zLWE7cmV0dXJuLTE9PT10PygoMCxuLndhcm4pKCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtbyksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLG8pfX0se2tleToiZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigxMjY9PT10KXt2YXIgYT1lLnBvcztmb3IodD1lLnBlZWtCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyllLnNraXAoKSx0PWUucGVla0J5dGUoKTtpZig2Mj09PXQpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPmEpe3ZhciBvPWUucGVla0J5dGVzKDIpO2lmKDY5PT09b1swXSYmNzM9PT1vWzFdKWJyZWFrfX12YXIgcz1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1zKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSkscyl9fSx7a2V5OiJmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpJiY2MiE9PXQ7KTt2YXIgYT1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtYSksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLGEpfX0se2tleToiaW5saW5lU3RyZWFtU2tpcEVJIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09cilyPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09cilyPTczPT09dD8yOjA7ZWxzZSBpZigyPT09cilicmVha319LHtrZXk6Im1ha2VJbmxpbmVJbWFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5sZXhlcixpPXIuc3RyZWFtLG89T2JqZWN0LmNyZWF0ZShudWxsKTshKDAsYS5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2YgYS5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO29bc109dGhpcy5nZXRPYmooZSl9LTEhPT1yLmJlZ2luSW5saW5lSW1hZ2VQb3MmJih0PWkucG9zLXIuYmVnaW5JbmxpbmVJbWFnZVBvcyk7dmFyIGMsdT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvLkZ8fG8uRmlsdGVyKTtpZih1IGluc3RhbmNlb2YgYS5OYW1lKWM9dS5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9dGhpcy54cmVmLmZldGNoSWZSZWYodVswXSk7bCBpbnN0YW5jZW9mIGEuTmFtZSYmKGM9bC5uYW1lKX12YXIgZixoLGQ9aS5wb3M7c3dpdGNoKGMpe2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Zj10aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoaSk7YnJlYWs7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6Zj10aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpmPXRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2RlZmF1bHQ6Zj10aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGkpfWlmKGY8MWUzJiZ0PjApe3ZhciBwPWkucG9zO2kucG9zPXIuYmVnaW5JbmxpbmVJbWFnZVBvcyxoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPWUubGVuZ3RoLG49MDtuPHItMTspdC5wdXNoKGVbbisrXTw8OHxlW24rK10pO3JldHVybiBuPHImJnQucHVzaChlW25dKSxyKyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9KGkuZ2V0Qnl0ZXModCtmKSksaS5wb3M9cDt2YXIgZz10aGlzLmltYWdlQ2FjaGVbaF07aWYodm9pZCAwIT09ZylyZXR1cm4gdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksZy5yZXNldCgpLGd9dmFyIHY9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2Zvcih2YXIgeSBpbiBvKXYuc2V0KHksb1t5XSk7dmFyIG09aS5tYWtlU3ViU3RyZWFtKGQsZix2KTtyZXR1cm4gZSYmKG09ZS5jcmVhdGVTdHJlYW0obSxmKSksKG09dGhpcy5maWx0ZXIobSx2LGYpKS5kaWN0PXYsdm9pZCAwIT09aCYmKG0uY2FjaGVLZXk9ImlubGluZV9pbWdfIi5jb25jYXQoKyt0aGlzLl9pbWFnZUlkKSx0aGlzLmltYWdlQ2FjaGVbaF09bSksdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbX19LHtrZXk6Il9maW5kU3RyZWFtTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIuc3RyZWFtO3IucG9zPWU7Zm9yKHZhciBuPXQubGVuZ3RoO3IucG9zPHIuZW5kOyl7dmFyIGE9ci5wZWVrQnl0ZXMoMjA0OCksaT1hLmxlbmd0aC1uO2lmKGk8PTApYnJlYWs7Zm9yKHZhciBvPTA7bzxpOyl7Zm9yKHZhciBzPTA7czxuJiZhW28rc109PT10W3NdOylzKys7aWYocz49bilyZXR1cm4gci5wb3MrPW8sci5wb3MtZTtvKyt9ci5wb3MrPWl9cmV0dXJuLTF9fSx7a2V5OiJtYWtlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIsbz1yLnN0cmVhbTtyLnNraXBUb05leHRMaW5lKCk7dmFyIHM9by5wb3MtMSxjPWUuZ2V0KCJMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGMpfHwoKDAsbi5pbmZvKSgnQmFkIGxlbmd0aCAiJy5jb25jYXQoYyYmYy50b1N0cmluZygpLCciIGluIHN0cmVhbS4nKSksYz0wKSxvLnBvcz1zK2Msci5uZXh0Q2hhcigpLHRoaXMudHJ5U2hpZnQoKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXt2YXIgdT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChzLHUpO2lmKGw8MCl7Zm9yKHZhciBmPTE7Zjw9MTtmKyspe3ZhciBoPXUubGVuZ3RoLWYsZD11LnNsaWNlKDAsaCkscD10aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHMsZCk7aWYocD49MCl7dmFyIGc9by5wZWVrQnl0ZXMoaCsxKVtoXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGcpKWJyZWFrOygwLG4uaW5mbykoJ0ZvdW5kICInLmNvbmNhdCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGQpLCciIHdoZW4gJykrInNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuIiksbD1wO2JyZWFrfX1pZihsPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz1sLHIubmV4dENoYXIoKSx0aGlzLnNoaWZ0KCksdGhpcy5zaGlmdCgpfXJldHVybiB0aGlzLnNoaWZ0KCksbz1vLm1ha2VTdWJTdHJlYW0ocyxjLGUpLHQmJihvPXQuY3JlYXRlU3RyZWFtKG8sYykpLChvPXRoaXMuZmlsdGVyKG8sZSxjKSkuZGljdD1lLG99fSx7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10LmdldCgiRiIsIkZpbHRlciIpLG89dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2YgYS5OYW1lKXJldHVybiBBcnJheS5pc0FycmF5KG8pJiYoMCxuLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKSx0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUscixvKTt2YXIgcz1yO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBjPWksdT1vLGw9MCxmPWMubGVuZ3RoO2w8ZjsrK2wpe2lmKCEoKGk9dGhpcy54cmVmLmZldGNoSWZSZWYoY1tsXSkpaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdCYWQgZmlsdGVyIG5hbWUgIicuY29uY2F0KGksJyInKSk7bz1udWxsLEFycmF5LmlzQXJyYXkodSkmJmwgaW4gdSYmKG89dGhpcy54cmVmLmZldGNoSWZSZWYodVtsXSkpLGU9dGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLHMsbykscz1udWxsfXJldHVybiBlfX0se2tleToibWFrZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7aWYoMD09PXIpcmV0dXJuKDAsbi53YXJuKSgnRW1wdHkgIicuY29uY2F0KHQsJyIgc3RyZWFtLicpKSxuZXcgcC5OdWxsU3RyZWFtO3ZhciB5PXRoaXMueHJlZi5zdGF0czt0cnl7c3dpdGNoKHQpe2Nhc2UiRmwiOmNhc2UiRmxhdGVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkZMQVRFKSxhP25ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgdS5GbGF0ZVN0cmVhbShlLHIpLHIsYSk6bmV3IHUuRmxhdGVTdHJlYW0oZSxyKTtjYXNlIkxaVyI6Y2FzZSJMWldEZWNvZGUiOnkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuTFpXKTt2YXIgbT0xO3JldHVybiBhPyhhLmhhcygiRWFybHlDaGFuZ2UiKSYmKG09YS5nZXQoIkVhcmx5Q2hhbmdlIikpLG5ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgZC5MWldTdHJlYW0oZSxyLG0pLHIsYSkpOm5ldyBkLkxaV1N0cmVhbShlLHIsbSk7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5EQ1QpLG5ldyBmLkpwZWdTdHJlYW0oZSxyLGEpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIHkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuSlBYKSxuZXcgaC5KcHhTdHJlYW0oZSxyLGEpO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkE4NSksbmV3IG8uQXNjaWk4NVN0cmVhbShlLHIpO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5BSFgpLG5ldyBzLkFzY2lpSGV4U3RyZWFtKGUscik7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkNDRiksbmV3IGMuQ0NJVFRGYXhTdHJlYW0oZSxyLGEpO2Nhc2UiUkwiOmNhc2UiUnVuTGVuZ3RoRGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5STFgpLG5ldyB2LlJ1bkxlbmd0aFN0cmVhbShlLHIpO2Nhc2UiSkJJRzJEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkpCSUcpLG5ldyBsLkpiaWcyU3RyZWFtKGUscixhKX1yZXR1cm4oMCxuLndhcm4pKCdGaWx0ZXIgIicuY29uY2F0KHQsJyIgaXMgbm90IHN1cHBvcnRlZC4nKSksZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLG4ud2FybikoJ0ludmFsaWQgc3RyZWFtOiAiJy5jb25jYXQoZSwnIicpKSxuZXcgcC5OdWxsU3RyZWFtfX19XSksZX0oKTt0LlBhcnNlcj1rO3ZhciBTPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO20odGhpcyxlKSx0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKSx0aGlzLnN0ckJ1Zj1bXSx0aGlzLmtub3duQ29tbWFuZHM9cix0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTAsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPS0xfXJldHVybiB3KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6InBlZWtDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfX0se2tleToiZ2V0TnVtYmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxyPTAsYT0wO2lmKDQ1PT09ZT8oYT0tMSw0NT09PShlPXRoaXMubmV4dENoYXIoKSkmJihlPXRoaXMubmV4dENoYXIoKSkpOjQzPT09ZSYmKGE9MSxlPXRoaXMubmV4dENoYXIoKSksMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSYmKHI9MTAsZT10aGlzLm5leHRDaGFyKCkpLGU8NDh8fGU+NTcpe3ZhciBvPSJJbnZhbGlkIG51bWJlcjogIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiIChjaGFyQ29kZSAiKS5jb25jYXQoZSwiKSIpO2lmKCgwLGkuaXNXaGl0ZVNwYWNlKShlKXx8LTE9PT1lKXJldHVybigwLG4uaW5mbykoJ0xleGVyLmdldE51bWJlciAtICInLmNvbmNhdChvLCciLicpKSwwO3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKG8pfWE9YXx8MTtmb3IodmFyIHM9ZS00OCxjPTAsdT0xOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKGU+PTQ4JiZlPD01Nyl7dmFyIGw9ZS00ODt0P2M9MTAqYytsOigwIT09ciYmKHIqPTEwKSxzPTEwKnMrbCl9ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1yKWJyZWFrO3I9MX1lbHNlIGlmKDQ1PT09ZSkoMCxuLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGUiKTtlbHNle2lmKDY5IT09ZSYmMTAxIT09ZSlicmVhaztpZig0Mz09PShlPXRoaXMucGVla0NoYXIoKSl8fDQ1PT09ZSl1PTQ1PT09ZT8tMToxLHRoaXMubmV4dENoYXIoKTtlbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH1yZXR1cm4gMCE9PXImJihzLz1yKSx0JiYocyo9TWF0aC5wb3coMTAsdSpjKSksYSpzfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTEsdD0hMSxyPXRoaXMuc3RyQnVmO3IubGVuZ3RoPTA7Zm9yKHZhciBhPXRoaXMubmV4dENoYXIoKTs7KXt2YXIgaT0hMTtzd2l0Y2goMHxhKXtjYXNlLTE6KDAsbi53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpLHQ9ITA7YnJlYWs7Y2FzZSA0MDorK2Usci5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTowPT0tLWU/KHRoaXMubmV4dENoYXIoKSx0PSEwKTpyLnB1c2goIikiKTticmVhaztjYXNlIDkyOnN3aXRjaChhPXRoaXMubmV4dENoYXIoKSl7Y2FzZS0xOigwLG4ud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKSx0PSEwO2JyZWFrO2Nhc2UgMTEwOnIucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDpyLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6ci5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6ci5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOnIucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OnZhciBvPTE1JmE7aT0hMCwoYT10aGlzLm5leHRDaGFyKCkpPj00OCYmYTw9NTUmJihvPShvPDwzKSsoMTUmYSksKGE9dGhpcy5uZXh0Q2hhcigpKT49NDgmJmE8PTU1JiYoaT0hMSxvPShvPDwzKSsoMTUmYSkpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShvKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9aWYodClicmVhaztpfHwoYT10aGlzLm5leHRDaGFyKCkpfXJldHVybiByLmpvaW4oIiIpfX0se2tleToiZ2V0TmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIVNbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCksU1tlXSl7KDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxyLnB1c2goIiMiKTticmVha312YXIgaT14KGUpO2lmKC0xIT09aSl7dD1lO3ZhciBvPXgoZT10aGlzLm5leHRDaGFyKCkpO2lmKC0xPT09byl7aWYoKDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiKSAiKSsiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLiIpLHIucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZSh0KSksU1tlXSlicmVhaztyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29udGludWV9ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaTw8NHxvKSl9ZWxzZSByLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWVsc2Ugci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiByLmxlbmd0aD4xMjcmJigwLG4ud2FybikoIk5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogIi5jb25jYXQoci5sZW5ndGgpKSxhLk5hbWUuZ2V0KHIuam9pbigiIikpfX0se2tleToiX2hleFN0cmluZ1dhcm4iLHZhbHVlOmZ1bmN0aW9uKGUpezUhPXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fCgwLG4ud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAiLmNvbmNhdChlKSk6KDAsbi53YXJuKSgiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9fSx7a2V5OiJnZXRIZXhTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDt2YXIgdCxyLGE9dGhpcy5jdXJyZW50Q2hhcixpPSEwO2Zvcih0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTA7Oyl7aWYoYTwwKXsoMCxuLndhcm4pKCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZyIpO2JyZWFrfWlmKDYyPT09YSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEhPT1TW2FdKXtpZihpKXtpZigtMT09PSh0PXgoYSkpKXt0aGlzLl9oZXhTdHJpbmdXYXJuKGEpLGE9dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfX1lbHNle2lmKC0xPT09KHI9eChhKSkpe3RoaXMuX2hleFN0cmluZ1dhcm4oYSksYT10aGlzLm5leHRDaGFyKCk7Y29udGludWV9ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodDw8NHxyKSl9aT0haSxhPXRoaXMubmV4dENoYXIoKX1lbHNlIGE9dGhpcy5uZXh0Q2hhcigpfXJldHVybiBlLmpvaW4oIiIpfX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1TW3RdKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIDYwPT09KHQ9dGhpcy5uZXh0Q2hhcigpKT8odGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiA2Mj09PSh0PXRoaXMubmV4dENoYXIoKSk/KHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIj4+IikpOmEuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgbi5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHQpKX12YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXt2YXIgaT10aGlzLnBlZWtDaGFyKCk7aWYoaT49MzImJmk8PTEyNylyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldChyKX1mb3IodmFyIG89dGhpcy5rbm93bkNvbW1hbmRzLHM9byYmdm9pZCAwIT09b1tyXTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhU1t0XTspe3ZhciBjPXIrU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1vW2NdKWJyZWFrO2lmKDEyOD09PXIubGVuZ3RoKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb21tYW5kIHRva2VuIHRvbyBsb25nOiAiLmNvbmNhdChyLmxlbmd0aCkpO3I9YyxzPW8mJnZvaWQgMCE9PW9bcl19cmV0dXJuInRydWUiPT09cnx8ImZhbHNlIiE9PXImJigibnVsbCI9PT1yP251bGw6KCJCSSI9PT1yJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyksYS5DbWQuZ2V0KHIpKSl9fSx7a2V5OiJwZWVrT2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5zdHJlYW0ucG9zLHI9dGhpcy5jdXJyZW50Q2hhcixhPXRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvczt0cnl7ZT10aGlzLmdldE9iaigpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgicGVla09iajogIi5jb25jYXQoZSkpfXJldHVybiB0aGlzLnN0cmVhbS5wb3M9dCx0aGlzLmN1cnJlbnRDaGFyPXIsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPWEsZX19LHtrZXk6InNraXBUb05leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRDaGFyO2U+PTA7KXtpZigxMz09PWUpezEwPT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19XSksZX0oKTt0LkxleGVyPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bSh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIobikmJihyP24+PTA6bj4wKSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiJy5jb25jYXQodCwnIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gJykrImRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX12YXIgcixuLGk9bmV3IGsoe2xleGVyOm5ldyBPKGUpLHhyZWY6bnVsbH0pLG89aS5nZXRPYmooKSxzPWkuZ2V0T2JqKCksYz1pLmdldE9iaigpLHU9aS5nZXRPYmooKTtpZighKE51bWJlci5pc0ludGVnZXIobykmJk51bWJlci5pc0ludGVnZXIocykmJigwLGEuaXNDbWQpKGMsIm9iaiIpJiZ1IGluc3RhbmNlb2YgYS5EaWN0JiYibnVtYmVyIj09dHlwZW9mKHI9dS5nZXQoIkxpbmVhcml6ZWQiKSkmJnI+MCkpcmV0dXJuIG51bGw7aWYoKG49dCh1LCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6bixoaW50czpmdW5jdGlvbihlKXt2YXIgdCxyPWUuZ2V0KCJIIik7aWYoQXJyYXkuaXNBcnJheShyKSYmKDI9PT0odD1yLmxlbmd0aCl8fDQ9PT10KSl7Zm9yKHZhciBuPTA7bjx0O24rKyl7dmFyIGE9cltuXTtpZighKE51bWJlci5pc0ludGVnZXIoYSkmJmE+MCkpdGhyb3cgbmV3IEVycm9yKCJIaW50ICgiLmNvbmNhdChuLCIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKSl9cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX0odSksb2JqZWN0TnVtYmVyRmlyc3Q6dCh1LCJPIiksZW5kRmlyc3Q6dCh1LCJFIiksbnVtUGFnZXM6dCh1LCJOIiksbWFpblhSZWZFbnRyaWVzT2Zmc2V0OnQodSwiVCIpLHBhZ2VGaXJzdDp1LmhhcygiUCIpP3QodSwiUCIsITApOjB9fX1dKSxlfSgpO3QuTGluZWFyaXphdGlvbj1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gcz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHMoZSx0KX1mdW5jdGlvbiBjKGUpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxjKGUpfXZhciB1PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KGYsZSk7dmFyIHQscixhLHUsbD0oYT1mLHU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHUpe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxmKSx0JiYodCo9LjgpLChyPWwuY2FsbCh0aGlzLHQpKS5zdHI9ZSxyLmRpY3Q9ZS5kaWN0LHIuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSkscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3RyLHQ9ZS5nZXRCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xIT09dCYmMTI2IT09dCl7dmFyIHIsbixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDEyMj09PXQpe2ZvcihyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCksbj0wO248NDsrK24pclthK25dPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXt2YXIgbz10aGlzLmlucHV0O2ZvcihvWzBdPXQsbj0xO248NTsrK24pe2Zvcih0PWUuZ2V0Qnl0ZSgpOygwLGkuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZihvW25dPXQsLTE9PT10fHwxMjY9PT10KWJyZWFrfWlmKHI9dGhpcy5lbnN1cmVCdWZmZXIoYStuLTEpLHRoaXMuYnVmZmVyTGVuZ3RoKz1uLTEsbjw1KXtmb3IoO248NTsrK24pb1tuXT0xMTc7dGhpcy5lb2Y9ITB9dmFyIHM9MDtmb3Iobj0wO248NTsrK24pcz04NSpzKyhvW25dLTMzKTtmb3Iobj0zO24+PTA7LS1uKXJbYStuXT0yNTUmcyxzPj49OH19ZWxzZSB0aGlzLmVvZj0hMH19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZn0oYS5EZWNvZGVTdHJlYW0pO3QuQXNjaWk4NVN0cmVhbT11fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09dC5EZWNvZGVTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTM5KTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9bmV3IFVpbnQ4QXJyYXkoMCkseT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO2lmKHUodGhpcyxyKSwobj10LmNhbGwodGhpcykpLl9yYXdNaW5CdWZmZXJMZW5ndGg9ZXx8MCxuLnBvcz0wLG4uYnVmZmVyTGVuZ3RoPTAsbi5lb2Y9ITEsbi5idWZmZXI9dixuLm1pbkJ1ZmZlckxlbmd0aD01MTIsZSlmb3IoO24ubWluQnVmZmVyTGVuZ3RoPGU7KW4ubWluQnVmZmVyTGVuZ3RoKj0yO3JldHVybiBufXJldHVybiBmKHIsW3trZXk6ImlzRW1wdHkiLGdldDpmdW5jdGlvbigpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgcj10aGlzLm1pbkJ1ZmZlckxlbmd0aDtyPGU7KXIqPTI7dmFyIG49bmV3IFVpbnQ4QXJyYXkocik7cmV0dXJuIG4uc2V0KHQpLHRoaXMuYnVmZmVyPW59fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5wb3M7aWYoZSl7Zm9yKHRoaXMuZW5zdXJlQnVmZmVyKHIrZSksdD1yK2U7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDx0Oyl0aGlzLnJlYWRCbG9jaygpO3ZhciBuPXRoaXMuYnVmZmVyTGVuZ3RoO3Q+biYmKHQ9bil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTt0PXRoaXMuYnVmZmVyTGVuZ3RofXJldHVybiB0aGlzLnBvcz10LHRoaXMuYnVmZmVyLnN1YmFycmF5KHIsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz0wfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2UgZm9yKHZhciBuPWUrdDt0aGlzLmJ1ZmZlckxlbmd0aDw9biYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiBuZXcgaS5TdHJlYW0odGhpcy5idWZmZXIsZSx0LHIpfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19XSkscn0oYS5CYXNlU3RyZWFtKTt0LkRlY29kZVN0cmVhbT15O3ZhciBtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt1KHRoaXMscik7dmFyIGkscz0wLGM9byhlKTt0cnl7Zm9yKGMucygpOyEoaT1jLm4oKSkuZG9uZTspe3ZhciBsPWkudmFsdWU7cys9bCBpbnN0YW5jZW9mIHk/bC5fcmF3TWluQnVmZmVyTGVuZ3RoOmwubGVuZ3RofX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm4obj10LmNhbGwodGhpcyxzKSkuc3RyZWFtcz1lLG4uX29uRXJyb3I9YSxufXJldHVybiBmKHIsW3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbXM7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdCxyPWUuc2hpZnQoKTt0cnl7dD1yLmdldEJ5dGVzKCl9Y2F0Y2goZSl7aWYodGhpcy5fb25FcnJvcilyZXR1cm4gdm9pZCB0aGlzLl9vbkVycm9yKGUsci5kaWN0JiZyLmRpY3Qub2JqSWQpO3Rocm93IGV9dmFyIG49dGhpcy5idWZmZXJMZW5ndGgsYT1uK3QubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKGEpLnNldCh0LG4pLHRoaXMuYnVmZmVyTGVuZ3RoPWF9ZWxzZSB0aGlzLmVvZj0hMH19LHtrZXk6ImdldEJhc2VTdHJlYW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj1bXSxuPW8odGhpcy5zdHJlYW1zKTt0cnl7Zm9yKG4ucygpOyEoZT1uLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWUuZ2V0QmFzZVN0cmVhbXMoKTthJiZyLnB1c2guYXBwbHkocixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBjKGUpfSh0PWEpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHQpfHxzKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIubGVuZ3RoPjA/cjpudWxsfX1dKSxyfSh5KTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1tfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxzKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgYz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShmLGUpO3ZhciB0LHIsYyx1LGw9KGM9Zix1PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9cyhjKTtpZih1KXt2YXIgcj1zKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBmKGUsdCl7dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZiksdCYmKHQqPS41KSwocj1sLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyLmZpcnN0RGlnaXQ9LTEscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZihlLmxlbmd0aCl7dmFyIHQscj1lLmxlbmd0aCsxPj4xLG49dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrciksaT10aGlzLmJ1ZmZlckxlbmd0aCxvPXRoaXMuZmlyc3REaWdpdCxzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IG99fX19KGUpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZSx1PXZvaWQgMDtpZihjPj00OCYmYzw9NTcpdT0xNSZjO2Vsc2V7aWYoIShjPj02NSYmYzw9NzB8fGM+PTk3JiZjPD0xMDIpKXtpZig2Mj09PWMpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfXU9OSsoMTUmYyl9bzwwP289dToobltpKytdPW88PDR8dSxvPS0xKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9bz49MCYmdGhpcy5lb2YmJihuW2krK109bzw8NCxvPS0xKSx0aGlzLmZpcnN0RGlnaXQ9byx0aGlzLmJ1ZmZlckxlbmd0aD1pfWVsc2UgdGhpcy5lb2Y9ITB9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGZ9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuQXNjaWlIZXhTdHJlYW09Y30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTUxKSxpPXIoMTQ4KSxvPXIoMTM0KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9dmFyIGw9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oaCxlKTt2YXIgdCxyLGksbCxmPShpPWgsbD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PXUoaSk7aWYobCl7dmFyIHI9dSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gaChlLHQscil7dmFyIG47IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsaCksKG49Zi5jYWxsKHRoaXMsdCkpLnN0cj1lLG4uZGljdD1lLmRpY3QsciBpbnN0YW5jZW9mIG8uRGljdHx8KHI9by5EaWN0LmVtcHR5KTt2YXIgaT17bmV4dDpmdW5jdGlvbigpe3JldHVybiBlLmdldEJ5dGUoKX19O3JldHVybiBuLmNjaXR0RmF4RGVjb2Rlcj1uZXcgYS5DQ0lUVEZheERlY29kZXIoaSx7SzpyLmdldCgiSyIpLEVuZE9mTGluZTpyLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjpyLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6ci5nZXQoIkNvbHVtbnMiKSxSb3dzOnIuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazpyLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOnIuZ2V0KCJCbGFja0lzMSIpfSksbn1yZXR1cm4gdD1oLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDshdGhpcy5lb2Y7KXt2YXIgZT10aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtpZigtMT09PWUpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO3RoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpLHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxofShpLkRlY29kZVN0cmVhbSk7dC5DQ0lUVEZheFN0cmVhbT1sfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGEoZSl9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBvPS0xLHM9W1stMSwtMV0sWy0xLC0xXSxbNyw4XSxbNyw3XSxbNiw2XSxbNiw2XSxbNiw1XSxbNiw1XSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXV0sYz1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLHU9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzgsMjldLFs4LDI5XSxbOCwzMF0sWzgsMzBdLFs4LDQ1XSxbOCw0NV0sWzgsNDZdLFs4LDQ2XSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjNdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs4LDQ3XSxbOCw0N10sWzgsNDhdLFs4LDQ4XSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbOCwzM10sWzgsMzNdLFs4LDM0XSxbOCwzNF0sWzgsMzVdLFs4LDM1XSxbOCwzNl0sWzgsMzZdLFs4LDM3XSxbOCwzN10sWzgsMzhdLFs4LDM4XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzgsMzFdLFs4LDMxXSxbOCwzMl0sWzgsMzJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzgsNTNdLFs4LDUzXSxbOCw1NF0sWzgsNTRdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbOCwzOV0sWzgsMzldLFs4LDQwXSxbOCw0MF0sWzgsNDFdLFs4LDQxXSxbOCw0Ml0sWzgsNDJdLFs4LDQzXSxbOCw0M10sWzgsNDRdLFs4LDQ0XSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs4LDYxXSxbOCw2MV0sWzgsNjJdLFs4LDYyXSxbOCw2M10sWzgsNjNdLFs4LDBdLFs4LDBdLFs4LDMyMF0sWzgsMzIwXSxbOCwzODRdLFs4LDM4NF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNywyN10sWzcsMjddLFs3LDI3XSxbNywyN10sWzgsNTldLFs4LDU5XSxbOCw2MF0sWzgsNjBdLFs5LDE0NzJdLFs5LDE1MzZdLFs5LDE2MDBdLFs5LDE3MjhdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzgsNDldLFs4LDQ5XSxbOCw1MF0sWzgsNTBdLFs4LDUxXSxbOCw1MV0sWzgsNTJdLFs4LDUyXSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzgsNTVdLFs4LDU1XSxbOCw1Nl0sWzgsNTZdLFs4LDU3XSxbOCw1N10sWzgsNThdLFs4LDU4XSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzgsNDQ4XSxbOCw0NDhdLFs4LDUxMl0sWzgsNTEyXSxbOSw3MDRdLFs5LDc2OF0sWzgsNjQwXSxbOCw2NDBdLFs4LDU3Nl0sWzgsNTc2XSxbOSw4MzJdLFs5LDg5Nl0sWzksOTYwXSxbOSwxMDI0XSxbOSwxMDg4XSxbOSwxMTUyXSxbOSwxMjE2XSxbOSwxMjgwXSxbOSwxMzQ0XSxbOSwxNDA4XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN11dLGw9W1stMSwtMV0sWy0xLC0xXSxbMTIsLTJdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNDk2XSxbMTIsMjU2MF0sWzEyLDI1NjBdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTIsNTJdLFsxMiw1Ml0sWzEzLDY0MF0sWzEzLDcwNF0sWzEzLDc2OF0sWzEzLDgzMl0sWzEyLDU1XSxbMTIsNTVdLFsxMiw1Nl0sWzEyLDU2XSxbMTMsMTI4MF0sWzEzLDEzNDRdLFsxMywxNDA4XSxbMTMsMTQ3Ml0sWzEyLDU5XSxbMTIsNTldLFsxMiw2MF0sWzEyLDYwXSxbMTMsMTUzNl0sWzEzLDE2MDBdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTMsMTY2NF0sWzEzLDE3MjhdLFsxMiwzMjBdLFsxMiwzMjBdLFsxMiwzODRdLFsxMiwzODRdLFsxMiw0NDhdLFsxMiw0NDhdLFsxMyw1MTJdLFsxMyw1NzZdLFsxMiw1M10sWzEyLDUzXSxbMTIsNTRdLFsxMiw1NF0sWzEzLDg5Nl0sWzEzLDk2MF0sWzEzLDEwMjRdLFsxMywxMDg4XSxbMTMsMTE1Ml0sWzEzLDEyMTZdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XV0sZj1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxoPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs2LDldLFs2LDhdLFs1LDddLFs1LDddLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdXSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSwhdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQubmV4dCl0aHJvdyBuZXcgRXJyb3IoJ0NDSVRURmF4RGVjb2RlciAtIGludmFsaWQgInNvdXJjZSIgcGFyYW1ldGVyLicpO3RoaXMuc291cmNlPXQsdGhpcy5lb2Y9ITEsdGhpcy5lbmNvZGluZz1yLkt8fDAsdGhpcy5lb2xpbmU9ci5FbmRPZkxpbmV8fCExLHRoaXMuYnl0ZUFsaWduPXIuRW5jb2RlZEJ5dGVBbGlnbnx8ITEsdGhpcy5jb2x1bW5zPXIuQ29sdW1uc3x8MTcyOCx0aGlzLnJvd3M9ci5Sb3dzfHwwO3ZhciBuLGE9ci5FbmRPZkJsb2NrO2ZvcihudWxsPT1hJiYoYT0hMCksdGhpcy5lb2Jsb2NrPWEsdGhpcy5ibGFjaz1yLkJsYWNrSXMxfHwhMSx0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKSx0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKSx0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zLHRoaXMuY29kaW5nUG9zPTAsdGhpcy5yb3c9MCx0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwLHRoaXMuaW5wdXRCaXRzPTAsdGhpcy5pbnB1dEJ1Zj0wLHRoaXMub3V0cHV0Qml0cz0wLHRoaXMucm93c0RvbmU9ITE7MD09PShuPXRoaXMuX2xvb2tCaXRzKDEyKSk7KXRoaXMuX2VhdEJpdHMoMSk7MT09PW4mJnRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJyZWFkTmV4dENoYXIiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dmFyIGUsdCxyLGEsaSxzPXRoaXMucmVmTGluZSxjPXRoaXMuY29kaW5nTGluZSx1PXRoaXMuY29sdW1ucztpZigwPT09dGhpcy5vdXRwdXRCaXRzKXtpZih0aGlzLnJvd3NEb25lJiYodGhpcy5lb2Y9ITApLHRoaXMuZW9mKXJldHVybi0xO3ZhciBsLGYsaDtpZih0aGlzLmVycj0hMSx0aGlzLm5leHRMaW5lMkQpe2ZvcihhPTA7Y1thXTx1OysrYSlzW2FdPWNbYV07Zm9yKHNbYSsrXT11LHNbYV09dSxjWzBdPTAsdGhpcy5jb2RpbmdQb3M9MCxlPTAsdD0wO2NbdGhpcy5jb2RpbmdQb3NdPHU7KXN3aXRjaChsPXRoaXMuX2dldFR3b0RpbUNvZGUoKSl7Y2FzZSAwOnRoaXMuX2FkZFBpeGVscyhzW2UrMV0sdCksc1tlKzFdPHUmJihlKz0yKTticmVhaztjYXNlIDE6aWYobD1mPTAsdCl7ZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZG97Zis9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCl9ZWxzZXtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tmKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KX1mb3IodGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2wsdCksY1t0aGlzLmNvZGluZ1Bvc108dSYmdGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2YsMV50KTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgNzppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSszLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoKytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA1OmlmKHRoaXMuX2FkZFBpeGVscyhzW2VdKzIsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcigrK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDM6aWYodGhpcy5fYWRkUGl4ZWxzKHNbZV0rMSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgMjppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgODppZih0aGlzLl9hZGRQaXhlbHNOZWcoc1tlXS0zLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoZT4wPy0tZTorK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDY6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKHNbZV0tMix0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKGU+MD8tLWU6KytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA0OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhzW2VdLTEsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcihlPjA/LS1lOisrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2Ugbzp0aGlzLl9hZGRQaXhlbHModSwwKSx0aGlzLmVvZj0hMDticmVhaztkZWZhdWx0OigwLG4uaW5mbykoImJhZCAyZCBjb2RlIiksdGhpcy5fYWRkUGl4ZWxzKHUsMCksdGhpcy5lcnI9ITB9fWVsc2UgZm9yKGNbMF09MCx0aGlzLmNvZGluZ1Bvcz0wLHQ9MDtjW3RoaXMuY29kaW5nUG9zXTx1Oyl7aWYobD0wLHQpZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZWxzZSBkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTt0aGlzLl9hZGRQaXhlbHMoY1t0aGlzLmNvZGluZ1Bvc10rbCx0KSx0Xj0xfXZhciBkPSExO2lmKHRoaXMuYnl0ZUFsaWduJiYodGhpcy5pbnB1dEJpdHMmPS04KSx0aGlzLmVvYmxvY2t8fHRoaXMucm93IT09dGhpcy5yb3dzLTEpe2lmKGw9dGhpcy5fbG9va0JpdHMoMTIpLHRoaXMuZW9saW5lKWZvcig7bCE9PW8mJjEhPT1sOyl0aGlzLl9lYXRCaXRzKDEpLGw9dGhpcy5fbG9va0JpdHMoMTIpO2Vsc2UgZm9yKDswPT09bDspdGhpcy5fZWF0Qml0cygxKSxsPXRoaXMuX2xvb2tCaXRzKDEyKTsxPT09bD8odGhpcy5fZWF0Qml0cygxMiksZD0hMCk6bD09PW8mJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSksdGhpcy5lb2Jsb2NrJiZkJiZ0aGlzLmJ5dGVBbGlnbil7aWYoMT09PShsPXRoaXMuX2xvb2tCaXRzKDEyKSkpe2lmKHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW5jb2Rpbmc+PTApZm9yKGE9MDthPDQ7KythKTEhPT0obD10aGlzLl9sb29rQml0cygxMikpJiYoMCxuLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrbCksdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSk7dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe2lmKChsPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiB0aGlzLmVvZj0hMCwtMTtpZihsPj4xPT0xKWJyZWFrO3RoaXMuX2VhdEJpdHMoMSl9dGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fZWF0Qml0cygxKSx0aGlzLm5leHRMaW5lMkQ9ISgxJmwpKX1jWzBdPjA/dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MV0sdGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpaT0xJnRoaXMuY29kaW5nUG9zPzA6MjU1LHRoaXMub3V0cHV0Qml0cy09OCwwPT09dGhpcy5vdXRwdXRCaXRzJiZjW3RoaXMuY29kaW5nUG9zXTx1JiYodGhpcy5jb2RpbmdQb3MrKyx0aGlzLm91dHB1dEJpdHM9Y1t0aGlzLmNvZGluZ1Bvc10tY1t0aGlzLmNvZGluZ1Bvcy0xXSk7ZWxzZXtyPTgsaT0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTt0aGlzLm91dHB1dEJpdHM+cj8oaTw8PXIsMSZ0aGlzLmNvZGluZ1Bvc3x8KGl8PTI1NT4+OC1yKSx0aGlzLm91dHB1dEJpdHMtPXIscj0wKTooaTw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwoaXw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksci09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLGNbdGhpcy5jb2RpbmdQb3NdPHU/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3NdLWNbdGhpcy5jb2RpbmdQb3MtMV0pOnI+MCYmKGk8PD1yLHI9MCkpfXdoaWxlKHIpfXJldHVybiB0aGlzLmJsYWNrJiYoaV49MjU1KSxpfX0se2tleToiX2FkZFBpeGVscyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNvZGluZ0xpbmUsYT10aGlzLmNvZGluZ1BvcztlPnJbYV0mJihlPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWUpLHRoaXMuY29kaW5nUG9zPWF9fSx7a2V5OiJfYWRkUGl4ZWxzTmVnIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY29kaW5nTGluZSxhPXRoaXMuY29kaW5nUG9zO2lmKGU+clthXSllPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWU7ZWxzZSBpZihlPHJbYV0pe2ZvcihlPDAmJigoMCxuLmluZm8pKCJpbnZhbGlkIGNvZGUiKSx0aGlzLmVycj0hMCxlPTApO2E+MCYmZTxyW2EtMV07KS0tYTtyW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX19LHtrZXk6Il9maW5kVGFibGVDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9bnx8MCxpPWU7aTw9dDsrK2kpe3ZhciBzPXRoaXMuX2xvb2tCaXRzKGkpO2lmKHM9PT1vKXJldHVyblshMCwxLCExXTtpZihpPHQmJihzPDw9dC1pKSwhYXx8cz49YSl7dmFyIGM9cltzLWFdO2lmKGNbMF09PT1pKXJldHVybiB0aGlzLl9lYXRCaXRzKGkpLFshMCxjWzFdLCEwXX19cmV0dXJuWyExLDAsITFdfX0se2tleToiX2dldFR3b0RpbUNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7aWYodD10aGlzLl9sb29rQml0cyg3KSwoZT1zW3RdKSYmZVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxzKTtpZihyWzBdJiZyWzJdKXJldHVybiByWzFdfXJldHVybigwLG4uaW5mbykoIkJhZCB0d28gZGltIGNvZGUiKSxvfX0se2tleToiX2dldFdoaXRlQ29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXtpZigodD10aGlzLl9sb29rQml0cygxMikpPT09bylyZXR1cm4gMTtpZigoZT10Pj41PT0wP2NbdF06dVt0Pj4zXSlbMF0+MClyZXR1cm4gdGhpcy5fZWF0Qml0cyhlWzBdKSxlWzFdfWVsc2V7dmFyIHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDksdSk7aWYoclswXSlyZXR1cm4gclsxXTtpZigocj10aGlzLl9maW5kVGFibGVDb2RlKDExLDEyLGMpKVswXSlyZXR1cm4gclsxXX1yZXR1cm4oMCxuLmluZm8pKCJiYWQgd2hpdGUgY29kZSIpLHRoaXMuX2VhdEJpdHMoMSksMX19LHtrZXk6Il9nZXRCbGFja0NvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZih0aGlzLmVvYmxvY2spe2lmKChlPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiAxO2lmKCh0PWU+Pjc9PTA/bFtlXTplPj45PT0wJiZlPj43IT0wP2ZbKGU+PjEpLTY0XTpoW2U+PjddKVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKHRbMF0pLHRbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDIsNixoKTtpZihyWzBdKXJldHVybiByWzFdO2lmKChyPXRoaXMuX2ZpbmRUYWJsZUNvZGUoNywxMixmLDY0KSlbMF0pcmV0dXJuIHJbMV07aWYoKHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxsKSlbMF0pcmV0dXJuIHJbMV19cmV0dXJuKDAsbi5pbmZvKSgiYmFkIGJsYWNrIGNvZGUiKSx0aGlzLl9lYXRCaXRzKDEpLDF9fSx7a2V5OiJfbG9va0JpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/bzp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfX0se2tleToiX2VhdEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0NJVFRGYXhEZWNvZGVyPWR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZsYXRlU3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX12YXIgdT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLGw9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksZj1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGg9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGQ9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XSxwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KHYsZSk7dmFyIHQscixhLHAsZz0oYT12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHApe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoZSx0KXt2YXIgcjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwocj1nLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdDt2YXIgbj1lLmdldEJ5dGUoKSxhPWUuZ2V0Qnl0ZSgpO2lmKC0xPT09bnx8LTE9PT1hKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtpZig4IT0oMTUmbikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQobiwiLCAiKS5jb25jYXQoYSkpO2lmKCgobjw8OCkrYSklMzEhPTApdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChuLCIsICIpLmNvbmNhdChhKSk7aWYoMzImYSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiRkRJQ1QgYml0IHNldCBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtyZXR1cm4gci5jb2RlU2l6ZT0wLHIuY29kZUJ1Zj0wLHJ9cmV0dXJuIHQ9diwocj1be2tleToiZ2V0Qml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5zdHIsbj10aGlzLmNvZGVTaXplLGE9dGhpcy5jb2RlQnVmO248ZTspe2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7YXw9dDw8bixuKz04fXJldHVybiB0PWEmKDE8PGUpLTEsdGhpcy5jb2RlQnVmPWE+PmUsdGhpcy5jb2RlU2l6ZT1uLT1lLHR9fSx7a2V5OiJnZXRDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLnN0cixuPWVbMF0sYT1lWzFdLG89dGhpcy5jb2RlU2l6ZSxzPXRoaXMuY29kZUJ1ZjtvPGEmJi0xIT09KHQ9ci5nZXRCeXRlKCkpOylzfD10PDxvLG8rPTg7dmFyIGM9bltzJigxPDxhKS0xXSx1PWM+PjE2LGw9NjU1MzUmYztpZih1PDF8fG88dSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybiB0aGlzLmNvZGVCdWY9cz4+dSx0aGlzLmNvZGVTaXplPW8tdSxsfX0se2tleToiZ2VuZXJhdGVIdWZmbWFuVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyOysrdCllW3RdPm4mJihuPWVbdF0pO2Zvcih2YXIgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSksbz0xLHM9MCxjPTI7bzw9bjsrK28sczw8PTEsYzw8PTEpZm9yKHZhciB1PTA7dTxyOysrdSlpZihlW3VdPT09byl7dmFyIGw9MCxmPXM7Zm9yKHQ9MDt0PG87Kyt0KWw9bDw8MXwxJmYsZj4+PTE7Zm9yKHQ9bDt0PGE7dCs9YylpW3RdPW88PDE2fHU7KytzfXJldHVybltpLG5dfX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnN0cixuPXRoaXMuZ2V0Qml0cygzKTtpZigxJm4mJih0aGlzLmVvZj0hMCksMCE9KG4+Pj0xKSl7dmFyIGEsbztpZigxPT09bilhPWgsbz1kO2Vsc2V7aWYoMiE9PW4pdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgcyxjPXRoaXMuZ2V0Qml0cyg1KSsyNTcscD10aGlzLmdldEJpdHMoNSkrMSxnPXRoaXMuZ2V0Qml0cyg0KSs0LHY9bmV3IFVpbnQ4QXJyYXkodS5sZW5ndGgpO2ZvcihzPTA7czxnOysrcyl2W3Vbc11dPXRoaXMuZ2V0Qml0cygzKTt2YXIgeT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHYpO3Q9MCxzPTA7Zm9yKHZhciBtLGIsdyxrPWMrcCxTPW5ldyBVaW50OEFycmF5KGspO3M8azspe3ZhciB4PXRoaXMuZ2V0Q29kZSh5KTtpZigxNj09PXgpbT0yLGI9Myx3PXQ7ZWxzZSBpZigxNz09PXgpbT0zLGI9Myx3PXQ9MDtlbHNle2lmKDE4IT09eCl7U1tzKytdPXQ9eDtjb250aW51ZX1tPTcsYj0xMSx3PXQ9MH1mb3IodmFyIE89dGhpcy5nZXRCaXRzKG0pK2I7Ty0tID4wOylTW3MrK109d31hPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheSgwLGMpKSxvPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheShjLGspKX1mb3IodmFyIEE9KGU9dGhpcy5idWZmZXIpP2UubGVuZ3RoOjAsQz10aGlzLmJ1ZmZlckxlbmd0aDs7KXt2YXIgRj10aGlzLmdldENvZGUoYSk7aWYoRjwyNTYpQysxPj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDKzEpKS5sZW5ndGgpLGVbQysrXT1GO2Vsc2V7aWYoMjU2PT09RilyZXR1cm4gdm9pZCh0aGlzLmJ1ZmZlckxlbmd0aD1DKTt2YXIgUD0oRj1sW0YtPTI1N10pPj4xNjtQPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSksdD0oNjU1MzUmRikrUCxGPXRoaXMuZ2V0Q29kZShvKSwoUD0oRj1mW0ZdKT4+MTYpPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSk7dmFyIFQ9KDY1NTM1JkYpK1A7Qyt0Pj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDK3QpKS5sZW5ndGgpO2Zvcih2YXIgST0wO0k8dDsrK0ksKytDKWVbQ109ZVtDLVRdfX19ZWxzZXt2YXIgRTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgaj1FO2lmKC0xPT09KEU9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2lmKGp8PUU8PDgsLTE9PT0oRT1yLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7dmFyIE09RTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZigoTXw9RTw8OCkhPSg2NTUzNSZ+aikmJigwIT09anx8MCE9PU0pKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9MCx0aGlzLmNvZGVTaXplPTA7dmFyIF89dGhpcy5idWZmZXJMZW5ndGgsTD1fK2o7aWYoZT10aGlzLmVuc3VyZUJ1ZmZlcihMKSx0aGlzLmJ1ZmZlckxlbmd0aD1MLDA9PT1qKS0xPT09ci5wZWVrQnl0ZSgpJiYodGhpcy5lb2Y9ITApO2Vsc2V7dmFyIFI9ci5nZXRCeXRlcyhqKTtlLnNldChSLF8pLFIubGVuZ3RoPGomJih0aGlzLmVvZj0hMCl9fX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdn0oYS5EZWNvZGVTdHJlYW0pO3QuRmxhdGVTdHJlYW09cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTQ4KSxvPXIoMTM0KSxzPXIoMTU0KSxjPXIoMik7ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGwoZSx0KX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxmKGUpfXZhciBoPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9KHAsZSk7dmFyIHQscixpLGgsZD0oaT1wLGg9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1mKGkpO2lmKGgpe3ZhciByPWYodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHAoZSx0LHIpe3ZhciBuO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHApLChuPWQuY2FsbCh0aGlzLHQpKS5zdHJlYW09ZSxuLmRpY3Q9ZS5kaWN0LG4ubWF5YmVMZW5ndGg9dCxuLnBhcmFtcz1yLG59cmV0dXJuIHQ9cCwocj1be2tleToiYnl0ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGMuc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfX0se2tleToiZW5zdXJlQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgcy5KYmlnMkltYWdlLHQ9W107aWYodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYociBpbnN0YW5jZW9mIGEuQmFzZVN0cmVhbSl7dmFyIG49ci5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTpuLHN0YXJ0OjAsZW5kOm4ubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Zm9yKHZhciBpPWUucGFyc2VDaHVua3ModCksYz1pLmxlbmd0aCx1PTA7dTxjO3UrKylpW3VdXj0yNTU7dGhpcy5idWZmZXI9aSx0aGlzLmJ1ZmZlckxlbmd0aD1jLHRoaXMuZW9mPSEwfX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscH0oaS5EZWNvZGVTdHJlYW0pO3QuSmJpZzJTdHJlYW09aH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJJbWFnZT12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTU1KSxzPXIoMTUxKTtmdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBmKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1sKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBsKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZyhlLHQpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHYoZSl9dmFyIHk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmcoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9dih0KTtpZihyKXt2YXIgaT12KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBwKHRoaXMsaSksYS5jYWxsKHRoaXMsIkpCSUcyIGVycm9yOiAiLmNvbmNhdChlKSwiSmJpZzJFcnJvciIpfXJldHVybiBkKGkpfShhLkJhc2VFeGNlcHRpb24pLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cCh0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImdldENvbnRleHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7cCh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuc3RhcnQ9cix0aGlzLmVuZD1ufXJldHVybiBkKGUsW3trZXk6ImRlY29kZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9fSx7a2V5OiJjb250ZXh0Q2FjaGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBtO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1dKSxlfSgpO2Z1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPWUuZ2V0Q29udGV4dHModCksYT0xO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTAsaT0wO2k8ZTtpKyspe3ZhciBvPXIucmVhZEJpdChuLGEpO2E9YTwyNTY/YTw8MXxvOjUxMSYoYTw8MXxvKXwyNTYsdD10PDwxfG99cmV0dXJuIHQ+Pj4wfXZhciBvPWkoMSkscz1pKDEpP2koMSk/aSgxKT9pKDEpP2koMSk/aSgzMikrNDQzNjppKDEyKSszNDA6aSg4KSs4NDppKDYpKzIwOmkoNCkrNDppKDIpO3JldHVybiAwPT09bz9zOnM+MD8tczpudWxsfWZ1bmN0aW9uIGsoZSx0LHIpe2Zvcih2YXIgbj1lLmdldENvbnRleHRzKCJJQUlEIiksYT0xLGk9MDtpPHI7aSsrKWE9YTw8MXx0LnJlYWRCaXQobixhKTtyZXR1cm4gcjwzMT9hJigxPDxyKS0xOjIxNDc0ODM2NDcmYX12YXIgUz1bIlN5bWJvbERpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uIixudWxsLCJJbW1lZGlhdGVUZXh0UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIlBhdHRlcm5EaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb24iLG51bGwsIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLCJQYWdlSW5mb3JtYXRpb24iLCJFbmRPZlBhZ2UiLCJFbmRPZlN0cmlwZSIsIkVuZE9mRmlsZSIsIlByb2ZpbGVzIiwiVGFibGVzIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkV4dGVuc2lvbiJdLHg9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLE89W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxBPVszOTcxNywxOTQxLDIyOSw0MDVdLEM9WzMyLDhdO2Z1bmN0aW9uIEYoZSx0LHIsbixhLGksbyxzKXtpZihlKXJldHVybiBHKG5ldyBYKHMuZGF0YSxzLnN0YXJ0LHMuZW5kKSx0LHIsITEpO2lmKDA9PT1uJiYhaSYmIWEmJjQ9PT1vLmxlbmd0aCYmMz09PW9bMF0ueCYmLTE9PT1vWzBdLnkmJi0zPT09b1sxXS54JiYtMT09PW9bMV0ueSYmMj09PW9bMl0ueCYmLTI9PT1vWzJdLnkmJi0yPT09b1szXS54JiYtMj09PW9bM10ueSlyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHMsYyx1LGw9ci5kZWNvZGVyLGY9ci5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIiksaD1bXTtmb3IoYT0wO2E8dDthKyspZm9yKHM9aFthXT1uZXcgVWludDhBcnJheShlKSxjPWE8MT9zOmhbYS0xXSxuPSh1PWE8Mj9zOmhbYS0yXSlbMF08PDEzfHVbMV08PDEyfHVbMl08PDExfGNbMF08PDd8Y1sxXTw8NnxjWzJdPDw1fGNbM108PDQsaT0wO2k8ZTtpKyspc1tpXT1vPWwucmVhZEJpdChmLG4pLG49KDMxNzM1Jm4pPDwxfChpKzM8ZT91W2krM108PDExOjApfChpKzQ8ZT9jW2krNF08PDQ6MCl8bztyZXR1cm4gaH0odCxyLHMpO3ZhciBjPSEhaSx1PXhbbl0uY29uY2F0KG8pO3Uuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH0pKTt2YXIgbCxmLGg9dS5sZW5ndGgsZD1uZXcgSW50OEFycmF5KGgpLHA9bmV3IEludDhBcnJheShoKSxnPVtdLHY9MCx5PTAsbT0wLGI9MDtmb3IoZj0wO2Y8aDtmKyspZFtmXT11W2ZdLngscFtmXT11W2ZdLnkseT1NYXRoLm1pbih5LHVbZl0ueCksbT1NYXRoLm1heChtLHVbZl0ueCksYj1NYXRoLm1pbihiLHVbZl0ueSksZjxoLTEmJnVbZl0ueT09PXVbZisxXS55JiZ1W2ZdLng9PT11W2YrMV0ueC0xP3Z8PTE8PGgtMS1mOmcucHVzaChmKTt2YXIgdz1nLmxlbmd0aCxrPW5ldyBJbnQ4QXJyYXkodyksUz1uZXcgSW50OEFycmF5KHcpLE89bmV3IFVpbnQxNkFycmF5KHcpO2ZvcihsPTA7bDx3O2wrKylmPWdbbF0sa1tsXT11W2ZdLngsU1tsXT11W2ZdLnksT1tsXT0xPDxoLTEtZjtmb3IodmFyIEMsRixQLFQsSSxFPS15LGo9LWIsTT10LW0sXz1BW25dLEw9bmV3IFVpbnQ4QXJyYXkodCksUj1bXSxOPXMuZGVjb2RlcixEPXMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLEI9MCxVPTAsJD0wOyQ8cjskKyspaWYoYSYmKEJePU4ucmVhZEJpdChELF8pKSlSLnB1c2goTCk7ZWxzZSBmb3IoTD1uZXcgVWludDhBcnJheShMKSxSLnB1c2goTCksQz0wO0M8dDtDKyspaWYoYyYmaVskXVtDXSlMW0NdPTA7ZWxzZXtpZihDPj1FJiZDPE0mJiQ+PWopZm9yKFU9VTw8MSZ2LGY9MDtmPHc7ZisrKUY9JCtTW2ZdLFA9QytrW2ZdLChUPVJbRl1bUF0pJiYoVXw9VD1PW2ZdKTtlbHNlIGZvcihVPTAsST1oLTEsZj0wO2Y8aDtmKyssSS0tKShQPUMrZFtmXSk+PTAmJlA8dCYmKEY9JCtwW2ZdKT49MCYmKFQ9UltGXVtQXSkmJihVfD1UPDxJKTt2YXIgSD1OLnJlYWRCaXQoRCxVKTtMW0NdPUh9cmV0dXJuIFJ9ZnVuY3Rpb24gUChlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9T1tyXS5jb2Rpbmc7MD09PXImJih1PXUuY29uY2F0KFtzWzBdXSkpO3ZhciBsLGY9dS5sZW5ndGgsaD1uZXcgSW50MzJBcnJheShmKSxkPW5ldyBJbnQzMkFycmF5KGYpO2ZvcihsPTA7bDxmO2wrKyloW2xdPXVbbF0ueCxkW2xdPXVbbF0ueTt2YXIgcD1PW3JdLnJlZmVyZW5jZTswPT09ciYmKHA9cC5jb25jYXQoW3NbMV1dKSk7dmFyIGc9cC5sZW5ndGgsdj1uZXcgSW50MzJBcnJheShnKSxtPW5ldyBJbnQzMkFycmF5KGcpO2ZvcihsPTA7bDxnO2wrKyl2W2xdPXBbbF0ueCxtW2xdPXBbbF0ueTtmb3IodmFyIGI9blswXS5sZW5ndGgsdz1uLmxlbmd0aCxrPUNbcl0sUz1bXSx4PWMuZGVjb2RlcixBPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpLEY9MCxQPTA7UDx0O1ArKyl7aWYobyYmKEZePXgucmVhZEJpdChBLGspKSl0aHJvdyBuZXcgeSgicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIik7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZSk7Uy5wdXNoKFQpO2Zvcih2YXIgST0wO0k8ZTtJKyspe3ZhciBFPXZvaWQgMCxqPXZvaWQgMCxNPTA7Zm9yKGw9MDtsPGY7bCsrKUU9UCtkW2xdLGo9SStoW2xdLEU8MHx8ajwwfHxqPj1lP008PD0xOk09TTw8MXxTW0VdW2pdO2ZvcihsPTA7bDxnO2wrKylFPVArbVtsXS1pLGo9SSt2W2xdLWEsRTwwfHxFPj13fHxqPDB8fGo+PWI/TTw8PTE6TT1NPDwxfG5bRV1bal07dmFyIF89eC5yZWFkQml0KEEsTSk7VFtJXT1ffX1yZXR1cm4gU31mdW5jdGlvbiBUKGUsdCxyLG4sYSxpLG8scyxjLHUsbCxmLGgsZCxwLGcsdixtLGIpe2lmKGUmJnQpdGhyb3cgbmV3IHkoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTt2YXIgUyx4LE89W107Zm9yKFM9MDtTPG47UysrKXtpZih4PW5ldyBVaW50OEFycmF5KHIpLGEpZm9yKHZhciBBPTA7QTxyO0ErKyl4W0FdPWE7Ty5wdXNoKHgpfXZhciBDPXYuZGVjb2RlcixGPXYuY29udGV4dENhY2hlLFQ9ZT8tZC50YWJsZURlbHRhVC5kZWNvZGUoYik6LXcoRiwiSUFEVCIsQyksST0wO2ZvcihTPTA7UzxpOyl7VCs9ZT9kLnRhYmxlRGVsdGFULmRlY29kZShiKTp3KEYsIklBRFQiLEMpO2Zvcih2YXIgRT1JKz1lP2QudGFibGVGaXJzdFMuZGVjb2RlKGIpOncoRiwiSUFGUyIsQyk7Oyl7dmFyIGo9MDtvPjEmJihqPWU/Yi5yZWFkQml0cyhtKTp3KEYsIklBSVQiLEMpKTt2YXIgTT1vKlQraixfPWU/ZC5zeW1ib2xJRFRhYmxlLmRlY29kZShiKTprKEYsQyxjKSxMPXQmJihlP2IucmVhZEJpdCgpOncoRiwiSUFSSSIsQykpLFI9c1tfXSxOPVJbMF0ubGVuZ3RoLEQ9Ui5sZW5ndGg7aWYoTCl7dmFyIEI9dyhGLCJJQVJEVyIsQyksVT13KEYsIklBUkRIIixDKTtSPVAoTis9QixEKz1VLHAsUiwoQj4+MSkrdyhGLCJJQVJEWCIsQyksKFU+PjEpK3coRiwiSUFSRFkiLEMpLCExLGcsdil9dmFyICQ9TS0oMSZmPzA6RC0xKSxYPUUtKDImZj9OLTE6MCksSD12b2lkIDAscT12b2lkIDAsRz12b2lkIDA7aWYodSl7Zm9yKEg9MDtIPEQ7SCsrKWlmKHg9T1tYK0hdKXtHPVJbSF07dmFyIHo9TWF0aC5taW4oci0kLE4pO3N3aXRjaChoKXtjYXNlIDA6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXXw9R1txXTticmVhaztjYXNlIDI6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXV49R1txXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJvcGVyYXRvciAiLmNvbmNhdChoLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19RSs9RC0xfWVsc2V7Zm9yKHE9MDtxPEQ7cSsrKWlmKHg9T1skK3FdKXN3aXRjaChHPVJbcV0saCl7Y2FzZSAwOmZvcihIPTA7SDxOO0grKyl4W1grSF18PUdbSF07YnJlYWs7Y2FzZSAyOmZvcihIPTA7SDxOO0grKyl4W1grSF1ePUdbSF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQoaCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9RSs9Ti0xfVMrKzt2YXIgVz1lP2QudGFibGVEZWx0YVMuZGVjb2RlKGIpOncoRiwiSUFEUyIsQyk7aWYobnVsbD09PVcpYnJlYWs7RSs9VytsfX1yZXR1cm4gT31mdW5jdGlvbiBJKGUsdCl7dmFyIHI9e307ci5udW1iZXI9KDAsaS5yZWFkVWludDMyKShlLHQpO3ZhciBuPWVbdCs0XSxhPTYzJm47aWYoIVNbYV0pdGhyb3cgbmV3IHkoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK2EpO3IudHlwZT1hLHIudHlwZU5hbWU9U1thXSxyLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZuKTt2YXIgbz0hISg2NCZuKSxzPWVbdCs1XSxjPXM+PjUmNyx1PVszMSZzXSxsPXQrNjtpZig3PT09cyl7Yz01MzY4NzA5MTEmKDAsaS5yZWFkVWludDMyKShlLGwtMSksbCs9Mzt2YXIgZj1jKzc+PjM7Zm9yKHVbMF09ZVtsKytdOy0tZj4wOyl1LnB1c2goZVtsKytdKX1lbHNlIGlmKDU9PT1zfHw2PT09cyl0aHJvdyBuZXcgeSgiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO3IucmV0YWluQml0cz11O3ZhciBoPTQ7ci5udW1iZXI8PTI1Nj9oPTE6ci5udW1iZXI8PTY1NTM2JiYoaD0yKTt2YXIgZCxwLGc9W107Zm9yKGQ9MDtkPGM7ZCsrKXt2YXIgdjt2PTE9PT1oP2VbbF06Mj09PWg/KDAsaS5yZWFkVWludDE2KShlLGwpOigwLGkucmVhZFVpbnQzMikoZSxsKSxnLnB1c2godiksbCs9aH1pZihyLnJlZmVycmVkVG89ZyxvPyhyLnBhZ2VBc3NvY2lhdGlvbj0oMCxpLnJlYWRVaW50MzIpKGUsbCksbCs9NCk6ci5wYWdlQXNzb2NpYXRpb249ZVtsKytdLHIubGVuZ3RoPSgwLGkucmVhZFVpbnQzMikoZSxsKSxsKz00LDQyOTQ5NjcyOTU9PT1yLmxlbmd0aCl7aWYoMzghPT1hKXRocm93IG5ldyB5KCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt2YXIgbT1qKGUsbCksYj0hISgxJmVbbCtNXSksdz1uZXcgVWludDhBcnJheSg2KTtmb3IoYnx8KHdbMF09MjU1LHdbMV09MTcyKSx3WzJdPW0uaGVpZ2h0Pj4+MjQmMjU1LHdbM109bS5oZWlnaHQ+PjE2JjI1NSx3WzRdPW0uaGVpZ2h0Pj44JjI1NSx3WzVdPTI1NSZtLmhlaWdodCxkPWwscD1lLmxlbmd0aDtkPHA7ZCsrKXtmb3IodmFyIGs9MDtrPDYmJndba109PT1lW2Qra107KWsrKztpZig2PT09ayl7ci5sZW5ndGg9ZCs2O2JyZWFrfX1pZig0Mjk0OTY3Mjk1PT09ci5sZW5ndGgpdGhyb3cgbmV3IHkoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKX1yZXR1cm4gci5oZWFkZXJFbmQ9bCxyfWZ1bmN0aW9uIEUoZSx0LHIsbil7Zm9yKHZhciBhPVtdLGk9cjtpPG47KXt2YXIgbz1JKHQsaSk7aT1vLmhlYWRlckVuZDt2YXIgcz17aGVhZGVyOm8sZGF0YTp0fTtpZihlLnJhbmRvbUFjY2Vzc3x8KHMuc3RhcnQ9aSxpKz1vLmxlbmd0aCxzLmVuZD1pKSxhLnB1c2gocyksNTE9PT1vLnR5cGUpYnJlYWt9aWYoZS5yYW5kb21BY2Nlc3MpZm9yKHZhciBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKWFbY10uc3RhcnQ9aSxpKz1hW2NdLmhlYWRlci5sZW5ndGgsYVtjXS5lbmQ9aTtyZXR1cm4gYX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJue3dpZHRoOigwLGkucmVhZFVpbnQzMikoZSx0KSxoZWlnaHQ6KDAsaS5yZWFkVWludDMyKShlLHQrNCkseDooMCxpLnJlYWRVaW50MzIpKGUsdCs4KSx5OigwLGkucmVhZFVpbnQzMikoZSx0KzEyKSxjb21iaW5hdGlvbk9wZXJhdG9yOjcmZVt0KzE2XX19dmFyIE09MTc7ZnVuY3Rpb24gXyhlLHQpe3ZhciByLG4sYSxvLHM9ZS5oZWFkZXIsYz1lLmRhdGEsdT1lLmVuZCxsPWUuc3RhcnQ7c3dpdGNoKHMudHlwZSl7Y2FzZSAwOnZhciBmPXt9LGg9KDAsaS5yZWFkVWludDE2KShjLGwpO2lmKGYuaHVmZm1hbj0hISgxJmgpLGYucmVmaW5lbWVudD0hISgyJmgpLGYuaHVmZm1hbkRIU2VsZWN0b3I9aD4+MiYzLGYuaHVmZm1hbkRXU2VsZWN0b3I9aD4+NCYzLGYuYml0bWFwU2l6ZVNlbGVjdG9yPWg+PjYmMSxmLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9aD4+NyYxLGYuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JmgpLGYuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZoKSxmLnRlbXBsYXRlPWg+PjEwJjMsZi5yZWZpbmVtZW50VGVtcGxhdGU9aD4+MTImMSxsKz0yLCFmLmh1ZmZtYW4pe2ZvcihvPTA9PT1mLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLmF0PW59aWYoZi5yZWZpbmVtZW50JiYhZi5yZWZpbmVtZW50VGVtcGxhdGUpe2ZvcihuPVtdLGE9MDthPDI7YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLnJlZmluZW1lbnRBdD1ufWYubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsZi5udW1iZXJPZk5ld1N5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bZixzLm51bWJlcixzLnJlZmVycmVkVG8sYyxsLHVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dmFyIGQ9e307ZC5pbmZvPWooYyxsKSxsKz1NO3ZhciBwPSgwLGkucmVhZFVpbnQxNikoYyxsKTtpZihsKz0yLGQuaHVmZm1hbj0hISgxJnApLGQucmVmaW5lbWVudD0hISgyJnApLGQubG9nU3RyaXBTaXplPXA+PjImMyxkLnN0cmlwU2l6ZT0xPDxkLmxvZ1N0cmlwU2l6ZSxkLnJlZmVyZW5jZUNvcm5lcj1wPj40JjMsZC50cmFuc3Bvc2VkPSEhKDY0JnApLGQuY29tYmluYXRpb25PcGVyYXRvcj1wPj43JjMsZC5kZWZhdWx0UGl4ZWxWYWx1ZT1wPj45JjEsZC5kc09mZnNldD1wPDwxNz4+MjcsZC5yZWZpbmVtZW50VGVtcGxhdGU9cD4+MTUmMSxkLmh1ZmZtYW4pe3ZhciBnPSgwLGkucmVhZFVpbnQxNikoYyxsKTtsKz0yLGQuaHVmZm1hbkZTPTMmZyxkLmh1ZmZtYW5EUz1nPj4yJjMsZC5odWZmbWFuRFQ9Zz4+NCYzLGQuaHVmZm1hblJlZmluZW1lbnREVz1nPj42JjMsZC5odWZmbWFuUmVmaW5lbWVudERIPWc+PjgmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFg9Zz4+MTAmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFk9Zz4+MTImMyxkLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmcpfWlmKGQucmVmaW5lbWVudCYmIWQucmVmaW5lbWVudFRlbXBsYXRlKXtmb3Iobj1bXSxhPTA7YTwyO2ErKyluLnB1c2goe3g6KDAsaS5yZWFkSW50OCkoYyxsKSx5OigwLGkucmVhZEludDgpKGMsbCsxKX0pLGwrPTI7ZC5yZWZpbmVtZW50QXQ9bn1kLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LHI9W2Qscy5yZWZlcnJlZFRvLGMsbCx1XTticmVhaztjYXNlIDE2OnZhciB2PXt9LG09Y1tsKytdO3YubW1yPSEhKDEmbSksdi50ZW1wbGF0ZT1tPj4xJjMsdi5wYXR0ZXJuV2lkdGg9Y1tsKytdLHYucGF0dGVybkhlaWdodD1jW2wrK10sdi5tYXhQYXR0ZXJuSW5kZXg9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bdixzLm51bWJlcixjLGwsdV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnZhciBiPXt9O2IuaW5mbz1qKGMsbCksbCs9TTt2YXIgdz1jW2wrK107Yi5tbXI9ISEoMSZ3KSxiLnRlbXBsYXRlPXc+PjEmMyxiLmVuYWJsZVNraXA9ISEoOCZ3KSxiLmNvbWJpbmF0aW9uT3BlcmF0b3I9dz4+NCY3LGIuZGVmYXVsdFBpeGVsVmFsdWU9dz4+NyYxLGIuZ3JpZFdpZHRoPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZEhlaWdodD0oMCxpLnJlYWRVaW50MzIpKGMsbCksbCs9NCxiLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsYi5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZFZlY3Rvclg9KDAsaS5yZWFkVWludDE2KShjLGwpLGwrPTIsYi5ncmlkVmVjdG9yWT0oMCxpLnJlYWRVaW50MTYpKGMsbCksbCs9MixyPVtiLHMucmVmZXJyZWRUbyxjLGwsdV07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnZhciBrPXt9O2suaW5mbz1qKGMsbCksbCs9TTt2YXIgUz1jW2wrK107aWYoay5tbXI9ISEoMSZTKSxrLnRlbXBsYXRlPVM+PjEmMyxrLnByZWRpY3Rpb249ISEoOCZTKSwhay5tbXIpe2ZvcihvPTA9PT1rLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtrLmF0PW59cj1bayxjLGwsdV07YnJlYWs7Y2FzZSA0ODp2YXIgeD17d2lkdGg6KDAsaS5yZWFkVWludDMyKShjLGwpLGhlaWdodDooMCxpLnJlYWRVaW50MzIpKGMsbCs0KSxyZXNvbHV0aW9uWDooMCxpLnJlYWRVaW50MzIpKGMsbCs4KSxyZXNvbHV0aW9uWTooMCxpLnJlYWRVaW50MzIpKGMsbCsxMil9OzQyOTQ5NjcyOTU9PT14LmhlaWdodCYmZGVsZXRlIHguaGVpZ2h0O3ZhciBPPWNbbCsxNl07KDAsaS5yZWFkVWludDE2KShjLGwrMTcpLHgubG9zc2xlc3M9ISEoMSZPKSx4LnJlZmluZW1lbnQ9ISEoMiZPKSx4LmRlZmF1bHRQaXhlbFZhbHVlPU8+PjImMSx4LmNvbWJpbmF0aW9uT3BlcmF0b3I9Tz4+MyYzLHgucmVxdWlyZXNCdWZmZXI9ISEoMzImTykseC5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmTykscj1beF07YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnI9W3MubnVtYmVyLGMsbCx1XTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJzZWdtZW50IHR5cGUgIi5jb25jYXQocy50eXBlTmFtZSwiKCIpLmNvbmNhdChzLnR5cGUsIikgaXMgbm90IGltcGxlbWVudGVkIikpfXZhciBBPSJvbiIrcy50eXBlTmFtZTtBIGluIHQmJnRbQV0uYXBwbHkodCxyKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKV8oZVtyXSx0KX12YXIgUj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToib25QYWdlSW5mb3JtYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7dmFyIHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJnIuZmlsbCgyNTUpLHRoaXMuYnVmZmVyPXJ9fSx7a2V5OiJkcmF3Qml0bWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLG89dGhpcy5jdXJyZW50UGFnZUluZm8scz1lLndpZHRoLGM9ZS5oZWlnaHQsdT1vLndpZHRoKzc+PjMsbD1vLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6by5jb21iaW5hdGlvbk9wZXJhdG9yLGY9dGhpcy5idWZmZXIsaD0xMjg+Pig3JmUueCksZD1lLnkqdSsoZS54Pj4zKTtzd2l0Y2gobCl7Y2FzZSAwOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV18PWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7Y2FzZSAyOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV1ePWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQobCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToib25JbW1lZGlhdGVHZW5lcmljUmVnaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLmluZm8saT1uZXcgYih0LHIsbiksbz1GKGUubW1yLGEud2lkdGgsYS5oZWlnaHQsZS50ZW1wbGF0ZSxlLnByZWRpY3Rpb24sbnVsbCxlLmF0LGkpO3RoaXMuZHJhd0JpdG1hcChhLG8pfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25TeW1ib2xEaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsbyl7dmFyIHMsbDtlLmh1ZmZtYW4mJihzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49JChlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpuPUgobyx0LHIpLG8rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTphPSQoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6YT1IKG8sdCxyKSxvKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9cmV0dXJuIGUuYml0bWFwU2l6ZVNlbGVjdG9yPyhpPUgobyx0LHIpLG8rKyk6aT0kKDEpLHt0YWJsZURlbHRhSGVpZ2h0Om4sdGFibGVEZWx0YVdpZHRoOmEsdGFibGVCaXRtYXBTaXplOmksdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM6ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP0gobyx0LHIpOiQoMSl9fShlLHIsdGhpcy5jdXN0b21UYWJsZXMpLGw9bmV3IFgobixhLG8pKTt2YXIgZj10aGlzLnN5bWJvbHM7Znx8KHRoaXMuc3ltYm9scz1mPXt9KTt2YXIgaCxkPVtdLHA9dShyKTt0cnl7Zm9yKHAucygpOyEoaD1wLm4oKSkuZG9uZTspe3ZhciBnPWZbaC52YWx1ZV07ZyYmZC5wdXNoLmFwcGx5KGQsYyhnKSl9fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfXZhciB2PW5ldyBiKG4sYSxvKTtmW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoKXtpZihlJiZ0KXRocm93IG5ldyB5KCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBkLHAsZz1bXSx2PTAsbT0oMCxpLmxvZzIpKHIubGVuZ3RoK24pLGI9Zi5kZWNvZGVyLFM9Zi5jb250ZXh0Q2FjaGU7Zm9yKGUmJihkPSQoMSkscD1bXSxtPU1hdGgubWF4KG0sMSkpO2cubGVuZ3RoPG47KXt2Kz1lP28udGFibGVEZWx0YUhlaWdodC5kZWNvZGUoaCk6dyhTLCJJQURIIixiKTtmb3IodmFyIHg9MCxPPTAsQT1lP3AubGVuZ3RoOjA7Oyl7dmFyIEM9ZT9vLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoaCk6dyhTLCJJQURXIixiKTtpZihudWxsPT09QylicmVhaztPKz14Kz1DO3ZhciBJPXZvaWQgMDtpZih0KXt2YXIgRT13KFMsIklBQUkiLGIpO2lmKEU+MSlJPVQoZSx0LHgsdiwwLEUsMSxyLmNvbmNhdChnKSxtLDAsMCwxLDAsbyx1LGwsZiwwLGgpO2Vsc2V7dmFyIGo9ayhTLGIsbSksTT13KFMsIklBUkRYIixiKSxfPXcoUywiSUFSRFkiLGIpO0k9UCh4LHYsdSxqPHIubGVuZ3RoP3Jbal06Z1tqLXIubGVuZ3RoXSxNLF8sITEsbCxmKX1nLnB1c2goSSl9ZWxzZSBlP3AucHVzaCh4KTooST1GKCExLHgsdixzLCExLG51bGwsYyxmKSxnLnB1c2goSSkpfWlmKGUmJiF0KXt2YXIgTD1vLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUoaCk7aC5ieXRlQWxpZ24oKTt2YXIgUj12b2lkIDA7aWYoMD09PUwpUj1xKGgsTyx2KTtlbHNle3ZhciBOPWguZW5kLEQ9aC5wb3NpdGlvbitMO2guZW5kPUQsUj1HKGgsTyx2LCExKSxoLmVuZD1OLGgucG9zaXRpb249RH12YXIgQj1wLmxlbmd0aDtpZihBPT09Qi0xKWcucHVzaChSKTtlbHNle3ZhciBVPXZvaWQgMCxYPXZvaWQgMCxIPTAsej12b2lkIDAsVz12b2lkIDA7Zm9yKFU9QTtVPEI7VSsrKXtmb3Ioej1IK3BbVV0sVz1bXSxYPTA7WDx2O1grKylXLnB1c2goUltYXS5zdWJhcnJheShILHopKTtnLnB1c2goVyksSD16fX19fWZvcih2YXIgVixZLEs9W10sSj1bXSxaPSExLFE9ci5sZW5ndGgrbjtKLmxlbmd0aDxROyl7Zm9yKHZhciBlZT1lP2QuZGVjb2RlKGgpOncoUywiSUFFWCIsYik7ZWUtLTspSi5wdXNoKFopO1o9IVp9Zm9yKFY9MCxZPXIubGVuZ3RoO1Y8WTtWKyspSltWXSYmSy5wdXNoKHJbVl0pO2Zvcih2YXIgdGU9MDt0ZTxuO1YrKyx0ZSsrKUpbVl0mJksucHVzaChnW3RlXSk7cmV0dXJuIEt9KGUuaHVmZm1hbixlLnJlZmluZW1lbnQsZCxlLm51bWJlck9mTmV3U3ltYm9scyxlLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLHMsZS50ZW1wbGF0ZSxlLmF0LGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LHYsbCl9fSx7a2V5OiJvbkltbWVkaWF0ZVRleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG8scyxsLGY9ZS5pbmZvLGg9dGhpcy5zeW1ib2xzLGQ9W10scD11KHQpO3RyeXtmb3IocC5zKCk7IShsPXAubigpKS5kb25lOyl7dmFyIGc9aFtsLnZhbHVlXTtnJiZkLnB1c2guYXBwbHkoZCxjKGcpKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9dmFyIHY9KDAsaS5sb2cyKShkLmxlbmd0aCk7ZS5odWZmbWFuJiYocz1uZXcgWChyLG4sYSksbz1mdW5jdGlvbihlLHQscixuLGEpe2Zvcih2YXIgaT1bXSxvPTA7bzw9MzQ7bysrKXt2YXIgcz1hLnJlYWRCaXRzKDQpO2kucHVzaChuZXcgTihbbyxzLDAsMF0pKX12YXIgYz1uZXcgQihpLCExKTtpLmxlbmd0aD0wO2Zvcih2YXIgdT0wO3U8bjspe3ZhciBsPWMuZGVjb2RlKGEpO2lmKGw+PTMyKXt2YXIgZj12b2lkIDAsaD12b2lkIDAsZD12b2lkIDA7c3dpdGNoKGwpe2Nhc2UgMzI6aWYoMD09PXUpdGhyb3cgbmV3IHkoIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2g9YS5yZWFkQml0cygyKSszLGY9aVt1LTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmg9YS5yZWFkQml0cygzKSszLGY9MDticmVhaztjYXNlIDM0Omg9YS5yZWFkQml0cyg3KSsxMSxmPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3IoZD0wO2Q8aDtkKyspaS5wdXNoKG5ldyBOKFt1LGYsMCwwXSkpLHUrK31lbHNlIGkucHVzaChuZXcgTihbdSxsLDAsMF0pKSx1Kyt9YS5ieXRlQWxpZ24oKTt2YXIgcCxnLHYsbT1uZXcgQihpLCExKSxiPTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOnA9JChlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6cD1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpnPSQoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOmc9SChiLHQsciksYisrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHkoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6dj0kKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6dj1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyB5KCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6bSx0YWJsZUZpcnN0UzpwLHRhYmxlRGVsdGFTOmcsdGFibGVEZWx0YVQ6dn19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxkLmxlbmd0aCxzKSk7dmFyIG09bmV3IGIocixuLGEpLHc9VChlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGYud2lkdGgsZi5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGQsdixlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxtLGUubG9nU3RyaXBTaXplLHMpO3RoaXMuZHJhd0JpdG1hcChmLHcpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25QYXR0ZXJuRGljdGlvbmFyeSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT10aGlzLnBhdHRlcm5zO2l8fCh0aGlzLnBhdHRlcm5zPWk9e30pO3ZhciBvPW5ldyBiKHIsbixhKTtpW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1bXTtlfHwoby5wdXNoKHt4Oi10LHk6MH0pLDA9PT1hJiZvLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSkpO2Zvcih2YXIgcz1GKGUsKG4rMSkqdCxyLGEsITEsbnVsbCxvLGkpLGM9W10sdT0wO3U8PW47dSsrKXtmb3IodmFyIGw9W10sZj10KnUsaD1mK3QsZD0wO2Q8cjtkKyspbC5wdXNoKHNbZF0uc3ViYXJyYXkoZixoKSk7Yy5wdXNoKGwpfXJldHVybiBjfShlLm1tcixlLnBhdHRlcm5XaWR0aCxlLnBhdHRlcm5IZWlnaHQsZS5tYXhQYXR0ZXJuSW5kZXgsZS50ZW1wbGF0ZSxvKX19LHtrZXk6Im9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89dGhpcy5wYXR0ZXJuc1t0WzBdXSxzPWUuaW5mbyxjPW5ldyBiKHIsbixhKSx1PWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoLGQscCxnKXtpZihzKXRocm93IG5ldyB5KCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgeSgnb3BlcmF0b3IgIicuY29uY2F0KGMsJyIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb24nKSk7dmFyIHYsbSxiLHc9W107Zm9yKHY9MDt2PGE7disrKXtpZihiPW5ldyBVaW50OEFycmF5KG4pLG8pZm9yKG09MDttPG47bSsrKWJbbV09bzt3LnB1c2goYil9dmFyIGs9dC5sZW5ndGgsUz10WzBdLHg9U1swXS5sZW5ndGgsTz1TLmxlbmd0aCxBPSgwLGkubG9nMikoayksQz1bXTtlfHwoQy5wdXNoKHt4OnI8PTE/MzoyLHk6LTF9KSwwPT09ciYmQy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pKTt2YXIgUCxULEksRSxqLE0sXyxMLFIsTixELEI9W107Zm9yKGUmJihQPW5ldyBYKGcuZGF0YSxnLnN0YXJ0LGcuZW5kKSksdj1BLTE7dj49MDt2LS0pVD1lP0coUCx1LGwsITApOkYoITEsdSxsLHIsITEsbnVsbCxDLGcpLEJbdl09VDtmb3IoST0wO0k8bDtJKyspZm9yKEU9MDtFPHU7RSsrKXtmb3Ioaj0wLE09MCxtPUEtMTttPj0wO20tLSlNfD0oal49QlttXVtJXVtFXSk8PG07aWYoXz10W01dLFI9aCtJKmQtRSpwPj44LChMPWYrSSpwK0UqZD4+OCk+PTAmJkwreDw9biYmUj49MCYmUitPPD1hKWZvcih2PTA7djxPO3YrKylmb3IoRD13W1Irdl0sTj1fW3ZdLG09MDttPHg7bSsrKURbTCttXXw9TlttXTtlbHNle3ZhciBVPXZvaWQgMCwkPXZvaWQgMDtmb3Iodj0wO3Y8Tzt2KyspaWYoISgoJD1SK3YpPDB8fCQ+PWEpKWZvcihEPXdbJF0sTj1fW3ZdLG09MDttPHg7bSsrKShVPUwrbSk+PTAmJlU8biYmKERbVV18PU5bbV0pfX1yZXR1cm4gd30oZS5tbXIsbyxlLnRlbXBsYXRlLHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLmVuYWJsZVNraXAsZS5jb21iaW5hdGlvbk9wZXJhdG9yLGUuZ3JpZFdpZHRoLGUuZ3JpZEhlaWdodCxlLmdyaWRPZmZzZXRYLGUuZ3JpZE9mZnNldFksZS5ncmlkVmVjdG9yWCxlLmdyaWRWZWN0b3JZLGMpO3RoaXMuZHJhd0JpdG1hcChzLHUpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJvblRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5jdXN0b21UYWJsZXM7YXx8KHRoaXMuY3VzdG9tVGFibGVzPWE9e30pLGFbZV09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsbz1lW3RdLHM9NDI5NDk2NzI5NSYoMCxpLnJlYWRVaW50MzIpKGUsdCsxKSxjPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShlLHQrNSksdT1uZXcgWChlLHQrOSxyKSxsPTErKG8+PjEmNyksZj0xKyhvPj40JjcpLGg9W10sZD1zO2Rve249dS5yZWFkQml0cyhsKSxhPXUucmVhZEJpdHMoZiksaC5wdXNoKG5ldyBOKFtkLG4sYSwwXSkpLGQrPTE8PGF9d2hpbGUoZDxjKTtyZXR1cm4gbj11LnJlYWRCaXRzKGwpLGgucHVzaChuZXcgTihbcy0xLG4sMzIsMCwibG93ZXIiXSkpLG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW2MsbiwzMiwwXSkpLDEmbyYmKG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW24sMF0pKSksbmV3IEIoaCwhMSl9KHQscixuKX19XSksZX0oKSxOPWQoKGZ1bmN0aW9uIGUodCl7cCh0aGlzLGUpLDI9PT10Lmxlbmd0aD8odGhpcy5pc09PQj0hMCx0aGlzLnJhbmdlTG93PTAsdGhpcy5wcmVmaXhMZW5ndGg9dFswXSx0aGlzLnJhbmdlTGVuZ3RoPTAsdGhpcy5wcmVmaXhDb2RlPXRbMV0sdGhpcy5pc0xvd2VyUmFuZ2U9ITEpOih0aGlzLmlzT09CPSExLHRoaXMucmFuZ2VMb3c9dFswXSx0aGlzLnByZWZpeExlbmd0aD10WzFdLHRoaXMucmFuZ2VMZW5ndGg9dFsyXSx0aGlzLnByZWZpeENvZGU9dFszXSx0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09dFs0XSl9KSksRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cCh0aGlzLGUpLHRoaXMuY2hpbGRyZW49W10sdD8odGhpcy5pc0xlYWY9ITAsdGhpcy5yYW5nZUxlbmd0aD10LnJhbmdlTGVuZ3RoLHRoaXMucmFuZ2VMb3c9dC5yYW5nZUxvdyx0aGlzLmlzTG93ZXJSYW5nZT10LmlzTG93ZXJSYW5nZSx0aGlzLmlzT09CPXQuaXNPT0IpOnRoaXMuaXNMZWFmPSExfXJldHVybiBkKGUsW3trZXk6ImJ1aWxkVHJlZSIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj10LnByZWZpeENvZGU+PnImMTtpZihyPD0wKXRoaXMuY2hpbGRyZW5bbl09bmV3IGUodCk7ZWxzZXt2YXIgYT10aGlzLmNoaWxkcmVuW25dO2F8fCh0aGlzLmNoaWxkcmVuW25dPWE9bmV3IGUobnVsbCkpLGEuYnVpbGRUcmVlKHQsci0xKX19fSx7a2V5OiJkZWNvZGVOb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmlzTGVhZil7aWYodGhpcy5pc09PQilyZXR1cm4gbnVsbDt2YXIgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX12YXIgcj10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighcil0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gci5kZWNvZGVOb2RlKGUpfX1dKSxlfSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHJ8fHRoaXMuYXNzaWduUHJlZml4Q29kZXModCksdGhpcy5yb290Tm9kZT1uZXcgRChudWxsKTtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKyspe3ZhciBpPXRbbl07aS5wcmVmaXhMZW5ndGg+MCYmdGhpcy5yb290Tm9kZS5idWlsZFRyZWUoaSxpLnByZWZpeExlbmd0aC0xKX19cmV0dXJuIGQoZSxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfX0se2tleToiYXNzaWduUHJlZml4Q29kZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPTAsbj0wO248dDtuKyspcj1NYXRoLm1heChyLGVbbl0ucHJlZml4TGVuZ3RoKTtmb3IodmFyIGE9bmV3IFVpbnQzMkFycmF5KHIrMSksaT0wO2k8dDtpKyspYVtlW2ldLnByZWZpeExlbmd0aF0rKzt2YXIgbyxzLGMsdT0xLGw9MDtmb3IoYVswXT0wO3U8PXI7KXtmb3Iobz1sPWwrYVt1LTFdPDwxLHM9MDtzPHQ7KShjPWVbc10pLnByZWZpeExlbmd0aD09PXUmJihjLnByZWZpeENvZGU9byxvKyspLHMrKzt1Kyt9fX1dKSxlfSgpLFU9e307ZnVuY3Rpb24gJChlKXt2YXIgdCxyPVVbZV07aWYocilyZXR1cm4gcjtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgic3RhbmRhcmQgdGFibGUgQi4iLmNvbmNhdChlLCIgZG9lcyBub3QgZXhpc3QiKSl9Zm9yKHZhciBuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXRbbl09bmV3IE4odFtuXSk7cmV0dXJuIHI9bmV3IEIodCwhMCksVVtlXT1yLHJ9dmFyIFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtwKHRoaXMsZSksdGhpcy5kYXRhPXQsdGhpcy5zdGFydD1yLHRoaXMuZW5kPW4sdGhpcy5wb3NpdGlvbj1yLHRoaXMuc2hpZnQ9LTEsdGhpcy5jdXJyZW50Qnl0ZT0wfXJldHVybiBkKGUsW3trZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgeSgiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdLHRoaXMuc2hpZnQ9N312YXIgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7cmV0dXJuIHRoaXMuc2hpZnQtLSxlfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9MDtmb3IodD1lLTE7dD49MDt0LS0pcnw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIHJ9fSx7a2V5OiJieXRlQWxpZ24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zaGlmdD0tMX19LHtrZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1dKSxlfSgpO2Z1bmN0aW9uIEgoZSx0LHIpe2Zvcih2YXIgbj0wLGE9MCxpPXQubGVuZ3RoO2E8aTthKyspe3ZhciBvPXJbdFthXV07aWYobyl7aWYoZT09PW4pcmV0dXJuIG87bisrfX10aHJvdyBuZXcgeSgiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHEoZSx0LHIpe2Zvcih2YXIgbj1bXSxhPTA7YTxyO2ErKyl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodCk7bi5wdXNoKGkpO2Zvcih2YXIgbz0wO288dDtvKyspaVtvXT1lLnJlYWRCaXQoKTtlLmJ5dGVBbGlnbigpfXJldHVybiBufWZ1bmN0aW9uIEcoZSx0LHIsbil7Zm9yKHZhciBhLGk9e0s6LTEsQ29sdW1uczp0LFJvd3M6cixCbGFja0lzMTohMCxFbmRPZkJsb2NrOm59LG89bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsaSksYz1bXSx1PSExLGw9MDtsPHI7bCsrKXt2YXIgZj1uZXcgVWludDhBcnJheSh0KTtjLnB1c2goZik7Zm9yKHZhciBoPS0xLGQ9MDtkPHQ7ZCsrKWg8MCYmKC0xPT09KGE9by5yZWFkTmV4dENoYXIoKSkmJihhPTAsdT0hMCksaD03KSxmW2RdPWE+PmgmMSxoLS19aWYobiYmIXUpZm9yKHZhciBwPTA7cDw1JiYtMSE9PW8ucmVhZE5leHRDaGFyKCk7cCsrKTtyZXR1cm4gY312YXIgej1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToicGFyc2VDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFIscj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7dmFyIGE9ZVtyXTtMKEUoe30sYS5kYXRhLGEuc3RhcnQsYS5lbmQpLHQpfXJldHVybiB0LmJ1ZmZlcn0oZSl9fSx7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IEpiaWcySW1hZ2UucGFyc2UiKX19XSksZX0oKTt0LkpiaWcySW1hZ2U9en0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBhPW4uY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1yKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7dmFyIGE9W3txZToyMjAxNyxubXBzOjEsbmxwczoxLHN3aXRjaEZsYWc6MX0se3FlOjEzMzEzLG5tcHM6MixubHBzOjYsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjMsbmxwczo5LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczo0LG5scHM6MTIsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjUsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozOCxubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NyxubHBzOjYsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczo4LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczo5LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxMCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MTEsbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MTIsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MTMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjksbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjE1LG5scHM6MTQsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczoxNixubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjIwNzM3LG5tcHM6MTcsbmxwczoxNSxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjE4LG5scHM6MTYsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxOSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjEzMzEzLG5tcHM6MjAsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjIxLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6MTAyNDEsbm1wczoyMixubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoyMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjg3MDUsbm1wczoyNCxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoyNSxubHBzOjIyLHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczoyNixubHBzOjIzLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyNyxubHBzOjI0LHN3aXRjaEZsYWc6MH0se3FlOjUxMjEsbm1wczoyOCxubHBzOjI1LHN3aXRjaEZsYWc6MH0se3FlOjQ2MDksbm1wczoyOSxubHBzOjI2LHN3aXRjaEZsYWc6MH0se3FlOjQzNTMsbm1wczozMCxubHBzOjI3LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczozMSxubHBzOjI4LHN3aXRjaEZsYWc6MH0se3FlOjI0OTcsbm1wczozMixubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjIyMDksbm1wczozMyxubHBzOjMwLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczozNCxubHBzOjMxLHN3aXRjaEZsYWc6MH0se3FlOjEwODksbm1wczozNSxubHBzOjMyLHN3aXRjaEZsYWc6MH0se3FlOjY3MyxubXBzOjM2LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzcsbmxwczozNCxzd2l0Y2hGbGFnOjB9LHtxZTozMjEsbm1wczozOCxubHBzOjM1LHN3aXRjaEZsYWc6MH0se3FlOjI3MyxubXBzOjM5LG5scHM6MzYsc3dpdGNoRmxhZzowfSx7cWU6MTMzLG5tcHM6NDAsbmxwczozNyxzd2l0Y2hGbGFnOjB9LHtxZTo3MyxubXBzOjQxLG5scHM6Mzgsc3dpdGNoRmxhZzowfSx7cWU6Mzcsbm1wczo0MixubHBzOjM5LHN3aXRjaEZsYWc6MH0se3FlOjIxLG5tcHM6NDMsbmxwczo0MCxzd2l0Y2hGbGFnOjB9LHtxZTo5LG5tcHM6NDQsbmxwczo0MSxzd2l0Y2hGbGFnOjB9LHtxZTo1LG5tcHM6NDUsbmxwczo0Mixzd2l0Y2hGbGFnOjB9LHtxZToxLG5tcHM6NDUsbmxwczo0Myxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjQ2LG5scHM6NDYsc3dpdGNoRmxhZzowfV0saT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4peyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuYnA9cix0aGlzLmRhdGFFbmQ9bix0aGlzLmNoaWdoPXRbcl0sdGhpcy5jbG93PTAsdGhpcy5ieXRlSW4oKSx0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDcmNjU1MzV8dGhpcy5jbG93Pj45JjEyNyx0aGlzLmNsb3c9dGhpcy5jbG93PDw3JjY1NTM1LHRoaXMuY3QtPTcsdGhpcy5hPTMyNzY4fXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiYnl0ZUluIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMuYnA7MjU1PT09ZVt0XT9lW3QrMV0+MTQzPyh0aGlzLmNsb3crPTY1MjgwLHRoaXMuY3Q9OCk6KHQrKyx0aGlzLmNsb3crPWVbdF08PDksdGhpcy5jdD03LHRoaXMuYnA9dCk6KHQrKyx0aGlzLmNsb3crPXQ8dGhpcy5kYXRhRW5kP2VbdF08PDg6NjUyODAsdGhpcy5jdD04LHRoaXMuYnA9dCksdGhpcy5jbG93PjY1NTM1JiYodGhpcy5jaGlnaCs9dGhpcy5jbG93Pj4xNix0aGlzLmNsb3cmPTY1NTM1KX19LHtrZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lW3RdPj4xLGk9MSZlW3RdLG89YVtuXSxzPW8ucWUsYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpYzxzPyhjPXMscj1pLG49by5ubXBzKTooYz1zLHI9MV5pLDE9PT1vLnN3aXRjaEZsYWcmJihpPXIpLG49by5ubHBzKTtlbHNle2lmKHRoaXMuY2hpZ2gtPXMsMCE9KDMyNzY4JmMpKXJldHVybiB0aGlzLmE9YyxpO2M8cz8ocj0xXmksMT09PW8uc3dpdGNoRmxhZyYmKGk9ciksbj1vLm5scHMpOihyPWksbj1vLm5tcHMpfWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpLGM8PD0xLHRoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjEsdGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNSx0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTtyZXR1cm4gdGhpcy5hPWMsZVt0XT1uPDwxfGkscn19XSkmJm4odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkFyaXRobWV0aWNEZWNvZGVyPWl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTQ4KSxpPXIoMTM0KSxvPXIoMTU3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxsKGUpfXZhciBmPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9KGQsZSk7dmFyIHQscixhLGYsaD0oYT1kLGY9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1sKGEpO2lmKGYpe3ZhciByPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGQoZSx0LHIpe3ZhciBuLGE7Zm9yKGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZCk7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PWEpe2Uuc2tpcCgtMSk7YnJlYWt9cmV0dXJuKG49aC5jYWxsKHRoaXMsdCkpLnN0cmVhbT1lLG4uZGljdD1lLmRpY3Qsbi5tYXliZUxlbmd0aD10LG4ucGFyYW1zPXIsbn1yZXR1cm4gdD1kLChyPVt7a2V5OiJieXRlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9fSx7a2V5OiJlbnN1cmVCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5lb2Ype3ZhciBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLmZvcmNlUkdCJiZBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9dGhpcy5kaWN0LmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpfHw4LG49dC5sZW5ndGgsYT1uZXcgSW50MzJBcnJheShuKSxzPSExLGM9KDE8PHIpLTEsdT0wO3U8bjt1Kz0yKWFbdV09MjU2Kih0W3UrMV0tdFt1XSl8MCxhW3UrMV09dFt1XSpjfDAsMjU2PT09YVt1XSYmMD09PWFbdSsxXXx8KHM9ITApO3MmJihlLmRlY29kZVRyYW5zZm9ybT1hKX1pZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGw9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIobCkmJihlLmNvbG9yVHJhbnNmb3JtPWwpfXZhciBmPW5ldyBvLkpwZWdJbWFnZShlKTtmLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciBoPWYuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9aCx0aGlzLmJ1ZmZlckxlbmd0aD1oLmxlbmd0aCx0aGlzLmVvZj0hMH19fV0pJiZjKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGR9KGEuRGVjb2RlU3RyZWFtKTt0LkpwZWdTdHJlYW09Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM1KTtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28oZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHMoZSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmgoZSx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxoKGUsdCl9ZnVuY3Rpb24gZChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX12YXIgZz1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsIkpQRUcgZXJyb3I6ICIuY29uY2F0KGUpLCJKcGVnRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSx2PWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1kKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gbCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIkROTE1hcmtlckVycm9yIikpLnNjYW5MaW5lcz1uLGF9cmV0dXJuIHUocil9KG4uQmFzZUV4Y2VwdGlvbikseT1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRU9JTWFya2VyRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSxtPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksYj00MDE3LHc9Nzk5LGs9MzQwNixTPTIyNzYseD0xNTY3LE89Mzc4NCxBPTU3OTMsQz0yODk2O2Z1bmN0aW9uIEYoZSx0KXtmb3IodmFyIHIsbixhPTAsaT0xNjtpPjAmJiFlW2ktMV07KWktLTt2YXIgbyxzPVt7Y2hpbGRyZW46W10saW5kZXg6MH1dLGM9c1swXTtmb3Iocj0wO3I8aTtyKyspe2ZvcihuPTA7bjxlW3JdO24rKyl7Zm9yKChjPXMucG9wKCkpLmNoaWxkcmVuW2MuaW5kZXhdPXRbYV07Yy5pbmRleD4wOyljPXMucG9wKCk7Zm9yKGMuaW5kZXgrKyxzLnB1c2goYyk7cy5sZW5ndGg8PXI7KXMucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSksYy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuLGM9bzthKyt9cisxPGkmJihzLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGMuY2hpbGRyZW5bYy5pbmRleF09by5jaGlsZHJlbixjPW8pfXJldHVybiBzWzBdLmNoaWxkcmVufWZ1bmN0aW9uIFAoZSx0LHIpe3JldHVybiA2NCooKGUuYmxvY2tzUGVyTGluZSsxKSp0K3IpfWZ1bmN0aW9uIFQoZSx0LHIsaSxvLGMsdSxsLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+OSYmdm9pZCAwIT09YXJndW1lbnRzWzldJiZhcmd1bWVudHNbOV0sZD1yLm1jdXNQZXJMaW5lLHA9ci5wcm9ncmVzc2l2ZSxiPXQsdz0wLGs9MDtmdW5jdGlvbiBTKCl7aWYoaz4wKXJldHVybiBrLS0sdz4+ayYxO2lmKDI1NT09PSh3PWVbdCsrXSkpe3ZhciBuPWVbdCsrXTtpZihuKXtpZigyMjA9PT1uJiZoKXt0Kz0yO3ZhciBpPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZih0Kz0yLGk+MCYmaSE9PXIuc2NhbkxpbmVzKXRocm93IG5ldyB2KCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixpKX1lbHNlIGlmKDIxNz09PW4pe2lmKGgpe3ZhciBvPUkqKDg9PT1yLnByZWNpc2lvbj84OjApO2lmKG8+MCYmTWF0aC5yb3VuZChyLnNjYW5MaW5lcy9vKT49NSl0aHJvdyBuZXcgdigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLG8pfXRocm93IG5ldyB5KCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIil9dGhyb3cgbmV3IGcoInVuZXhwZWN0ZWQgbWFya2VyICIuY29uY2F0KCh3PDw4fG4pLnRvU3RyaW5nKDE2KSkpfX1yZXR1cm4gaz03LHc+Pj43fWZ1bmN0aW9uIHgoZSl7Zm9yKHZhciB0PWU7Oyl7c3dpdGNoKHModD10W1MoKV0pKXtjYXNlIm51bWJlciI6cmV0dXJuIHQ7Y2FzZSJvYmplY3QiOmNvbnRpbnVlfXRocm93IG5ldyBnKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9MDtlPjA7KXQ9dDw8MXxTKCksZS0tO3JldHVybiB0fWZ1bmN0aW9uIEEoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1TKCk/MTotMTt2YXIgdD1PKGUpO3JldHVybiB0Pj0xPDxlLTE/dDp0KygtMTw8ZSkrMX12YXIgQyxGPTAsVD0wLEk9MDtmdW5jdGlvbiBFKGUsdCxyLG4sYSl7dmFyIGk9ciVkO0k9KHIvZHwwKSplLnYrbjt2YXIgbz1pKmUuaCthO3QoZSxQKGUsSSxvKSl9ZnVuY3Rpb24gTShlLHQscil7ST1yL2UuYmxvY2tzUGVyTGluZXwwO3ZhciBuPXIlZS5ibG9ja3NQZXJMaW5lO3QoZSxQKGUsSSxuKSl9dmFyIF8sTCxSLE4sRCxCLFU9aS5sZW5ndGg7Qj1wPzA9PT1jPzA9PT1sP2Z1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTw8ZjtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW59OmZ1bmN0aW9uKGUsdCl7ZS5ibG9ja0RhdGFbdF18PVMoKTw8Zn06MD09PWw/ZnVuY3Rpb24oZSx0KXtpZihGPjApRi0tO2Vsc2UgZm9yKHZhciByPWMsbj11O3I8PW47KXt2YXIgYT14KGUuaHVmZm1hblRhYmxlQUMpLGk9MTUmYSxvPWE+PjQ7aWYoMCE9PWkpe3ZhciBzPW1bcis9b107ZS5ibG9ja0RhdGFbdCtzXT1BKGkpKigxPDxmKSxyKyt9ZWxzZXtpZihvPDE1KXtGPU8obykrKDE8PG8pLTE7YnJlYWt9cis9MTZ9fX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhPWMsaT11LG89MDthPD1pOyl7dmFyIHM9dCttW2FdLGw9ZS5ibG9ja0RhdGFbc108MD8tMToxO3N3aXRjaChUKXtjYXNlIDA6aWYobz0obj14KGUuaHVmZm1hblRhYmxlQUMpKT4+NCwwPT0ocj0xNSZuKSlvPDE1PyhGPU8obykrKDE8PG8pLFQ9NCk6KG89MTYsVD0xKTtlbHNle2lmKDEhPT1yKXRocm93IG5ldyBnKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO0M9QShyKSxUPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6ZS5ibG9ja0RhdGFbc10/ZS5ibG9ja0RhdGFbc10rPWwqKFMoKTw8Zik6MD09LS1vJiYoVD0yPT09VD8zOjApO2JyZWFrO2Nhc2UgMzplLmJsb2NrRGF0YVtzXT9lLmJsb2NrRGF0YVtzXSs9bCooUygpPDxmKTooZS5ibG9ja0RhdGFbc109Qzw8ZixUPTApO2JyZWFrO2Nhc2UgNDplLmJsb2NrRGF0YVtzXSYmKGUuYmxvY2tEYXRhW3NdKz1sKihTKCk8PGYpKX1hKyt9ND09PVQmJjA9PS0tRiYmKFQ9MCl9OmZ1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW47Zm9yKHZhciBhPTE7YTw2NDspe3ZhciBpPXgoZS5odWZmbWFuVGFibGVBQyksbz0xNSZpLHM9aT4+NDtpZigwIT09byl7dmFyIGM9bVthKz1zXTtlLmJsb2NrRGF0YVt0K2NdPUEobyksYSsrfWVsc2V7aWYoczwxNSlicmVhazthKz0xNn19fTt2YXIgJCxYLEgscSxHPTA7Zm9yKFg9MT09PVU/aVswXS5ibG9ja3NQZXJMaW5lKmlbMF0uYmxvY2tzUGVyQ29sdW1uOmQqci5tY3VzUGVyQ29sdW1uO0c8PVg7KXt2YXIgej1vP01hdGgubWluKFgtRyxvKTpYO2lmKHo+MCl7Zm9yKEw9MDtMPFU7TCsrKWlbTF0ucHJlZD0wO2lmKEY9MCwxPT09VSlmb3IoXz1pWzBdLEQ9MDtEPHo7RCsrKU0oXyxCLEcpLEcrKztlbHNlIGZvcihEPTA7RDx6O0QrKyl7Zm9yKEw9MDtMPFU7TCsrKWZvcihIPShfPWlbTF0pLmgscT1fLnYsUj0wO1I8cTtSKyspZm9yKE49MDtOPEg7TisrKUUoXyxCLEcsUixOKTtHKyt9fWlmKGs9MCwhKCQ9aihlLHQpKSlicmVhaztpZigkLmludmFsaWQpe3ZhciBXPXo+MD8idW5leHBlY3RlZCI6ImV4Y2Vzc2l2ZSI7KDAsbi53YXJuKSgiZGVjb2RlU2NhbiAtICIuY29uY2F0KFcsIiBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIpLmNvbmNhdCgkLmludmFsaWQpKSx0PSQub2Zmc2V0fWlmKCEoJC5tYXJrZXI+PTY1NDg4JiYkLm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtYn1mdW5jdGlvbiBJKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sRixQLFQ9ZS5xdWFudGl6YXRpb25UYWJsZSxJPWUuYmxvY2tEYXRhO2lmKCFUKXRocm93IG5ldyBnKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IodmFyIEU9MDtFPDY0O0UrPTgpZj1JW3QrRV0saD1JW3QrRSsxXSxkPUlbdCtFKzJdLHA9SVt0K0UrM10sdj1JW3QrRSs0XSx5PUlbdCtFKzVdLG09SVt0K0UrNl0sRj1JW3QrRSs3XSxmKj1UW0VdLDAhPShofGR8cHx2fHl8bXxGKT8oaCo9VFtFKzFdLGQqPVRbRSsyXSxwKj1UW0UrM10sdio9VFtFKzRdLHkqPVRbRSs1XSxtKj1UW0UrNl0sRio9VFtFKzddLGE9KG49KG49QSpmKzEyOD4+OCkrKGE9QSp2KzEyOD4+OCkrMT4+MSktYSxQPShpPWQpKk8rKG89bSkqeCsxMjg+PjgsaT1pKngtbypPKzEyOD4+OCx1PShzPShzPUMqKGgtRikrMTI4Pj44KSsodT15PDw0KSsxPj4xKS11LGM9KGw9KGw9QyooaCtGKSsxMjg+PjgpKyhjPXA8PDQpKzE+PjEpLWMsbz0obj1uKyhvPVApKzE+PjEpLW8saT0oYT1hK2krMT4+MSktaSxQPXMqUytsKmsrMjA0OD4+MTIscz1zKmstbCpTKzIwNDg+PjEyLGw9UCxQPWMqdyt1KmIrMjA0OD4+MTIsYz1jKmItdSp3KzIwNDg+PjEyLHU9UCxyW0VdPW4rbCxyW0UrN109bi1sLHJbRSsxXT1hK3UscltFKzZdPWEtdSxyW0UrMl09aStjLHJbRSs1XT1pLWMscltFKzNdPW8rcyxyW0UrNF09by1zKTooUD1BKmYrNTEyPj4xMCxyW0VdPVAscltFKzFdPVAscltFKzJdPVAscltFKzNdPVAscltFKzRdPVAscltFKzVdPVAscltFKzZdPVAscltFKzddPVApO2Zvcih2YXIgaj0wO2o8ODsrK2opZj1yW2pdLDAhPSgoaD1yW2orOF0pfChkPXJbaisxNl0pfChwPXJbaisyNF0pfCh2PXJbaiszMl0pfCh5PXJbais0MF0pfChtPXJbais0OF0pfChGPXJbais1Nl0pKT8oYT0obj00MTEyKygobj1BKmYrMjA0OD4+MTIpKyhhPUEqdisyMDQ4Pj4xMikrMT4+MSkpLWEsUD0oaT1kKSpPKyhvPW0pKngrMjA0OD4+MTIsaT1pKngtbypPKzIwNDg+PjEyLG89UCx1PShzPShzPUMqKGgtRikrMjA0OD4+MTIpKyh1PXkpKzE+PjEpLXUsYz0obD0obD1DKihoK0YpKzIwNDg+PjEyKSsoYz1wKSsxPj4xKS1jLFA9cypTK2wqaysyMDQ4Pj4xMixzPXMqay1sKlMrMjA0OD4+MTIsbD1QLFA9Yyp3K3UqYisyMDQ4Pj4xMixjPWMqYi11KncrMjA0OD4+MTIsKGY9KG49bitvKzE+PjEpK2wpPDE2P2Y9MDpmPj00MDgwP2Y9MjU1OmY+Pj00LChoPShhPWEraSsxPj4xKSsodT1QKSk8MTY/aD0wOmg+PTQwODA/aD0yNTU6aD4+PTQsKGQ9KGk9YS1pKStjKTwxNj9kPTA6ZD49NDA4MD9kPTI1NTpkPj49NCwocD0obz1uLW8pK3MpPDE2P3A9MDpwPj00MDgwP3A9MjU1OnA+Pj00LCh2PW8tcyk8MTY/dj0wOnY+PTQwODA/dj0yNTU6dj4+PTQsKHk9aS1jKTwxNj95PTA6eT49NDA4MD95PTI1NTp5Pj49NCwobT1hLXUpPDE2P209MDptPj00MDgwP209MjU1Om0+Pj00LChGPW4tbCk8MTY/Rj0wOkY+PTQwODA/Rj0yNTU6Rj4+PTQsSVt0K2pdPWYsSVt0K2orOF09aCxJW3QraisxNl09ZCxJW3QraisyNF09cCxJW3QraiszMl09dixJW3Qrais0MF09eSxJW3Qrais0OF09bSxJW3Qrais1Nl09Rik6KFA9KFA9QSpmKzgxOTI+PjE0KTwtMjA0MD8wOlA+PTIwMjQ/MjU1OlArMjA1Nj4+NCxJW3Qral09UCxJW3Qrais4XT1QLElbdCtqKzE2XT1QLElbdCtqKzI0XT1QLElbdCtqKzMyXT1QLElbdCtqKzQwXT1QLElbdCtqKzQ4XT1QLElbdCtqKzU2XT1QKX1mdW5jdGlvbiBFKGUsdCl7Zm9yKHZhciByPXQuYmxvY2tzUGVyTGluZSxuPXQuYmxvY2tzUGVyQ29sdW1uLGE9bmV3IEludDE2QXJyYXkoNjQpLGk9MDtpPG47aSsrKWZvcih2YXIgbz0wO288cjtvKyspSSh0LFAodCxpLG8pLGEpO3JldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBqKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQsbj1lLmxlbmd0aC0xLGk9cjx0P3I6dDtpZih0Pj1uKXJldHVybiBudWxsO3ZhciBvPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZihvPj02NTQ3MiYmbzw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6byxvZmZzZXQ6dH07Zm9yKHZhciBzPSgwLGEucmVhZFVpbnQxNikoZSxpKTshKHM+PTY1NDcyJiZzPD02NTUzNCk7KXtpZigrK2k+PW4pcmV0dXJuIG51bGw7cz0oMCxhLnJlYWRVaW50MTYpKGUsaSl9cmV0dXJue2ludmFsaWQ6by50b1N0cmluZygxNiksbWFya2VyOnMsb2Zmc2V0Oml9fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuZGVjb2RlVHJhbnNmb3JtLG49dm9pZCAwPT09cj9udWxsOnIsYT10LmNvbG9yVHJhbnNmb3JtLGk9dm9pZCAwPT09YT8tMTphO2wodGhpcyxlKSx0aGlzLl9kZWNvZGVUcmFuc2Zvcm09bix0aGlzLl9jb2xvclRyYW5zZm9ybT1pfXJldHVybiB1KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5kbmxTY2FuTGluZXMscj12b2lkIDA9PT10P251bGw6dDtmdW5jdGlvbiBvKCl7dmFyIHQ9KDAsYS5yZWFkVWludDE2KShlLGwpLHI9KGwrPTIpK3QtMixpPWooZSxyLGwpO2kmJmkuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpLHI9aS5vZmZzZXQpO3ZhciBvPWUuc3ViYXJyYXkobCxyKTtyZXR1cm4gbCs9by5sZW5ndGgsb31mdW5jdGlvbiBzKGUpe3ZhciB0LHI9TWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOC9lLm1heEgpLG49TWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgvZS5tYXhWKSxhPWkoZS5jb21wb25lbnRzKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBvPXQudmFsdWUscz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqby5oL2UubWF4SCksYz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKm8udi9lLm1heFYpLHU9cipvLmgsbD1uKm8udio2NCoodSsxKTtvLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShsKSxvLmJsb2Nrc1BlckxpbmU9cyxvLmJsb2Nrc1BlckNvbHVtbj1jfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLm1jdXNQZXJMaW5lPXIsZS5tY3VzUGVyQ29sdW1uPW59dmFyIGMsdSxsPTAsZj1udWxsLGg9bnVsbCxkPTAscD1bXSxiPVtdLHc9W10saz0oMCxhLnJlYWRVaW50MTYpKGUsbCk7aWYobCs9Miw2NTQ5NiE9PWspdGhyb3cgbmV3IGcoIlNPSSBub3QgZm91bmQiKTtrPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yO2U6Zm9yKDs2NTQ5NyE9PWs7KXt2YXIgUz12b2lkIDAseD12b2lkIDAsTz12b2lkIDA7c3dpdGNoKGspe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDp2YXIgQT1vKCk7NjU1MDQ9PT1rJiY3ND09PUFbMF0mJjcwPT09QVsxXSYmNzM9PT1BWzJdJiY3MD09PUFbM10mJjA9PT1BWzRdJiYoZj17dmVyc2lvbjp7bWFqb3I6QVs1XSxtaW5vcjpBWzZdfSxkZW5zaXR5VW5pdHM6QVs3XSx4RGVuc2l0eTpBWzhdPDw4fEFbOV0seURlbnNpdHk6QVsxMF08PDh8QVsxMV0sdGh1bWJXaWR0aDpBWzEyXSx0aHVtYkhlaWdodDpBWzEzXSx0aHVtYkRhdGE6QS5zdWJhcnJheSgxNCwxNCszKkFbMTJdKkFbMTNdKX0pLDY1NTE4PT09ayYmNjU9PT1BWzBdJiYxMDA9PT1BWzFdJiYxMTE9PT1BWzJdJiY5OD09PUFbM10mJjEwMT09PUFbNF0mJihoPXt2ZXJzaW9uOkFbNV08PDh8QVs2XSxmbGFnczA6QVs3XTw8OHxBWzhdLGZsYWdzMTpBWzldPDw4fEFbMTBdLHRyYW5zZm9ybUNvZGU6QVsxMV19KTticmVhaztjYXNlIDY1NDk5OmZvcih2YXIgQz0oMCxhLnJlYWRVaW50MTYpKGUsbCkrKGwrPTIpLTI7bDxDOyl7dmFyIFA9ZVtsKytdLEk9bmV3IFVpbnQxNkFycmF5KDY0KTtpZihQPj40PT0wKWZvcih4PTA7eDw2NDt4KyspSVttW3hdXT1lW2wrK107ZWxzZXtpZihQPj40IT0xKXRocm93IG5ldyBnKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoeD0wO3g8NjQ7eCsrKUlbbVt4XV09KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9cFsxNSZQXT1JfWJyZWFrO2Nhc2UgNjU0NzI6Y2FzZSA2NTQ3MzpjYXNlIDY1NDc0OmlmKGMpdGhyb3cgbmV3IGcoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO2wrPTIsKGM9e30pLmV4dGVuZGVkPTY1NDczPT09ayxjLnByb2dyZXNzaXZlPTY1NDc0PT09ayxjLnByZWNpc2lvbj1lW2wrK107dmFyIE09KDAsYS5yZWFkVWludDE2KShlLGwpO2wrPTIsYy5zY2FuTGluZXM9cnx8TSxjLnNhbXBsZXNQZXJMaW5lPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yLGMuY29tcG9uZW50cz1bXSxjLmNvbXBvbmVudElkcz17fTt2YXIgXz1lW2wrK10sTD0wLFI9MDtmb3IoUz0wO1M8XztTKyspe3ZhciBOPWVbbF0sRD1lW2wrMV0+PjQsQj0xNSZlW2wrMV07TDxEJiYoTD1EKSxSPEImJihSPUIpO3ZhciBVPWVbbCsyXTtPPWMuY29tcG9uZW50cy5wdXNoKHtoOkQsdjpCLHF1YW50aXphdGlvbklkOlUscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pLGMuY29tcG9uZW50SWRzW05dPU8tMSxsKz0zfWMubWF4SD1MLGMubWF4Vj1SLHMoYyk7YnJlYWs7Y2FzZSA2NTQ3Njp2YXIgJD0oMCxhLnJlYWRVaW50MTYpKGUsbCk7Zm9yKGwrPTIsUz0yO1M8JDspe3ZhciBYPWVbbCsrXSxIPW5ldyBVaW50OEFycmF5KDE2KSxxPTA7Zm9yKHg9MDt4PDE2O3grKyxsKyspcSs9SFt4XT1lW2xdO3ZhciBHPW5ldyBVaW50OEFycmF5KHEpO2Zvcih4PTA7eDxxO3grKyxsKyspR1t4XT1lW2xdO1MrPTE3K3EsKFg+PjQ9PTA/dzpiKVsxNSZYXT1GKEgsRyl9YnJlYWs7Y2FzZSA2NTUwMTpsKz0yLHU9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTI7YnJlYWs7Y2FzZSA2NTQ5ODp2YXIgej0xPT0rK2QmJiFyO2wrPTI7dmFyIFc9ZVtsKytdLFY9W107Zm9yKFM9MDtTPFc7UysrKXt2YXIgWT1lW2wrK10sSz1jLmNvbXBvbmVudElkc1tZXSxKPWMuY29tcG9uZW50c1tLXTtKLmluZGV4PVk7dmFyIFo9ZVtsKytdO0ouaHVmZm1hblRhYmxlREM9d1taPj40XSxKLmh1ZmZtYW5UYWJsZUFDPWJbMTUmWl0sVi5wdXNoKEopfXZhciBRPWVbbCsrXSxlZT1lW2wrK10sdGU9ZVtsKytdO3RyeXt2YXIgcmU9VChlLGwsYyxWLHUsUSxlZSx0ZT4+NCwxNSZ0ZSx6KTtsKz1yZX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgdilyZXR1cm4oMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLiIpKSx0aGlzLnBhcnNlKGUse2RubFNjYW5MaW5lczp0LnNjYW5MaW5lc30pO2lmKHQgaW5zdGFuY2VvZiB5KXsoMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS4iKSk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bCs9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbbF0mJmwtLTticmVhaztkZWZhdWx0OnZhciBuZT1qKGUsbC0yLGwtMyk7aWYobmUmJm5lLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrbmUuaW52YWxpZCksbD1uZS5vZmZzZXQ7YnJlYWt9aWYoIW5lfHxsPj1lLmxlbmd0aC0xKXsoMCxuLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgZX10aHJvdyBuZXcgZygiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIray50b1N0cmluZygxNikpfWs9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9dGhpcy53aWR0aD1jLnNhbXBsZXNQZXJMaW5lLHRoaXMuaGVpZ2h0PWMuc2NhbkxpbmVzLHRoaXMuamZpZj1mLHRoaXMuYWRvYmU9aCx0aGlzLmNvbXBvbmVudHM9W107dmFyIGFlLGllPWkoYy5jb21wb25lbnRzKTt0cnl7Zm9yKGllLnMoKTshKGFlPWllLm4oKSkuZG9uZTspe3ZhciBvZT1hZS52YWx1ZSxzZT1wW29lLnF1YW50aXphdGlvbklkXTtzZSYmKG9lLnF1YW50aXphdGlvblRhYmxlPXNlKSx0aGlzLmNvbXBvbmVudHMucHVzaCh7aW5kZXg6b2UuaW5kZXgsb3V0cHV0OkUoMCxvZSksc2NhbGVYOm9lLmgvYy5tYXhILHNjYWxlWTpvZS52L2MubWF4VixibG9ja3NQZXJMaW5lOm9lLmJsb2Nrc1BlckxpbmUsYmxvY2tzUGVyQ29sdW1uOm9lLmJsb2Nrc1BlckNvbHVtbn0pfX1jYXRjaChlKXtpZS5lKGUpfWZpbmFsbHl7aWUuZigpfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofX0se2tleToiX2dldExpbmVhcml6ZWRCbG9ja0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbyxzLGMsdSxsLGYsaCxkLHA9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxnPXRoaXMud2lkdGgvZSx2PXRoaXMuaGVpZ2h0L3QseT0wLG09dGhpcy5jb21wb25lbnRzLmxlbmd0aCxiPWUqdCptLHc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGIpLGs9bmV3IFVpbnQzMkFycmF5KGUpLFM9NDI5NDk2NzI4ODtmb3IoYz0wO2M8bTtjKyspe2lmKG49KHI9dGhpcy5jb21wb25lbnRzW2NdKS5zY2FsZVgqZyxhPXIuc2NhbGVZKnYseT1jLGg9ci5vdXRwdXQsaT1yLmJsb2Nrc1BlckxpbmUrMTw8MyxuIT09ZCl7Zm9yKG89MDtvPGU7bysrKXU9MHxvKm4sa1tvXT0odSZTKTw8M3w3JnU7ZD1ufWZvcihzPTA7czx0O3MrKylmb3IoZj1pKigodT0wfHMqYSkmUyl8KDcmdSk8PDMsbz0wO288ZTtvKyspd1t5XT1oW2Yra1tvXV0seSs9bX12YXIgeD10aGlzLl9kZWNvZGVUcmFuc2Zvcm07aWYocHx8NCE9PW18fHh8fCh4PW5ldyBJbnQzMkFycmF5KFstMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NV0pKSx4KWZvcihjPTA7YzxiOylmb3IodT0wLGw9MDt1PG07dSsrLGMrKyxsKz0yKXdbY109KHdbY10qeFtsXT4+OCkreFtsKzFdO3JldHVybiB3fX0se2tleToiX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZG9iZT8hIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTozPT09dGhpcy5udW1Db21wb25lbnRzPzAhPT10aGlzLl9jb2xvclRyYW5zZm9ybSYmKDgyIT09dGhpcy5jb21wb25lbnRzWzBdLmluZGV4fHw3MSE9PXRoaXMuY29tcG9uZW50c1sxXS5pbmRleHx8NjYhPT10aGlzLmNvbXBvbmVudHNbMl0uaW5kZXgpOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX19LHtrZXk6Il9jb252ZXJ0WWNjVG9SZ2IiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7YTxpO2ErPTMpdD1lW2FdLHI9ZVthKzFdLG49ZVthKzJdLGVbYV09dC0xNzkuNDU2KzEuNDAyKm4sZVthKzFdPXQrMTM1LjQ1OS0uMzQ0KnItLjcxNCpuLGVbYSsyXT10LTIyNi44MTYrMS43NzIqcjtyZXR1cm4gZX19LHtrZXk6Il9jb252ZXJ0WWNja1RvUmdiIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGEsaT0wLG89MCxzPWUubGVuZ3RoO288cztvKz00KXQ9ZVtvXSxyPWVbbysxXSxuPWVbbysyXSxhPWVbbyszXSxlW2krK109ciooLTY2MDYzNTY2OTQyMDM2NGUtMTkqcisuMDAwNDM3MTMwNDc1OTI2MjMyKm4tNTQwODA2MTAwNjQ1OTllLTE4KnQrLjAwMDQ4NDQ5Nzk3MTIwMjgxKmEtLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K24qKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKm4rLjAwMDgxNzA3NjkxMTM0NjYyNSp0LS4wMDQ3NzI3MTQwNTQwODc0NyphKzEuNTMzODAyNTMyMjE3MzQpK3QqKC4wMDA5NjEyNTAxODQxMzA2ODgqdC0uMDAyNjYyNTczMzIyODM5MzMqYSsuNDgzNTcwODg0NTEyNjUpK2EqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KmErLjQ4NDc5MTU2MTQ5MDc3NiksZVtpKytdPTEwNy4yNjgwMzkzOTc3MjQrciooMjE5OTI3MTA0NTI1NzQxZS0xOSpyLS4wMDA2NDA5OTIwMTgyOTc5NDUqbisuMDAwNjU5Mzk3MDAxMjQ1NTc3KnQrLjAwMDQyNjEwNTY1MjkzODgzNyphLS4xNzY0OTE3OTI0NjI4NzUpK24qKC0uMDAwNzc4MjY5OTQxNTEzNjgzKm4rLjAwMTMwODcyMjYxNDA4Mjc1KnQrLjAwMDc3MDQ4MjYzMTgwMTEzMiphLS4xNTEwNTE0OTI3NzU1NjIpK3QqKC4wMDEyNjkzNTM2ODExNDg0Myp0LS4wMDI2NTA5MDE4OTAxMDg5OCphKy4yNTgwMjkxMDIwNjg0NSkrYSooLS4wMDAzMTg5MTMxMTc1ODgzMjgqYS0uMjEzNzQyNDAwMzIzNjY1KSxlW2krK109ciooLS4wMDA1NzAxMTUxOTY5NzM2Nzcqci0yNjM0MDkwNTEwMDQ1ODllLTE5Km4rLjAwMjA3NDEwODgxMTUwMTIqdC0uMDAyODgyNjAyMzY4NTM0NDIqYSsuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrbiooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqbi0uMDAwMTMyNjg5MDQzOTYxNDQ2KnQrLjAwMDU2MDgzMzY5MTI0MjgxMiphLS4xOTUxNTIwMjc1MzQwNDkpK3QqKC4wMDE3NDQxODEzMjkyNzU4Mip0LS4wMDI1NTI0MzMyMTQzOTM0NyphKy4xMTY5MzUwMjA0NjUxNDUpK2EqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KmErLjI0MTY1MjYwMjMyNDA3KTtyZXR1cm4gZS5zdWJhcnJheSgwLGkpfX0se2tleToiX2NvbnZlcnRZY2NrVG9DbXlrIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz00KXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPTQzNC40NTYtdC0xLjQwMipuLGVbYSsxXT0xMTkuNTQxLXQrLjM0NCpyKy43MTQqbixlW2ErMl09NDgxLjgxNi10LTEuNzcyKnI7cmV0dXJuIGV9fSx7a2V5OiJfY29udmVydENteWtUb1JnYiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGk9MCxvPTAscz1lLmxlbmd0aDtvPHM7bys9NCl0PWVbb10scj1lW28rMV0sbj1lW28rMl0sYT1lW28rM10sZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNypyKy4wMDAyODk0NzE4MTg4NjQzMjk0Km4rLjAwMzI2NDIzMTA1NzUzNzgwNiphLTEuMTE4NTYxMTg2NzIwMzkzNykrciooMjYzNzQxMDc2MTYwODk0MDVlLTIxKnItODYyNjk0OTE1ODYzODU3MmUtMjAqbi0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSphLS4wMjE1NTY4ODc5NDk3ODk2NykrbiooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKm4tLjAwMDMyNjc4MDgyNzk0ODUyODYqYSsuMDY4Njc0MjIzODU5NTM0NSktYSooLjAwMDMzNjE5NzE3NzYxODM5MzcqYSsuNzQzMDY1OTE1MTM0MjI1NCksZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KnIrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKm4rLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqYS0uMzEwOTY4OTU4NzUxNTg3NSkrciooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCpyKy4wMDAyNzAyODQ1MjUzNTM0NzE0Km4rLjAwMjAyMDAzMDg5NzczMDcxNTYqYS0uNzQ4ODA1MjE2NzAxNTQ5NCkrbiooNjgzNDgxNTk5ODIzNTY2MmUtMjAqbisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqYS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWEqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmErLjczNjQ4ODM4MDc3MzMxNjgpLGVbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKnIrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqbi0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqYS0uMDU1NjIxODY5ODAyNjQwMzQpK3IqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NipyKy4wMDA5NjkyMjM5MTMwNzI1MTg2Km4rLjAwMDc3ODI2OTI0NTAwMzYyNTMqYS0uNDQwMTUyMzIzNjc1MjY0NjMpK24qKDUuMDY4ODgyOTE0MDY4NzY5ZS03Km4rLjAwMTc3NzgzNjkwMTEzNzUwNzEqYS0uNzU5MTQ1NDY0OTc0OTYwOSktYSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqYSsuNzA2Mzc3MDE4NjE2MDE0NCk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX19LHtrZXk6ImdldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGgscj1lLmhlaWdodCxuPWUuZm9yY2VSR0IsYT12b2lkIDAhPT1uJiZuLG89ZS5pc1NvdXJjZVBERixzPXZvaWQgMCE9PW8mJm87aWYodGhpcy5udW1Db21wb25lbnRzPjQpdGhyb3cgbmV3IGcoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTt2YXIgYz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHQscixzKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiZhKXt2YXIgdSxsPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmMubGVuZ3RoKSxmPTAsaD1pKGMpO3RyeXtmb3IoaC5zKCk7ISh1PWgubigpKS5kb25lOyl7dmFyIGQ9dS52YWx1ZTtsW2YrK109ZCxsW2YrK109ZCxsW2YrK109ZH19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGx9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihjKTtpZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKGMpOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKGMpO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoYyl9cmV0dXJuIGN9fV0pLGV9KCk7dC5KcGVnSW1hZ2U9TX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnB4U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDE1OSksbz1yKDIpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX12YXIgbD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYyhlLHQpfShoLGUpO3ZhciB0LHIsYSxsLGY9KGE9aCxsPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9dShhKTtpZihsKXt2YXIgcj11KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBoKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxoKSwobj1mLmNhbGwodGhpcyx0KSkuc3RyZWFtPWUsbi5kaWN0PWUuZGljdCxuLm1heWJlTGVuZ3RoPXQsbi5wYXJhbXM9cixufXJldHVybiB0PWgsKHI9W3trZXk6ImJ5dGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmVvZil7dmFyIGU9bmV3IGkuSnB4SW1hZ2U7ZS5wYXJzZSh0aGlzLmJ5dGVzKTt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmNvbXBvbmVudHNDb3VudCxhPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1hKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtmb3IodmFyIG89bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqcipuKSxzPTA7czxhO3MrKylmb3IodmFyIGM9ZS50aWxlc1tzXSx1PWMud2lkdGgsbD1jLmhlaWdodCxmPWMubGVmdCxoPWMudG9wLGQ9Yy5pdGVtcyxwPTAsZz0odCpoK2YpKm4sdj10Km4seT11Km4sbT0wO208bDttKyspe3ZhciBiPWQuc3ViYXJyYXkocCxwK3kpO28uc2V0KGIsZykscCs9eSxnKz12fXRoaXMuYnVmZmVyPW99dGhpcy5idWZmZXJMZW5ndGg9dGhpcy5idWZmZXIubGVuZ3RoLHRoaXMuZW9mPSEwfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksaH0oYS5EZWNvZGVTdHJlYW0pO3QuSnB4U3RyZWFtPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweEltYWdlPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxMzUpLG89cigxNTUpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZihlLHQpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZChlKTtpZih0KXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9dmFyIHA9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLCJKUFggZXJyb3I6ICIuY29uY2F0KGUpLCJKcHhFcnJvciIpfXJldHVybiBjKHIpfShhLkJhc2VFeGNlcHRpb24pLGc9e0xMOjAsTEg6MSxITDoxLEhIOjJ9LHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dSh0aGlzLGUpLHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2U9ITF9cmV0dXJuIGMoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDY1MzU5IT09KDAsaS5yZWFkVWludDE2KShlLDApKWZvcih2YXIgdD1lLmxlbmd0aCxyPTA7cjx0Oyl7dmFyIG49OCxvPSgwLGkucmVhZFVpbnQzMikoZSxyKSxzPSgwLGkucmVhZFVpbnQzMikoZSxyKzQpO2lmKHIrPW4sMT09PW8mJihvPTQyOTQ5NjcyOTYqKDAsaS5yZWFkVWludDMyKShlLHIpKygwLGkucmVhZFVpbnQzMikoZSxyKzQpLHIrPTgsbis9OCksMD09PW8mJihvPXQtcituKSxvPG4pdGhyb3cgbmV3IHAoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTt2YXIgYz1vLW4sdT0hMDtzd2l0Y2gocyl7Y2FzZSAxNzg1NzM3ODMyOnU9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOnZhciBsPWVbcl07aWYoMT09PWwpe3ZhciBmPSgwLGkucmVhZFVpbnQzMikoZSxyKzMpO3N3aXRjaChmKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLGEud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK2YpfX1lbHNlIDI9PT1sJiYoMCxhLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUscixyK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLGkucmVhZFVpbnQzMikoZSxyKSYmKDAsYS53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OnZhciBoPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyk7KDAsYS53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIi5jb25jYXQocywiICgiKS5jb25jYXQoaCwiKS4iKSl9dSYmKHIrPWMpfWVsc2UgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKX19LHtrZXk6InBhcnNlSW1hZ2VQcm9wZXJ0aWVzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5nZXRCeXRlKCk7dD49MDspaWYoNjUzNjE9PSh0PDw4fCh0PWUuZ2V0Qnl0ZSgpKSkpe2Uuc2tpcCg0KTt2YXIgcj1lLmdldEludDMyKCk+Pj4wLG49ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wO2Uuc2tpcCgxNik7dmFyIG89ZS5nZXRVaW50MTYoKTtyZXR1cm4gdGhpcy53aWR0aD1yLWEsdGhpcy5oZWlnaHQ9bi1pLHRoaXMuY29tcG9uZW50c0NvdW50PW8sdm9pZCh0aGlzLmJpdHNQZXJDb21wb25lbnQ9OCl9dGhyb3cgbmV3IHAoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX19LHtrZXk6InBhcnNlQ29kZXN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9LG89ITE7dHJ5e2Zvcih2YXIgcz10O3MrMTxyOyl7dmFyIGM9KDAsaS5yZWFkVWludDE2KShlLHMpO3MrPTI7dmFyIHU9MCxsPXZvaWQgMCxmPXZvaWQgMCxoPXZvaWQgMCxkPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2goYyl7Y2FzZSA2NTM1OTpuLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOnU9KDAsaS5yZWFkVWludDE2KShlLHMpO3ZhciBiPXt9O2IuWHNpej0oMCxpLnJlYWRVaW50MzIpKGUscys0KSxiLllzaXo9KDAsaS5yZWFkVWludDMyKShlLHMrOCksYi5YT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxMiksYi5ZT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxNiksYi5YVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyMCksYi5ZVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyNCksYi5YVE9zaXo9KDAsaS5yZWFkVWludDMyKShlLHMrMjgpLGIuWVRPc2l6PSgwLGkucmVhZFVpbnQzMikoZSxzKzMyKTt2YXIgdz0oMCxpLnJlYWRVaW50MTYpKGUscyszNik7Yi5Dc2l6PXc7dmFyIGs9W107bD1zKzM4O2Zvcih2YXIgUz0wO1M8dztTKyspe3ZhciB4PXtwcmVjaXNpb246MSsoMTI3JmVbbF0pLGlzU2lnbmVkOiEhKDEyOCZlW2xdKSxYUnNpejplW2wrMV0sWVJzaXo6ZVtsKzJdfTtsKz0zLHkoeCxiKSxrLnB1c2goeCl9bi5TSVo9YixuLmNvbXBvbmVudHM9ayxtKG4sayksbi5RQ0M9W10sbi5DT0M9W107YnJlYWs7Y2FzZSA2NTM3Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgTz17fTtzd2l0Y2gobD1zKzIsMzEmKGY9ZVtsKytdKSl7Y2FzZSAwOmQ9OCxnPSEwO2JyZWFrO2Nhc2UgMTpkPTE2LGc9ITE7YnJlYWs7Y2FzZSAyOmQ9MTYsZz0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrZil9Zm9yKE8ubm9RdWFudGl6YXRpb249OD09PWQsTy5zY2FsYXJFeHBvdW5kZWQ9ZyxPLmd1YXJkQml0cz1mPj41LGg9W107bDx1K3M7KXt2YXIgQT17fTs4PT09ZD8oQS5lcHNpbG9uPWVbbCsrXT4+MyxBLm11PTApOihBLmVwc2lsb249ZVtsXT4+MyxBLm11PSg3JmVbbF0pPDw4fGVbbCsxXSxsKz0yKSxoLnB1c2goQSl9Ty5TUHFjZHM9aCxuLm1haW5IZWFkZXI/bi5RQ0Q9Tzoobi5jdXJyZW50VGlsZS5RQ0Q9TyxuLmN1cnJlbnRUaWxlLlFDQz1bXSk7YnJlYWs7Y2FzZSA2NTM3Mzp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgQz17fTtsPXMrMjt2YXIgRj12b2lkIDA7c3dpdGNoKG4uU0laLkNzaXo8MjU3P0Y9ZVtsKytdOihGPSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yKSwzMSYoZj1lW2wrK10pKXtjYXNlIDA6ZD04LGc9ITA7YnJlYWs7Y2FzZSAxOmQ9MTYsZz0hMTticmVhaztjYXNlIDI6ZD0xNixnPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitmKX1mb3IoQy5ub1F1YW50aXphdGlvbj04PT09ZCxDLnNjYWxhckV4cG91bmRlZD1nLEMuZ3VhcmRCaXRzPWY+PjUsaD1bXTtsPHUrczspe3ZhciBQPXt9Ozg9PT1kPyhQLmVwc2lsb249ZVtsKytdPj4zLFAubXU9MCk6KFAuZXBzaWxvbj1lW2xdPj4zLFAubXU9KDcmZVtsXSk8PDh8ZVtsKzFdLGwrPTIpLGgucHVzaChQKX1DLlNQcWNkcz1oLG4ubWFpbkhlYWRlcj9uLlFDQ1tGXT1DOm4uY3VycmVudFRpbGUuUUNDW0ZdPUM7YnJlYWs7Y2FzZSA2NTM2Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgVD17fTtsPXMrMjt2YXIgaj1lW2wrK107VC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmaiksVC5zb3BNYXJrZXJVc2VkPSEhKDImaiksVC5lcGhNYXJrZXJVc2VkPSEhKDQmaiksVC5wcm9ncmVzc2lvbk9yZGVyPWVbbCsrXSxULmxheWVyc0NvdW50PSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yLFQubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVtsKytdLFQuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbbCsrXSxULnhjYj0yKygxNSZlW2wrK10pLFQueWNiPTIrKDE1JmVbbCsrXSk7dmFyIEw9ZVtsKytdO2lmKFQuc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcz0hISgxJkwpLFQucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcz0hISgyJkwpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzPSEhKDQmTCksVC52ZXJ0aWNhbGx5U3RyaXBlPSEhKDgmTCksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uPSEhKDE2JkwpLFQuc2VnbWVudGF0aW9uU3ltYm9sVXNlZD0hISgzMiZMKSxULnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbj1lW2wrK10sVC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKXtmb3IodmFyIFI9W107bDx1K3M7KXt2YXIgTj1lW2wrK107Ui5wdXNoKHtQUHg6MTUmTixQUHk6Tj4+NH0pfVQucHJlY2luY3RzU2l6ZXM9Un12YXIgRD1bXTtULnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkQucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZELnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpLFQudmVydGljYWxseVN0cmlwZSYmRC5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIiksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZELnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKSxELmxlbmd0aD4wJiYobz0hMCwoMCxhLndhcm4pKCJKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgiLmNvbmNhdChELmpvaW4oIiwgIiksIikuIikpKSxuLm1haW5IZWFkZXI/bi5DT0Q9VDoobi5jdXJyZW50VGlsZS5DT0Q9VCxuLmN1cnJlbnRUaWxlLkNPQz1bXSk7YnJlYWs7Y2FzZSA2NTQyNDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKSwodj17fSkuaW5kZXg9KDAsaS5yZWFkVWludDE2KShlLHMrMiksdi5sZW5ndGg9KDAsaS5yZWFkVWludDMyKShlLHMrNCksdi5kYXRhRW5kPXYubGVuZ3RoK3MtMix2LnBhcnRJbmRleD1lW3MrOF0sdi5wYXJ0c0NvdW50PWVbcys5XSxuLm1haW5IZWFkZXI9ITEsMD09PXYucGFydEluZGV4JiYodi5DT0Q9bi5DT0Qsdi5DT0M9bi5DT0Muc2xpY2UoMCksdi5RQ0Q9bi5RQ0Qsdi5RQ0M9bi5RQ0Muc2xpY2UoMCkpLG4uY3VycmVudFRpbGU9djticmVhaztjYXNlIDY1NDI3OjA9PT0odj1uLmN1cnJlbnRUaWxlKS5wYXJ0SW5kZXgmJihfKG4sdi5pbmRleCksSShuKSksRShuLGUscyx1PXYuZGF0YUVuZC1zKTticmVhaztjYXNlIDY1MzYzOigwLGEud2FybikoIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrYy50b1N0cmluZygxNikpfXMrPXV9fWNhdGNoKGUpe2lmKG98fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IHAoZS5tZXNzYWdlKTsoMCxhLndhcm4pKCdKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICInLmNvbmNhdChlLm1lc3NhZ2UsJyIuJykpfXRoaXMudGlsZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jb21wb25lbnRzLG49dC5Dc2l6LGE9W10saT0wLG89ZS50aWxlcy5sZW5ndGg7aTxvO2krKyl7Zm9yKHZhciBzPWUudGlsZXNbaV0sYz1bXSx1PTA7dTxuO3UrKyljW3VdPU0oZSxzLHUpO3ZhciBsPWNbMF0sZj1uZXcgVWludDhDbGFtcGVkQXJyYXkobC5pdGVtcy5sZW5ndGgqbiksaD17bGVmdDpsLmxlZnQsdG9wOmwudG9wLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LGl0ZW1zOmZ9LGQ9dm9pZCAwLHA9dm9pZCAwLGc9MCx2PXZvaWQgMCx5PXZvaWQgMCxtPXZvaWQgMCxiPXZvaWQgMCx3PXZvaWQgMDtpZihzLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm0pe3ZhciBrPTQ9PT1uLFM9Y1swXS5pdGVtcyx4PWNbMV0uaXRlbXMsTz1jWzJdLml0ZW1zLEE9az9jWzNdLml0ZW1zOm51bGw7cD0uNSsoMTI4PDwoZD1yWzBdLnByZWNpc2lvbi04KSk7dmFyIEM9cy5jb21wb25lbnRzWzBdLEY9bi0zO2lmKHk9Uy5sZW5ndGgsQy5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKWZvcih2PTA7djx5O3YrKyxnKz1GKXttPVNbdl0rcCxiPXhbdl07dmFyIFA9bS0oKHc9T1t2XSkrYj4+Mik7ZltnKytdPVArdz4+ZCxmW2crK109UD4+ZCxmW2crK109UCtiPj5kfWVsc2UgZm9yKHY9MDt2PHk7disrLGcrPUYpbT1TW3ZdK3AsYj14W3ZdLHc9T1t2XSxmW2crK109bSsxLjQwMip3Pj5kLGZbZysrXT1tLS4zNDQxMypiLS43MTQxNCp3Pj5kLGZbZysrXT1tKzEuNzcyKmI+PmQ7aWYoaylmb3Iodj0wLGc9Mzt2PHk7disrLGcrPTQpZltnXT1BW3ZdK3A+PmR9ZWxzZSBmb3IodmFyIFQ9MDtUPG47VCsrKXt2YXIgST1jW1RdLml0ZW1zO2ZvcihwPS41KygxMjg8PChkPXJbVF0ucHJlY2lzaW9uLTgpKSxnPVQsdj0wLHk9SS5sZW5ndGg7djx5O3YrKylmW2ddPUlbdl0rcD4+ZCxnKz1ufWEucHVzaChoKX1yZXR1cm4gYX0obiksdGhpcy53aWR0aD1uLlNJWi5Yc2l6LW4uU0laLlhPc2l6LHRoaXMuaGVpZ2h0PW4uU0laLllzaXotbi5TSVouWU9zaXosdGhpcy5jb21wb25lbnRzQ291bnQ9bi5TSVouQ3Npen19XSksZX0oKTtmdW5jdGlvbiB5KGUsdCl7ZS54MD1NYXRoLmNlaWwodC5YT3Npei9lLlhSc2l6KSxlLngxPU1hdGguY2VpbCh0LlhzaXovZS5YUnNpeiksZS55MD1NYXRoLmNlaWwodC5ZT3Npei9lLllSc2l6KSxlLnkxPU1hdGguY2VpbCh0LllzaXovZS5ZUnNpeiksZS53aWR0aD1lLngxLWUueDAsZS5oZWlnaHQ9ZS55MS1lLnkwfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHIsbj1lLlNJWixhPVtdLGk9TWF0aC5jZWlsKChuLlhzaXotbi5YVE9zaXopL24uWFRzaXopLG89TWF0aC5jZWlsKChuLllzaXotbi5ZVE9zaXopL24uWVRzaXopLHM9MDtzPG87cysrKWZvcih2YXIgYz0wO2M8aTtjKyspKHI9e30pLnR4MD1NYXRoLm1heChuLlhUT3NpeitjKm4uWFRzaXosbi5YT3Npeiksci50eTA9TWF0aC5tYXgobi5ZVE9zaXorcypuLllUc2l6LG4uWU9zaXopLHIudHgxPU1hdGgubWluKG4uWFRPc2l6KyhjKzEpKm4uWFRzaXosbi5Yc2l6KSxyLnR5MT1NYXRoLm1pbihuLllUT3NpeisocysxKSpuLllUc2l6LG4uWXNpeiksci53aWR0aD1yLnR4MS1yLnR4MCxyLmhlaWdodD1yLnR5MS1yLnR5MCxyLmNvbXBvbmVudHM9W10sYS5wdXNoKHIpO2UudGlsZXM9YTtmb3IodmFyIHU9MCxsPW4uQ3Npejt1PGw7dSsrKWZvcih2YXIgZj10W3VdLGg9MCxkPWEubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPXt9O3I9YVtoXSxwLnRjeDA9TWF0aC5jZWlsKHIudHgwL2YuWFJzaXopLHAudGN5MD1NYXRoLmNlaWwoci50eTAvZi5ZUnNpeikscC50Y3gxPU1hdGguY2VpbChyLnR4MS9mLlhSc2l6KSxwLnRjeTE9TWF0aC5jZWlsKHIudHkxL2YuWVJzaXopLHAud2lkdGg9cC50Y3gxLXAudGN4MCxwLmhlaWdodD1wLnRjeTEtcC50Y3kwLHIuY29tcG9uZW50c1t1XT1wfX1mdW5jdGlvbiBiKGUsdCxyKXt2YXIgbj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxhPXt9O3JldHVybiBuLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHM/KGEuUFB4PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB4LGEuUFB5PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB5KTooYS5QUHg9MTUsYS5QUHk9MTUpLGEueGNiXz1yPjA/TWF0aC5taW4obi54Y2IsYS5QUHgtMSk6TWF0aC5taW4obi54Y2IsYS5QUHgpLGEueWNiXz1yPjA/TWF0aC5taW4obi55Y2IsYS5QUHktMSk6TWF0aC5taW4obi55Y2IsYS5QUHkpLGF9ZnVuY3Rpb24gdyhlLHQscil7dmFyIG49MTw8ci5QUHgsYT0xPDxyLlBQeSxpPTA9PT10LnJlc0xldmVsLG89MTw8ci5QUHgrKGk/MDotMSkscz0xPDxyLlBQeSsoaT8wOi0xKSxjPXQudHJ4MT50LnRyeDA/TWF0aC5jZWlsKHQudHJ4MS9uKS1NYXRoLmZsb29yKHQudHJ4MC9uKTowLHU9dC50cnkxPnQudHJ5MD9NYXRoLmNlaWwodC50cnkxL2EpLU1hdGguZmxvb3IodC50cnkwL2EpOjAsbD1jKnU7dC5wcmVjaW5jdFBhcmFtZXRlcnM9e3ByZWNpbmN0V2lkdGg6bixwcmVjaW5jdEhlaWdodDphLG51bXByZWNpbmN0c3dpZGU6YyxudW1wcmVjaW5jdHNoaWdoOnUsbnVtcHJlY2luY3RzOmwscHJlY2luY3RXaWR0aEluU3ViYmFuZDpvLHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kOnN9fWZ1bmN0aW9uIGsoZSx0LHIpe3ZhciBuLGEsaSxvLHM9ci54Y2JfLGM9ci55Y2JfLHU9MTw8cyxsPTE8PGMsZj10LnRieDA+PnMsaD10LnRieTA+PmMsZD10LnRieDErdS0xPj5zLHA9dC50YnkxK2wtMT4+YyxnPXQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMsdj1bXSx5PVtdO2ZvcihhPWg7YTxwO2ErKylmb3Iobj1mO248ZDtuKyspaWYoKGk9e2NieDpuLGNieTphLHRieDA6dSpuLHRieTA6bCphLHRieDE6dSoobisxKSx0YnkxOmwqKGErMSl9KS50YngwXz1NYXRoLm1heCh0LnRieDAsaS50YngwKSxpLnRieTBfPU1hdGgubWF4KHQudGJ5MCxpLnRieTApLGkudGJ4MV89TWF0aC5taW4odC50YngxLGkudGJ4MSksaS50YnkxXz1NYXRoLm1pbih0LnRieTEsaS50YnkxKSxvPU1hdGguZmxvb3IoKGkudGJ4MF8tdC50YngwKS9nLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpK01hdGguZmxvb3IoKGkudGJ5MF8tdC50YnkwKS9nLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKSpnLm51bXByZWNpbmN0c3dpZGUsaS5wcmVjaW5jdE51bWJlcj1vLGkuc3ViYmFuZFR5cGU9dC50eXBlLGkuTGJsb2NrPTMsIShpLnRieDFfPD1pLnRieDBffHxpLnRieTFfPD1pLnRieTBfKSl7di5wdXNoKGkpO3ZhciBtPXlbb107dm9pZCAwIT09bT8objxtLmNieE1pbj9tLmNieE1pbj1uOm4+bS5jYnhNYXgmJihtLmNieE1heD1uKSxhPG0uY2J5TWluP20uY2J4TWluPWE6YT5tLmNieU1heCYmKG0uY2J5TWF4PWEpKTp5W29dPW09e2NieE1pbjpuLGNieU1pbjphLGNieE1heDpuLGNieU1heDphfSxpLnByZWNpbmN0PW19dC5jb2RlYmxvY2tQYXJhbWV0ZXJzPXtjb2RlYmxvY2tXaWR0aDpzLGNvZGVibG9ja0hlaWdodDpjLG51bWNvZGVibG9ja3dpZGU6ZC1mKzEsbnVtY29kZWJsb2NraGlnaDpwLWgrMX0sdC5jb2RlYmxvY2tzPXYsdC5wcmVjaW5jdHM9eX1mdW5jdGlvbiBTKGUsdCxyKXtmb3IodmFyIG49W10sYT1lLnN1YmJhbmRzLGk9MCxvPWEubGVuZ3RoO2k8bztpKyspZm9yKHZhciBzPWFbaV0uY29kZWJsb2NrcyxjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXt2YXIgbD1zW2NdO2wucHJlY2luY3ROdW1iZXI9PT10JiZuLnB1c2gobCl9cmV0dXJue2xheWVyTnVtYmVyOnIsY29kZWJsb2NrczpufX1mdW5jdGlvbiB4KGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89MCxzPTA7czxpO3MrKylvPU1hdGgubWF4KG8sbi5jb21wb25lbnRzW3NdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO3ZhciBjPTAsdT0wLGw9MCxmPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPGE7YysrKXtmb3IoO3U8PW87dSsrKXtmb3IoO2w8aTtsKyspe3ZhciBlPW4uY29tcG9uZW50c1tsXTtpZighKHU+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7Zm9yKHZhciB0PWUucmVzb2x1dGlvbnNbdV0scj10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7ZjxyOyl7dmFyIHM9Uyh0LGYsYyk7cmV0dXJuIGYrKyxzfWY9MH19bD0wfXU9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxpPXQuQ3NpeixvPTAscz0wO3M8aTtzKyspbz1NYXRoLm1heChvLG4uY29tcG9uZW50c1tzXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTt2YXIgYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7Yzw9bztjKyspe2Zvcig7dTxhO3UrKyl7Zm9yKDtsPGk7bCsrKXt2YXIgZT1uLmNvbXBvbmVudHNbbF07aWYoIShjPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe2Zvcih2YXIgdD1lLnJlc29sdXRpb25zW2NdLHI9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Y8cjspe3ZhciBzPVModCxmLHUpO3JldHVybiBmKyssc31mPTB9fWw9MH11PTB9dGhyb3cgbmV3IHAoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIEEoZSl7dmFyIHQscixuLGEsaT1lLlNJWixvPWUuY3VycmVudFRpbGUuaW5kZXgscz1lLnRpbGVzW29dLGM9cy5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LHU9aS5Dc2l6LGw9MDtmb3Iobj0wO248dTtuKyspe3ZhciBmPXMuY29tcG9uZW50c1tuXTtsPU1hdGgubWF4KGwsZi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KX12YXIgaD1uZXcgSW50MzJBcnJheShsKzEpO2ZvcihyPTA7cjw9bDsrK3Ipe3ZhciBkPTA7Zm9yKG49MDtuPHU7KytuKXt2YXIgZz1zLmNvbXBvbmVudHNbbl0ucmVzb2x1dGlvbnM7cjxnLmxlbmd0aCYmKGQ9TWF0aC5tYXgoZCxnW3JdLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX1oW3JdPWR9dD0wLHI9MCxuPTAsYT0wLHRoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7cjw9bDtyKyspe2Zvcig7YTxoW3JdO2ErKyl7Zm9yKDtuPHU7bisrKXt2YXIgZT1zLmNvbXBvbmVudHNbbl07aWYoIShyPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe3ZhciBpPWUucmVzb2x1dGlvbnNbcl0sbz1pLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7aWYoIShhPj1vKSl7Zm9yKDt0PGM7KXt2YXIgZj1TKGksYSx0KTtyZXR1cm4gdCsrLGZ9dD0wfX19bj0wfWE9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPW8sYz0wLHU9MCxsPTAsZj0wLGg9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2g8cy5tYXhOdW1IaWdoO2grKyl7Zm9yKDtmPHMubWF4TnVtV2lkZTtmKyspe2Zvcig7bDxpO2wrKyl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1tsXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDt1PD10O3UrKyl7dmFyIHI9ZS5yZXNvbHV0aW9uc1t1XSxkPW8uY29tcG9uZW50c1tsXS5yZXNvbHV0aW9uc1t1XSxnPVAoZixoLGQscyxyKTtpZihudWxsIT09Zyl7Zm9yKDtjPGE7KXt2YXIgdj1TKHIsZyxjKTtyZXR1cm4gYysrLHZ9Yz0wfX11PTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gRihlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPTAsYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7dTxpOysrdSl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1t1XSx0PW8uY29tcG9uZW50c1t1XSxyPWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmPHQubWF4TnVtSGlnaDtmKyspe2Zvcig7bDx0Lm1heE51bVdpZGU7bCsrKXtmb3IoO2M8PXI7YysrKXt2YXIgaD1lLnJlc29sdXRpb25zW2NdLGQ9dC5yZXNvbHV0aW9uc1tjXSxnPVAobCxmLGQsdCxoKTtpZihudWxsIT09Zyl7Zm9yKDtzPGE7KXt2YXIgdj1TKGgsZyxzKTtyZXR1cm4gcysrLHZ9cz0wfX1jPTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUChlLHQscixuLGEpe3ZhciBpPWUqbi5taW5XaWR0aCxvPXQqbi5taW5IZWlnaHQ7aWYoaSVyLndpZHRoIT0wfHxvJXIuaGVpZ2h0IT0wKXJldHVybiBudWxsO3ZhciBzPW8vci53aWR0aCphLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO3JldHVybiBpL3IuaGVpZ2h0K3N9ZnVuY3Rpb24gVChlKXtmb3IodmFyIHQ9ZS5jb21wb25lbnRzLmxlbmd0aCxyPU51bWJlci5NQVhfVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLGE9MCxpPTAsbz1uZXcgQXJyYXkodCkscz0wO3M8dDtzKyspe2Zvcih2YXIgYz1lLmNvbXBvbmVudHNbc10sdT1jLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkodSsxKSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUFYX1ZBTFVFLGQ9MCxwPTAsZz0xLHY9dTt2Pj0wOy0tdil7dmFyIHk9Yy5yZXNvbHV0aW9uc1t2XSxtPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCxiPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7Zj1NYXRoLm1pbihmLG0pLGg9TWF0aC5taW4oaCxiKSxkPU1hdGgubWF4KGQseS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZSkscD1NYXRoLm1heChwLHkucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpLGxbdl09e3dpZHRoOm0saGVpZ2h0OmJ9LGc8PD0xfXI9TWF0aC5taW4ocixmKSxuPU1hdGgubWluKG4saCksYT1NYXRoLm1heChhLGQpLGk9TWF0aC5tYXgoaSxwKSxvW3NdPXtyZXNvbHV0aW9uczpsLG1pbldpZHRoOmYsbWluSGVpZ2h0OmgsbWF4TnVtV2lkZTpkLG1heE51bUhpZ2g6cH19cmV0dXJue2NvbXBvbmVudHM6byxtaW5XaWR0aDpyLG1pbkhlaWdodDpuLG1heE51bVdpZGU6YSxtYXhOdW1IaWdoOml9fWZ1bmN0aW9uIEkoZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT10LkNzaXosaT0wO2k8YTtpKyspe2Zvcih2YXIgbz1uLmNvbXBvbmVudHNbaV0scz1vLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsYz1bXSx1PVtdLGw9MDtsPD1zO2wrKyl7dmFyIGY9YigwLG8sbCksaD17fSxkPTE8PHMtbDtoLnRyeDA9TWF0aC5jZWlsKG8udGN4MC9kKSxoLnRyeTA9TWF0aC5jZWlsKG8udGN5MC9kKSxoLnRyeDE9TWF0aC5jZWlsKG8udGN4MS9kKSxoLnRyeTE9TWF0aC5jZWlsKG8udGN5MS9kKSxoLnJlc0xldmVsPWwsdygwLGgsZiksYy5wdXNoKGgpO3ZhciBnPXZvaWQgMDtpZigwPT09bCkoZz17fSkudHlwZT0iTEwiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL2QpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL2QpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL2QpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL2QpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSxoLnN1YmJhbmRzPVtnXTtlbHNle3ZhciB2PTE8PHMtbCsxLHk9W107KGc9e30pLnR5cGU9IkhMIixnLnRieDA9TWF0aC5jZWlsKG8udGN4MC92LS41KSxnLnRieTA9TWF0aC5jZWlsKG8udGN5MC92KSxnLnRieDE9TWF0aC5jZWlsKG8udGN4MS92LS41KSxnLnRieTE9TWF0aC5jZWlsKG8udGN5MS92KSxnLnJlc29sdXRpb249aCxrKDAsZyxmKSx1LnB1c2goZykseS5wdXNoKGcpLChnPXt9KS50eXBlPSJMSCIsZy50YngwPU1hdGguY2VpbChvLnRjeDAvdiksZy50YnkwPU1hdGguY2VpbChvLnRjeTAvdi0uNSksZy50YngxPU1hdGguY2VpbChvLnRjeDEvdiksZy50YnkxPU1hdGguY2VpbChvLnRjeTEvdi0uNSksZy5yZXNvbHV0aW9uPWgsaygwLGcsZiksdS5wdXNoKGcpLHkucHVzaChnKSwoZz17fSkudHlwZT0iSEgiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL3YtLjUpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL3YtLjUpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL3YtLjUpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL3YtLjUpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSx5LnB1c2goZyksaC5zdWJiYW5kcz15fX1vLnJlc29sdXRpb25zPWMsby5zdWJiYW5kcz11fXZhciBtPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO3N3aXRjaChtKXtjYXNlIDA6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHgoZSk7YnJlYWs7Y2FzZSAxOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBPKGUpO2JyZWFrO2Nhc2UgMjpuLnBhY2tldHNJdGVyYXRvcj1uZXcgQShlKTticmVhaztjYXNlIDM6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IEMoZSk7YnJlYWs7Y2FzZSA0Om4ucGFja2V0c0l0ZXJhdG9yPW5ldyBGKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHAoIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICIuY29uY2F0KG0pKX19ZnVuY3Rpb24gRShlLHQscixuKXt2YXIgYSxvPTAscz0wLGM9ITE7ZnVuY3Rpb24gdShlKXtmb3IoO3M8ZTspe3ZhciBuPXRbcitvXTtvKyssYz8oYT1hPDw3fG4scys9NyxjPSExKTooYT1hPDw4fG4scys9OCksMjU1PT09biYmKGM9ITApfXJldHVybiBhPj4+KHMtPWUpJigxPDxlKS0xfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDI1NT09PXRbcitvLTFdJiZ0W3Irb109PT1lPyhmKDEpLCEwKToyNTU9PT10W3Irb10mJnRbcitvKzFdPT09ZSYmKGYoMiksITApfWZ1bmN0aW9uIGYoZSl7bys9ZX1mdW5jdGlvbiBoKCl7cz0wLGMmJihvKyssYz0hMSl9ZnVuY3Rpb24gZCgpe2lmKDA9PT11KDEpKXJldHVybiAxO2lmKDA9PT11KDEpKXJldHVybiAyO3ZhciBlPXUoMik7cmV0dXJuIGU8Mz9lKzM6KGU9dSg1KSk8MzE/ZSs2OihlPXUoNykpKzM3fWZvcih2YXIgZz1lLmN1cnJlbnRUaWxlLmluZGV4LHY9ZS50aWxlc1tnXSx5PWUuQ09ELnNvcE1hcmtlclVzZWQsbT1lLkNPRC5lcGhNYXJrZXJVc2VkLGI9di5wYWNrZXRzSXRlcmF0b3I7bzxuOyl7aCgpLHkmJmwoMTQ1KSYmZig0KTt2YXIgdz1iLm5leHRQYWNrZXQoKTtpZih1KDEpKXtmb3IodmFyIGs9dy5sYXllck51bWJlcixTPVtdLHg9dm9pZCAwLE89MCxBPXcuY29kZWJsb2Nrcy5sZW5ndGg7TzxBO08rKyl7dmFyIEM9KHg9dy5jb2RlYmxvY2tzW09dKS5wcmVjaW5jdCxGPXguY2J4LUMuY2J4TWluLFA9eC5jYnktQy5jYnlNaW4sVD0hMSxJPSExLEU9dm9pZCAwO2lmKHZvaWQgMCE9PXguaW5jbHVkZWQpVD0hIXUoMSk7ZWxzZXt2YXIgaj12b2lkIDA7aWYodm9pZCAwIT09KEM9eC5wcmVjaW5jdCkuaW5jbHVzaW9uVHJlZSlqPUMuaW5jbHVzaW9uVHJlZTtlbHNle3ZhciBNPUMuY2J4TWF4LUMuY2J4TWluKzEsXz1DLmNieU1heC1DLmNieU1pbisxO2o9bmV3IFUoTSxfLGspLEU9bmV3IEIoTSxfKSxDLmluY2x1c2lvblRyZWU9aixDLnplcm9CaXRQbGFuZXNUcmVlPUU7Zm9yKHZhciBMPTA7TDxrO0wrKylpZigwIT09dSgxKSl0aHJvdyBuZXcgcCgiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGoucmVzZXQoRixQLGspKWZvcig7Oyl7aWYoIXUoMSkpe2ouaW5jcmVtZW50VmFsdWUoayk7YnJlYWt9aWYoIWoubmV4dExldmVsKCkpe3guaW5jbHVkZWQ9ITAsVD1JPSEwO2JyZWFrfX19aWYoVCl7aWYoSSl7Zm9yKChFPUMuemVyb0JpdFBsYW5lc1RyZWUpLnJlc2V0KEYsUCk7OylpZih1KDEpKXtpZighRS5uZXh0TGV2ZWwoKSlicmVha31lbHNlIEUuaW5jcmVtZW50VmFsdWUoKTt4Lnplcm9CaXRQbGFuZXM9RS52YWx1ZX1mb3IodmFyIFI9ZCgpO3UoMSk7KXguTGJsb2NrKys7dmFyIE49KDAsaS5sb2cyKShSKSxEPXUoKFI8MTw8Tj9OLTE6TikreC5MYmxvY2spO1MucHVzaCh7Y29kZWJsb2NrOngsY29kaW5ncGFzc2VzOlIsZGF0YUxlbmd0aDpEfSl9fWZvcihoKCksbSYmbCgxNDYpO1MubGVuZ3RoPjA7KXt2YXIgJD1TLnNoaWZ0KCk7dm9pZCAwPT09KHg9JC5jb2RlYmxvY2spLmRhdGEmJih4LmRhdGE9W10pLHguZGF0YS5wdXNoKHtkYXRhOnQsc3RhcnQ6citvLGVuZDpyK28rJC5kYXRhTGVuZ3RoLGNvZGluZ3Bhc3NlczokLmNvZGluZ3Bhc3Nlc30pLG8rPSQuZGF0YUxlbmd0aH19fXJldHVybiBvfWZ1bmN0aW9uIGooZSx0LHIsbixhLGkscyxjLHUpe2Zvcih2YXIgbD1uLnRieDAsZj1uLnRieTAsaD1uLnRieDEtbi50YngwLGQ9bi5jb2RlYmxvY2tzLHA9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAsZz0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MCx2PTAseT1kLmxlbmd0aDt2PHk7Kyt2KXt2YXIgbT1kW3ZdLGI9bS50YngxXy1tLnRieDBfLHc9bS50YnkxXy1tLnRieTBfO2lmKDAhPT1iJiYwIT09dyYmdm9pZCAwIT09bS5kYXRhKXt2YXIgaz1uZXcgJChiLHcsbS5zdWJiYW5kVHlwZSxtLnplcm9CaXRQbGFuZXMsaSksUz0yLHg9bS5kYXRhLE89MCxBPTAsQz12b2lkIDAsRj12b2lkIDAsUD12b2lkIDA7Zm9yKEM9MCxGPXgubGVuZ3RoO0M8RjtDKyspTys9KFA9eFtDXSkuZW5kLVAuc3RhcnQsQSs9UC5jb2RpbmdwYXNzZXM7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoTyksST0wO2ZvcihDPTAsRj14Lmxlbmd0aDtDPEY7QysrKXt2YXIgRT0oUD14W0NdKS5kYXRhLnN1YmFycmF5KFAuc3RhcnQsUC5lbmQpO1Quc2V0KEUsSSksSSs9RS5sZW5ndGh9dmFyIGo9bmV3IG8uQXJpdGhtZXRpY0RlY29kZXIoVCwwLE8pO2ZvcihrLnNldERlY29kZXIoaiksQz0wO0M8QTtDKyspe3N3aXRjaChTKXtjYXNlIDA6ay5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTticmVhaztjYXNlIDE6ay5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO2JyZWFrO2Nhc2UgMjprLnJ1bkNsZWFudXBQYXNzKCksYyYmay5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpfXUmJmsucmVzZXQoKSxTPShTKzEpJTN9dmFyIE09bS50YngwXy1sKyhtLnRieTBfLWYpKmgsXz1rLmNvZWZmaWNlbnRzU2lnbixMPWsuY29lZmZpY2VudHNNYWduaXR1ZGUsUj1rLmJpdHNEZWNvZGVkLE49cz8wOi41LEQ9dm9pZCAwLEI9dm9pZCAwLFU9dm9pZCAwO0k9MDt2YXIgWD0iTEwiIT09bi50eXBlO2ZvcihDPTA7Qzx3O0MrKyl7dmFyIEg9MiooTS9ofDApKih0LWgpK3ArZztmb3IoRD0wO0Q8YjtEKyspe2lmKDAhPT0oQj1MW0ldKSlCPShCK04pKmEsMCE9PV9bSV0mJihCPS1CKSxVPVJbSV0sZVtYP0grKE08PDEpOk1dPXMmJlU+PWk/QjpCKigxPDxpLVUpO00rKyxJKyt9TSs9aC1ifX19fWZ1bmN0aW9uIE0oZSx0LHIpe2Zvcih2YXIgbj10LmNvbXBvbmVudHNbcl0sYT1uLmNvZGluZ1N0eWxlUGFyYW1ldGVycyxpPW4ucXVhbnRpemF0aW9uUGFyYW1ldGVycyxvPWEuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LHM9aS5TUHFjZHMsYz1pLnNjYWxhckV4cG91bmRlZCx1PWkuZ3VhcmRCaXRzLGw9YS5zZWdtZW50YXRpb25TeW1ib2xVc2VkLGY9YS5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzLGg9ZS5jb21wb25lbnRzW3JdLnByZWNpc2lvbixkPWEucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uLHA9ZD9uZXcgcTpuZXcgSCx2PVtdLHk9MCxtPTA7bTw9bzttKyspe2Zvcih2YXIgYj1uLnJlc29sdXRpb25zW21dLHc9Yi50cngxLWIudHJ4MCxrPWIudHJ5MS1iLnRyeTAsUz1uZXcgRmxvYXQzMkFycmF5KHcqaykseD0wLE89Yi5zdWJiYW5kcy5sZW5ndGg7eDxPO3grKyl7dmFyIEE9dm9pZCAwLEM9dm9pZCAwO2M/KEE9c1t5XS5tdSxDPXNbeV0uZXBzaWxvbix5KyspOihBPXNbMF0ubXUsQz1zWzBdLmVwc2lsb24rKG0+MD8xLW06MCkpO3ZhciBGPWIuc3ViYmFuZHNbeF0sUD1nW0YudHlwZV07aihTLHcsMCxGLGQ/MTpNYXRoLnBvdygyLGgrUC1DKSooMStBLzIwNDgpLHUrQy0xLGQsbCxmKX12LnB1c2goe3dpZHRoOncsaGVpZ2h0OmssaXRlbXM6U30pfXZhciBUPXAuY2FsY3VsYXRlKHYsbi50Y3gwLG4udGN5MCk7cmV0dXJue2xlZnQ6bi50Y3gwLHRvcDpuLnRjeTAsd2lkdGg6VC53aWR0aCxoZWlnaHQ6VC5oZWlnaHQsaXRlbXM6VC5pdGVtc319ZnVuY3Rpb24gXyhlLHQpe2Zvcih2YXIgcj1lLlNJWi5Dc2l6LG49ZS50aWxlc1t0XSxhPTA7YTxyO2ErKyl7dmFyIGk9bi5jb21wb25lbnRzW2FdLG89dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbYV0/ZS5jdXJyZW50VGlsZS5RQ0NbYV06ZS5jdXJyZW50VGlsZS5RQ0Q7aS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW87dmFyIHM9dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5DT0NbYV0/ZS5jdXJyZW50VGlsZS5DT0NbYV06ZS5jdXJyZW50VGlsZS5DT0Q7aS5jb2RpbmdTdHlsZVBhcmFtZXRlcnM9c31uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnM9ZS5jdXJyZW50VGlsZS5DT0R9dC5KcHhJbWFnZT12O3ZhciBMLFIsTixELEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dSh0aGlzLGUpO3ZhciBuPSgwLGkubG9nMikoTWF0aC5tYXgodCxyKSkrMTt0aGlzLmxldmVscz1bXTtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgbz17d2lkdGg6dCxoZWlnaHQ6cixpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChvKSx0PU1hdGguY2VpbCh0LzIpLHI9TWF0aC5jZWlsKHIvMil9fXJldHVybiBjKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPTAsYT0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGk9ZSt0KihyPXRoaXMubGV2ZWxzW25dKS53aWR0aDtpZih2b2lkIDAhPT1yLml0ZW1zW2ldKXthPXIuaXRlbXNbaV07YnJlYWt9ci5pbmRleD1pLGU+Pj0xLHQ+Pj0xLG4rK31uLS0sKHI9dGhpcy5sZXZlbHNbbl0pLml0ZW1zW3IuaW5kZXhdPWEsdGhpcy5jdXJyZW50TGV2ZWw9bixkZWxldGUgdGhpcy52YWx1ZX19LHtrZXk6ImluY3JlbWVudFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9fSx7a2V5OiJuZXh0TGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuLS1lPDA/KHRoaXMudmFsdWU9ciwhMSk6KHRoaXMuY3VycmVudExldmVsPWUsKHQ9dGhpcy5sZXZlbHNbZV0pLml0ZW1zW3QuaW5kZXhdPXIsITApfX1dKSxlfSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt1KHRoaXMsZSk7dmFyIGE9KDAsaS5sb2cyKShNYXRoLm1heCh0LHIpKSsxO3RoaXMubGV2ZWxzPVtdO2Zvcih2YXIgbz0wO288YTtvKyspe2Zvcih2YXIgcz1uZXcgVWludDhBcnJheSh0KnIpLGM9MCxsPXMubGVuZ3RoO2M8bDtjKyspc1tjXT1uO3ZhciBmPXt3aWR0aDp0LGhlaWdodDpyLGl0ZW1zOnN9O3RoaXMubGV2ZWxzLnB1c2goZiksdD1NYXRoLmNlaWwodC8yKSxyPU1hdGguY2VpbChyLzIpfX1yZXR1cm4gYyhlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGE9dGhpcy5sZXZlbHNbbl0saT1lK3QqYS53aWR0aDthLmluZGV4PWk7dmFyIG89YS5pdGVtc1tpXTtpZigyNTU9PT1vKWJyZWFrO2lmKG8+cilyZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bix0aGlzLnByb3BhZ2F0ZVZhbHVlcygpLCExO2U+Pj0xLHQ+Pj0xLG4rK31yZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bi0xLCEwfX0se2tleToiaW5jcmVtZW50VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfX0se2tleToicHJvcGFnYXRlVmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdLHI9dC5pdGVtc1t0LmluZGV4XTstLWU+PTA7KSh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yfX0se2tleToibmV4dExldmVsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV0scj10Lml0ZW1zW3QuaW5kZXhdO3JldHVybiB0Lml0ZW1zW3QuaW5kZXhdPTI1NSwhKC0tZTwwfHwodGhpcy5jdXJyZW50TGV2ZWw9ZSwodD10aGlzLmxldmVsc1tlXSkuaXRlbXNbdC5pbmRleF09ciwwKSl9fV0pLGV9KCksJD0oTD0xNyxSPW5ldyBVaW50OEFycmF5KFswLDUsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDEsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOF0pLE49bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSksRD1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpKXt2YXIgbzt1KHRoaXMsZSksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsbz0iSEgiPT09bj9EOiJITCI9PT1uP046Uix0aGlzLmNvbnRleHRMYWJlbFRhYmxlPW87dmFyIHMsYz10KnI7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkoYyksdGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkoYykscz1pPjE0P25ldyBVaW50MzJBcnJheShjKTppPjY/bmV3IFVpbnQxNkFycmF5KGMpOm5ldyBVaW50OEFycmF5KGMpLHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9cyx0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShjKTt2YXIgbD1uZXcgVWludDhBcnJheShjKTtpZigwIT09YSlmb3IodmFyIGY9MDtmPGM7ZisrKWxbZl09YTt0aGlzLmJpdHNEZWNvZGVkPWwsdGhpcy5yZXNldCgpfXJldHVybiBjKGUsW3trZXk6InNldERlY29kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcj1lfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0cz1uZXcgSW50OEFycmF5KDE5KSx0aGlzLmNvbnRleHRzWzBdPTgsdGhpcy5jb250ZXh0c1sxN109OTIsdGhpcy5jb250ZXh0c1sxOF09Nn19LHtrZXk6InNldE5laWdoYm9yc1NpZ25pZmljYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLndpZHRoLG89dGhpcy5oZWlnaHQscz10PjAsYz10KzE8aTtlPjAmJihuPXItaSxzJiYoYVtuLTFdKz0xNiksYyYmKGFbbisxXSs9MTYpLGFbbl0rPTQpLGUrMTxvJiYobj1yK2kscyYmKGFbbi0xXSs9MTYpLGMmJihhW24rMV0rPTE2KSxhW25dKz00KSxzJiYoYVtyLTFdKz0xKSxjJiYoYVtyKzFdKz0xKSxhW3JdfD0xMjh9fSx7a2V5OiJydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3Mscz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSx1PXRoaXMuYml0c0RlY29kZWQsbD0wO2w8cjtsKz00KWZvcih2YXIgZj0wO2Y8dDtmKyspZm9yKHZhciBoPWwqdCtmLGQ9MDtkPDQ7ZCsrLGgrPXQpe3ZhciBwPWwrZDtpZihwPj1yKWJyZWFrO2lmKG9baF0mPS0yLCFuW2hdJiZpW2hdKXt2YXIgZz1jW2lbaF1dO2lmKGUucmVhZEJpdChzLGcpKXt2YXIgdj10aGlzLmRlY29kZVNpZ25CaXQocCxmLGgpO2FbaF09dixuW2hdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UocCxmLGgpLG9baF18PTJ9dVtoXSsrLG9baF18PTF9fX19LHtrZXk6ImRlY29kZVNpZ25CaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdT10aGlzLndpZHRoLGw9dGhpcy5oZWlnaHQsZj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLGg9dGhpcy5jb2VmZmljZW50c1NpZ247bz10PjAmJjAhPT1mW3ItMV0sdCsxPHUmJjAhPT1mW3IrMV0/KGk9aFtyKzFdLG49bz8xLWktKGE9aFtyLTFdKToxLWktaSk6bj1vPzEtKGE9aFtyLTFdKS1hOjA7dmFyIGQ9MypuO3JldHVybiBvPWU+MCYmMCE9PWZbci11XSxlKzE8bCYmMCE9PWZbcit1XT8oaT1oW3IrdV0sbj1vPzEtaS0oYT1oW3ItdV0pK2Q6MS1pLWkrZCk6bj1vPzEtKGE9aFtyLXVdKS1hK2Q6ZCxuPj0wPyhzPTkrbixjPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMscykpOihzPTktbixjPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyxzKSksY319LHtrZXk6InJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsaT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxvPXRoaXMuY29udGV4dHMscz10aGlzLmJpdHNEZWNvZGVkLGM9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsdT1yKm4sbD00KnIsZj0wO2Y8dTtmPWUpe2U9TWF0aC5taW4odSxmK2wpO2Zvcih2YXIgaD0wO2g8cjtoKyspZm9yKHZhciBkPWYraDtkPGU7ZCs9cilpZihhW2RdJiYwPT0oMSZjW2RdKSl7dmFyIHA9MTY7MCE9KDImY1tkXSkmJihjW2RdXj0yLHA9MD09KDEyNyZpW2RdKT8xNToxNCk7dmFyIGc9dC5yZWFkQml0KG8scCk7YVtkXT1hW2RdPDwxfGcsc1tkXSsrLGNbZF18PTF9fX19LHtrZXk6InJ1bkNsZWFudXBQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxvPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxjPXRoaXMuY29udGV4dExhYmVsVGFibGUsdT10aGlzLmJpdHNEZWNvZGVkLGw9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsZj1yLGg9MipyLGQ9MypyLHA9MDtwPG47cD1lKXtlPU1hdGgubWluKHArNCxuKTtmb3IodmFyIGc9cCpyLHY9cCszPG4seT0wO3k8cjt5Kyspe3ZhciBtPWcreSxiPTAsdz1tLGs9cCxTPXZvaWQgMDtpZih2JiYwPT09bFttXSYmMD09PWxbbStmXSYmMD09PWxbbStoXSYmMD09PWxbbStkXSYmMD09PWFbbV0mJjA9PT1hW20rZl0mJjA9PT1hW20raF0mJjA9PT1hW20rZF0pe2lmKCF0LnJlYWRCaXQocywxOCkpe3VbbV0rKyx1W20rZl0rKyx1W20raF0rKyx1W20rZF0rKztjb250aW51ZX0wIT0oYj10LnJlYWRCaXQocyxMKTw8MXx0LnJlYWRCaXQocyxMKSkmJihrPXArYix3Kz1iKnIpLFM9dGhpcy5kZWNvZGVTaWduQml0KGsseSx3KSxvW3ddPVMsaVt3XT0xLHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGsseSx3KSxsW3ddfD0yLHc9bTtmb3IodmFyIHg9cDt4PD1rO3grKyx3Kz1yKXVbd10rKztiKyt9Zm9yKGs9cCtiO2s8ZTtrKyssdys9cilpZighaVt3XSYmMD09KDEmbFt3XSkpe3ZhciBPPWNbYVt3XV07MT09PXQucmVhZEJpdChzLE8pJiYoUz10aGlzLmRlY29kZVNpZ25CaXQoayx5LHcpLG9bd109UyxpW3ddPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2Uoayx5LHcpLGxbd118PTIpLHVbd10rK319fX19LHtrZXk6ImNoZWNrU2VnbWVudGF0aW9uU3ltYm9sIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMuY29udGV4dHM7aWYoMTAhPShlLnJlYWRCaXQodCxMKTw8M3xlLnJlYWRCaXQodCxMKTw8MnxlLnJlYWRCaXQodCxMKTw8MXxlLnJlYWRCaXQodCxMKSkpdGhyb3cgbmV3IHAoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1dKSxlfSgpKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIFRyYW5zZm9ybS4iKX1yZXR1cm4gYyhlLFt7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZVswXSxhPTEsaT1lLmxlbmd0aDthPGk7YSsrKW49dGhpcy5pdGVyYXRlKG4sZVthXSx0LHIpO3JldHVybiBufX0se2tleToiZXh0ZW5kIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dC0xLGE9dCsxLGk9dCtyLTIsbz10K3I7ZVtuLS1dPWVbYSsrXSxlW28rK109ZVtpLS1dLGVbbi0tXT1lW2ErK10sZVtvKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbbysrXT1lW2ktLV0sZVtuXT1lW2FdLGVbb109ZVtpXX19LHtrZXk6ImZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGZpbHRlcmAgY2FsbGVkIil9fSx7a2V5OiJpdGVyYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLG8scyxjLHUsbD1lLndpZHRoLGY9ZS5oZWlnaHQsaD1lLml0ZW1zLGQ9dC53aWR0aCxwPXQuaGVpZ2h0LGc9dC5pdGVtcztmb3Iobz0wLGE9MDthPGY7YSsrKWZvcihzPTIqYSpkLGk9MDtpPGw7aSsrLG8rKyxzKz0yKWdbc109aFtvXTtoPWUuaXRlbXM9bnVsbDt2YXIgdj1uZXcgRmxvYXQzMkFycmF5KGQrOCk7aWYoMT09PWQpe2lmKDAhPSgxJnIpKWZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZClnW29dKj0uNX1lbHNlIGZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZCl2LnNldChnLnN1YmFycmF5KG8sbytkKSw0KSx0aGlzLmV4dGVuZCh2LDQsZCksdGhpcy5maWx0ZXIodiw0LGQpLGcuc2V0KHYuc3ViYXJyYXkoNCw0K2QpLG8pO3ZhciB5PTE2LG09W107Zm9yKGE9MDthPHk7YSsrKW0ucHVzaChuZXcgRmxvYXQzMkFycmF5KHArOCkpO3ZhciBiLHc9MDtpZihlPTQrcCwxPT09cCl7aWYoMCE9KDEmbikpZm9yKGM9MDtjPGQ7YysrKWdbY10qPS41fWVsc2UgZm9yKGM9MDtjPGQ7YysrKXtpZigwPT09dyl7Zm9yKHk9TWF0aC5taW4oZC1jLHkpLG89YyxzPTQ7czxlO28rPWQscysrKWZvcihiPTA7Yjx5O2IrKyltW2JdW3NdPWdbbytiXTt3PXl9dmFyIGs9bVstLXddO2lmKHRoaXMuZXh0ZW5kKGssNCxwKSx0aGlzLmZpbHRlcihrLDQscCksMD09PXcpZm9yKG89Yy15KzEscz00O3M8ZTtvKz1kLHMrKylmb3IoYj0wO2I8eTtiKyspZ1tvK2JdPW1bYl1bc119cmV0dXJue3dpZHRoOmQsaGVpZ2h0OnAsaXRlbXM6Z319fV0pLGV9KCksSD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzPXI+PjEsYz0tMS41ODYxMzQzNDIwNTk5MjQsdT0tLjA1Mjk4MDExODU3Mjk2MSxsPS44ODI5MTEwNzU1MzA5MzQsZj0uNDQzNTA2ODUyMDQzOTcxLGg9MS4yMzAxNzQxMDQ5MTQwMDE7Zm9yKG49KHR8PTApLTMsYT1zKzQ7YS0tO24rPTIpZVtuXSo9LjgxMjg5MzA2NjExNTk2MDk7Zm9yKGk9ZiplWyhuPXQtMiktMV0sYT1zKzM7YS0tJiYobz1mKmVbbisxXSxlW25dPWgqZVtuXS1pLW8sYS0tKTtuKz0yKWk9ZiplWyhuKz0yKSsxXSxlW25dPWgqZVtuXS1pLW87Zm9yKGk9bCplWyhuPXQtMSktMV0sYT1zKzI7YS0tJiYobz1sKmVbbisxXSxlW25dLT1pK28sYS0tKTtuKz0yKWk9bCplWyhuKz0yKSsxXSxlW25dLT1pK287Zm9yKGk9dSplWyhuPXQpLTFdLGE9cysxO2EtLSYmKG89dSplW24rMV0sZVtuXS09aStvLGEtLSk7bis9MilpPXUqZVsobis9MikrMV0sZVtuXS09aStvO2lmKDAhPT1zKWZvcihpPWMqZVsobj10KzEpLTFdLGE9czthLS0mJihvPWMqZVtuKzFdLGVbbl0tPWkrbyxhLS0pO24rPTIpaT1jKmVbKG4rPTIpKzFdLGVbbl0tPWkrb319XSkscn0oWCkscT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9cj4+MTtmb3Iobj10fD0wLGE9aSsxO2EtLTtuKz0yKWVbbl0tPWVbbi0xXStlW24rMV0rMj4+Mjtmb3Iobj10KzEsYT1pO2EtLTtuKz0yKWVbbl0rPWVbbi0xXStlW24rMV0+PjF9fV0pLHJ9KFgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBpPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LG8oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTFpXU3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmNhY2hlZERhdGE9MCxuLmJpdHNDYWNoZWQ9MDtmb3IodmFyIGE9NDA5NixpPXtlYXJseUNoYW5nZTpyLGNvZGVMZW5ndGg6OSxuZXh0Q29kZToyNTgsZGljdGlvbmFyeVZhbHVlczpuZXcgVWludDhBcnJheShhKSxkaWN0aW9uYXJ5TGVuZ3RoczpuZXcgVWludDE2QXJyYXkoYSksZGljdGlvbmFyeVByZXZDb2RlczpuZXcgVWludDE2QXJyYXkoYSksY3VycmVudFNlcXVlbmNlOm5ldyBVaW50OEFycmF5KGEpLGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDowfSxvPTA7bzwyNTY7KytvKWkuZGljdGlvbmFyeVZhbHVlc1tvXT1vLGkuZGljdGlvbmFyeUxlbmd0aHNbb109MTtyZXR1cm4gbi5sendTdGF0ZT1pLG59cmV0dXJuIHQ9bCwocj1be2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmJpdHNDYWNoZWQscj10aGlzLmNhY2hlZERhdGE7dDxlOyl7dmFyIG49dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09bilyZXR1cm4gdGhpcy5lb2Y9ITAsbnVsbDtyPXI8PDh8bix0Kz04fXJldHVybiB0aGlzLmJpdHNDYWNoZWQ9dC09ZSx0aGlzLmNhY2hlZERhdGE9cix0aGlzLmxhc3RDb2RlPW51bGwscj4+PnQmKDE8PGUpLTF9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49MTAyNCxhPXRoaXMubHp3U3RhdGU7aWYoYSl7dmFyIGk9YS5lYXJseUNoYW5nZSxvPWEubmV4dENvZGUscz1hLmRpY3Rpb25hcnlWYWx1ZXMsYz1hLmRpY3Rpb25hcnlMZW5ndGhzLHU9YS5kaWN0aW9uYXJ5UHJldkNvZGVzLGw9YS5jb2RlTGVuZ3RoLGY9YS5wcmV2Q29kZSxoPWEuY3VycmVudFNlcXVlbmNlLGQ9YS5jdXJyZW50U2VxdWVuY2VMZW5ndGgscD0wLGc9dGhpcy5idWZmZXJMZW5ndGgsdj10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtuKTtmb3IoZT0wO2U8NTEyO2UrKyl7dmFyIHk9dGhpcy5yZWFkQml0cyhsKSxtPWQ+MDtpZih5PDI1NiloWzBdPXksZD0xO2Vsc2V7aWYoISh5Pj0yNTgpKXtpZigyNTY9PT15KXtsPTksbz0yNTgsZD0wO2NvbnRpbnVlfXRoaXMuZW9mPSEwLGRlbGV0ZSB0aGlzLmx6d1N0YXRlO2JyZWFrfWlmKHk8bylmb3IodD0oZD1jW3ldKS0xLHI9eTt0Pj0wO3QtLSloW3RdPXNbcl0scj11W3JdO2Vsc2UgaFtkKytdPWhbMF19aWYobSYmKHVbb109ZixjW29dPWNbZl0rMSxzW29dPWhbMF0sbD0rK28raSZvK2ktMT9sOjB8TWF0aC5taW4oTWF0aC5sb2cobytpKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKSksZj15LG48KHArPWQpKXtkb3tuKz01MTJ9d2hpbGUobjxwKTt2PXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pfWZvcih0PTA7dDxkO3QrKyl2W2crK109aFt0XX1hLm5leHRDb2RlPW8sYS5jb2RlTGVuZ3RoPWwsYS5wcmV2Q29kZT1mLGEuY3VycmVudFNlcXVlbmNlTGVuZ3RoPWQsdGhpcy5idWZmZXJMZW5ndGg9Z319fV0pJiZhKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGx9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuTFpXU3RyZWFtPXN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIGE9cigxNDgpLGk9cigxMzQpLG89cigyKTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBsKGUpfWZ1bmN0aW9uIGwoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9dmFyIGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oZCxlKTt2YXIgdCxyLG4sYSxoPShuPWQsYT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWYobik7aWYoYSl7dmFyIHI9Zih0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdSh0aGlzLGUpfSk7ZnVuY3Rpb24gZChlLHQscil7dmFyIG47aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxkKSxuPWguY2FsbCh0aGlzLHQpLCEociBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIHUobixlKTt2YXIgYT1uLnByZWRpY3Rvcj1yLmdldCgiUHJlZGljdG9yIil8fDE7aWYoYTw9MSlyZXR1cm4gdShuLGUpO2lmKDIhPT1hJiYoYTwxMHx8YT4xNSkpdGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQoYSkpO24ucmVhZEJsb2NrPTI9PT1hP24ucmVhZEJsb2NrVGlmZjpuLnJlYWRCbG9ja1BuZyxuLnN0cj1lLG4uZGljdD1lLmRpY3Q7dmFyIHM9bi5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLGM9bi5iaXRzPXIuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsZj1uLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gbi5waXhCeXRlcz1zKmMrNz4+MyxuLnJvd0J5dGVzPWYqcypjKzc+PjMsdShuLGwobikpfXJldHVybiB0PWQsKHI9W3trZXk6InJlYWRCbG9ja1RpZmYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMuYnVmZmVyTGVuZ3RoLHI9dGhpcy5lbnN1cmVCdWZmZXIodCtlKSxuPXRoaXMuYml0cyxhPXRoaXMuY29sb3JzLGk9dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IWkubGVuZ3RoLCF0aGlzLmVvZil7dmFyIG8scz0wLGM9MCx1PTAsbD0wLGY9dDtpZigxPT09biYmMT09PWEpZm9yKG89MDtvPGU7KytvKXt2YXIgaD1pW29dXnM7aF49aD4+MSxoXj1oPj4yLHM9KDEmKGhePWg+PjQpKTw8NyxyW2YrK109aH1lbHNlIGlmKDg9PT1uKXtmb3Iobz0wO288YTsrK28pcltmKytdPWlbb107Zm9yKDtvPGU7KytvKXJbZl09cltmLWFdK2lbb10sZisrfWVsc2UgaWYoMTY9PT1uKXt2YXIgZD0yKmE7Zm9yKG89MDtvPGQ7KytvKXJbZisrXT1pW29dO2Zvcig7bzxlO28rPTIpe3ZhciBwPSgoMjU1Jmlbb10pPDw4KSsoMjU1JmlbbysxXSkrKCgyNTUmcltmLWRdKTw8OCkrKDI1NSZyW2YtZCsxXSk7cltmKytdPXA+PjgmMjU1LHJbZisrXT0yNTUmcH19ZWxzZXt2YXIgZz1uZXcgVWludDhBcnJheShhKzEpLHY9KDE8PG4pLTEseT0wLG09dCxiPXRoaXMuY29sdW1ucztmb3Iobz0wO288YjsrK28pZm9yKHZhciB3PTA7dzxhOysrdyl1PG4mJihzPXM8PDh8MjU1JmlbeSsrXSx1Kz04KSxnW3ddPWdbd10rKHM+PnUtbikmdix1LT1uLGM9Yzw8bnxnW3ddLChsKz1uKT49OCYmKHJbbSsrXT1jPj5sLTgmMjU1LGwtPTgpO2w+MCYmKHJbbSsrXT0oYzw8OC1sKSsocyYoMTw8OC1sKS0xKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fX0se2tleToicmVhZEJsb2NrUG5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLHI9dGhpcy5zdHIuZ2V0Qnl0ZSgpLG49dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IW4ubGVuZ3RoLCF0aGlzLmVvZil7dmFyIGE9dGhpcy5idWZmZXJMZW5ndGgsaT10aGlzLmVuc3VyZUJ1ZmZlcihhK2UpLHM9aS5zdWJhcnJheShhLWUsYSk7MD09PXMubGVuZ3RoJiYocz1uZXcgVWludDhBcnJheShlKSk7dmFyIGMsdSxsLGY9YTtzd2l0Y2gocil7Y2FzZSAwOmZvcihjPTA7YzxlOysrYylpW2YrK109bltjXTticmVhaztjYXNlIDE6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT1uW2NdO2Zvcig7YzxlOysrYylpW2ZdPWlbZi10XStuW2NdJjI1NSxmKys7YnJlYWs7Y2FzZSAyOmZvcihjPTA7YzxlOysrYylpW2YrK109c1tjXStuW2NdJjI1NTticmVhaztjYXNlIDM6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT0oc1tjXT4+MSkrbltjXTtmb3IoO2M8ZTsrK2MpaVtmXT0oc1tjXStpW2YtdF0+PjEpK25bY10mMjU1LGYrKzticmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXU9c1tjXSxsPW5bY10saVtmKytdPXUrbDtmb3IoO2M8ZTsrK2Mpe3U9c1tjXTt2YXIgaD1zW2MtdF0sZD1pW2YtdF0scD1kK3UtaCxnPXAtZDtnPDAmJihnPS1nKTt2YXIgdj1wLXU7djwwJiYodj0tdik7dmFyIHk9cC1oO3k8MCYmKHk9LXkpLGw9bltjXSxpW2YrK109Zzw9diYmZzw9eT9kK2w6djw9eT91K2w6aCtsfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQocikpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZH0oYS5EZWNvZGVTdHJlYW0pO3QuUHJlZGljdG9yU3RyZWFtPWh9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5SdW5MZW5ndGhTdHJlYW09dm9pZCAwO3ZhciBzPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZpKGUsdCl9KGwsZSk7dmFyIHQscixzLGMsdT0ocz1sLGM9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1vKHMpO2lmKGMpe3ZhciByPW8odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwocj11LmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyfXJldHVybiB0PWwsKHI9W3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl0aGlzLmVvZj0hMDtlbHNle3ZhciB0LHI9dGhpcy5idWZmZXJMZW5ndGgsbj1lWzBdO2lmKG48MTI4KXtpZigodD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSkpW3IrK109ZVsxXSxuPjApe3ZhciBhPXRoaXMuc3RyLmdldEJ5dGVzKG4pO3Quc2V0KGEscikscis9bn19ZWxzZXtuPTI1Ny1uO3ZhciBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0W3IrK109aX10aGlzLmJ1ZmZlckxlbmd0aD1yfX19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5SdW5MZW5ndGhTdHJlYW09c30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnQ9dC5FcnJvckZvbnQ9dm9pZCAwO3ZhciBuPXIoMiksYT1yKDE2NCksaT1yKDE2Nyksbz1yKDE2OSkscz1yKDE2OCksYz1yKDE2NiksdT1yKDE3MCksbD1yKDE3MSksZj1yKDE3MiksaD1yKDE3MyksZD1yKDE3NCkscD1yKDE3NSksZz1yKDE0NSksdj1yKDE3NikseT1yKDEzNSksbT1yKDEzOSksYj1yKDE3Nyk7ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxTKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBrKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1TKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBTKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB4KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/eChlLHQpOnZvaWQgMH19ZnVuY3Rpb24geChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09TyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PU8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1PKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBGKGUsdCxyKXtyZXR1cm4gdCYmQyhlLnByb3RvdHlwZSx0KSxyJiZDKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgUD1bWzU3MzQ0LDYzNzQzXSxbMTA0ODU3NiwxMTE0MTA5XV0sVD0xZTMsST1bImFzY2VudCIsImJib3giLCJibGFjayIsImJvbGQiLCJjaGFyUHJvY09wZXJhdG9yTGlzdCIsImNvbXBvc2l0ZSIsImNzc0ZvbnRJbmZvIiwiZGF0YSIsImRlZmF1bHRWTWV0cmljcyIsImRlZmF1bHRXaWR0aCIsImRlc2NlbnQiLCJmYWxsYmFja05hbWUiLCJmb250TWF0cml4IiwiZm9udFR5cGUiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJ0eXBlIiwidmVydGljYWwiXSxFPVsiY01hcCIsImRlZmF1bHRFbmNvZGluZyIsImRpZmZlcmVuY2VzIiwiaXNNb25vc3BhY2UiLCJpc1NlcmlmRm9udCIsImlzU3ltYm9saWNGb250Iiwic2VhY01hcCIsInRvRm9udENoYXIiLCJ0b1VuaWNvZGUiLCJ2bWV0cmljcyIsIndpZHRocyJdO2Z1bmN0aW9uIGooZSl7aWYoZS5mb250TWF0cml4JiZlLmZvbnRNYXRyaXhbMF0hPT1uLkZPTlRfSURFTlRJVFlfTUFUUklYWzBdKXt2YXIgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxyPWUud2lkdGhzO2Zvcih2YXIgYSBpbiByKXJbYV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9fWZ1bmN0aW9uIE0oZSl7aWYoZS5mYWxsYmFja1RvVW5pY29kZSYmIShlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXApKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMocil8fCh0W3JdPWUuZmFsbGJhY2tUb1VuaWNvZGVbcl0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpLG8scyxjLHUpe0EodGhpcyxlKSx0aGlzLm9yaWdpbmFsQ2hhckNvZGU9dCx0aGlzLmZvbnRDaGFyPXIsdGhpcy51bmljb2RlPW4sdGhpcy5hY2NlbnQ9YSx0aGlzLndpZHRoPWksdGhpcy52bWV0cmljPW8sdGhpcy5vcGVyYXRvckxpc3RJZD1zLHRoaXMuaXNTcGFjZT1jLHRoaXMuaXNJbkZvbnQ9dX1yZXR1cm4gRihlLFt7a2V5OiJjYXRlZ29yeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxvLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX0se2tleToibm9ybWFsaXplZFVuaWNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJub3JtYWxpemVkVW5pY29kZSIsKDAsby5yZXZlcnNlSWZSdGwpKGUuX05vcm1hbGl6ZWRVbmljb2Rlc1t0aGlzLnVuaWNvZGVdfHx0aGlzLnVuaWNvZGUpLCEwKX19XSxbe2tleToiX05vcm1hbGl6ZWRVbmljb2RlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIl9Ob3JtYWxpemVkVW5pY29kZXMiLCgwLG8uZ2V0Tm9ybWFsaXplZFVuaWNvZGVzKSgpKX19XSksZX0oKTtmdW5jdGlvbiBMKGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gUihlLHQscil7ZVt0KzFdPXIsZVt0XT1yPj4+OH1mdW5jdGlvbiBOKGUsdCl7dmFyIHI9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JnI/ci02NTUzNjpyfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIGU+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KSxTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiJ0dGNmIj09PSgwLG4uYnl0ZXNUb1N0cmluZykodCl9ZnVuY3Rpb24gJChlLHQpe2Zvcih2YXIgciBpbiB0KWVbK3JdPXRbcl19ZnVuY3Rpb24gWChlLHQscil7Zm9yKHZhciBuLGE9W10saT0wLHM9ZS5sZW5ndGg7aTxzO2krKyktMSE9PShuPSgwLG8uZ2V0VW5pY29kZUZvckdseXBoKShlW2ldLHQpKSYmKGFbaV09bik7Zm9yKHZhciBjIGluIHIpLTEhPT0obj0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkocltjXSx0KSkmJihhWytjXT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBIKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX12YXIgYT0iVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgIi5jb25jYXQoZSwnKTogIicpLmNvbmNhdCh0LCciLicpO2lmKHIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYSk7cmV0dXJuKDAsbi53YXJuKShhKSx0fWZ1bmN0aW9uIHEoZSx0LHIsYSl7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPW5ldyBNYXAscz1bXSxjPW5ldyBTZXQsdT0wLGw9UFt1XVswXSxmPWwsaD1QW3VdWzFdO2Zvcih2YXIgZCBpbiBlKXt2YXIgcD1lW2R8PTBdO2lmKHQocCkpe2lmKGY+aCl7aWYoKyt1Pj1QLmxlbmd0aCl7KDAsbi53YXJuKSgiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9Zj1QW3VdWzBdLGg9UFt1XVsxXX12YXIgZz1mKys7MD09PXAmJihwPXIpO3ZhciB2PWEuZ2V0KGQpOyJzdHJpbmciPT10eXBlb2YgdiYmKHY9di5jb2RlUG9pbnRBdCgwKSksdiYmdjxsJiYhYy5oYXMocCkmJihvLnNldCh2LHApLGMuYWRkKHApKSxpW2ddPXAsc1tkXT1nfX1yZXR1cm57dG9Gb250Q2hhcjpzLGNoYXJDb2RlVG9HbHlwaElkOmksdG9Vbmljb2RlRXh0cmFNYXA6byxuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlOmZ9fWZ1bmN0aW9uIEcoZSx0LHIpe3ZhciBhLGksbyxzLGM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV0+PXJ8fG4ucHVzaCh7Zm9udENoYXJDb2RlOjB8YSxnbHlwaElkOmVbYV19KTtpZih0KXt2YXIgaSxvPWsodCk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz13KGkudmFsdWUsMiksYz1zWzBdLHU9c1sxXTt1Pj1yfHxuLnB1c2goe2ZvbnRDaGFyQ29kZTpjLGdseXBoSWQ6dX0pfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19MD09PW4ubGVuZ3RoJiZuLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pLG4uc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Zm9yKHZhciBsPVtdLGY9bi5sZW5ndGgsaD0wO2g8Zjspe3ZhciBkPW5baF0uZm9udENoYXJDb2RlLHA9W25baF0uZ2x5cGhJZF07KytoO2Zvcih2YXIgZz1kO2g8ZiYmZysxPT09bltoXS5mb250Q2hhckNvZGUmJihwLnB1c2gobltoXS5nbHlwaElkKSwrK2gsNjU1MzUhPSsrZyk7KTtsLnB1c2goW2QsZyxwXSl9cmV0dXJuIGx9KGUsdCxyKSx1PWMuYXQoLTEpWzFdPjY1NTM1PzI6MSxsPSJcMFwwIitEKHUpKyJcMANcMAEiKygwLG4uc3RyaW5nMzIpKDQrOCp1KTtmb3IoYT1jLmxlbmd0aC0xO2E+PTAmJiEoY1thXVswXTw9NjU1MzUpOy0tYSk7dmFyIGY9YSsxO2NbYV1bMF08NjU1MzUmJjY1NTM1PT09Y1thXVsxXSYmKGNbYV1bMV09NjU1MzQpO3ZhciBoLGQscCxnLHk9Y1thXVsxXTw2NTUzNT8xOjAsbT1mK3ksYj12Lk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG0sMiksUz0iIix4PSIiLE89IiIsQT0iIixDPSIiLEY9MDtmb3IoYT0wLGk9ZjthPGk7YSsrKXtkPShoPWNbYV0pWzBdLHA9aFsxXSxTKz1EKGQpLHgrPUQocCk7dmFyIFA9ITA7Zm9yKG89MSxzPShnPWhbMl0pLmxlbmd0aDtvPHM7KytvKWlmKGdbb10hPT1nW28tMV0rMSl7UD0hMTticmVha31pZihQKU8rPUQoZ1swXS1kJjY1NTM1KSxBKz1EKDApO2Vsc2V7dmFyIFQ9MioobS1hKSsyKkY7Zm9yKEYrPXAtZCsxLE8rPUQoMCksQSs9RChUKSxvPTAscz1nLmxlbmd0aDtvPHM7KytvKUMrPUQoZ1tvXSl9fXk+MCYmKHgrPSLDv8O/IixTKz0iw7/DvyIsTys9IlwwASIsQSs9IlwwXDAiKTt2YXIgST0iXDBcMCIrRCgyKm0pK0QoYi5yYW5nZSkrRChiLmVudHJ5KStEKGIucmFuZ2VTaGlmdCkreCsiXDBcMCIrUytPK0ErQyxFPSIiLGo9IiI7aWYodT4xKXtmb3IobCs9IlwwA1wwXG4iKygwLG4uc3RyaW5nMzIpKDQrOCp1KzQrSS5sZW5ndGgpLEU9IiIsYT0wLGk9Yy5sZW5ndGg7YTxpO2ErKyl7ZD0oaD1jW2FdKVswXTt2YXIgTT0oZz1oWzJdKVswXTtmb3Iobz0xLHM9Zy5sZW5ndGg7bzxzOysrbylnW29dIT09Z1tvLTFdKzEmJihwPWhbMF0rby0xLEUrPSgwLG4uc3RyaW5nMzIpKGQpKygwLG4uc3RyaW5nMzIpKHApKygwLG4uc3RyaW5nMzIpKE0pLGQ9cCsxLE09Z1tvXSk7RSs9KDAsbi5zdHJpbmczMikoZCkrKDAsbi5zdHJpbmczMikoaFsxXSkrKDAsbi5zdHJpbmczMikoTSl9aj0iXDBcZlwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoKzE2KSsiXDBcMFwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoLzEyKX1yZXR1cm4gbCsiXDAEIitEKEkubGVuZ3RoKzQpK0kraitFfWZ1bmN0aW9uIHooZSx0LHIpe3I9cnx8e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07dmFyIGE9MCxpPTAscz0wLGM9MCx1PW51bGwsbD0wO2lmKHQpe2Zvcih2YXIgZiBpbiB0KXsodT4oZnw9MCl8fCF1KSYmKHU9ZiksbDxmJiYobD1mKTt2YXIgaD0oMCxvLmdldFVuaWNvZGVSYW5nZUZvcikoZik7aWYoaDwzMilhfD0xPDxoO2Vsc2UgaWYoaDw2NClpfD0xPDxoLTMyO2Vsc2UgaWYoaDw5NilzfD0xPDxoLTY0O2Vsc2V7aWYoIShoPDEyMykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO2N8PTE8PGgtOTZ9fWw+NjU1MzUmJihsPTY1NTM1KX1lbHNlIHU9MCxsPTI1NTt2YXIgZD1lLmJib3h8fFswLDAsMCwwXSxwPXIudW5pdHNQZXJFbXx8MS8oZS5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSxnPWUuYXNjZW50U2NhbGVkPzE6cC9ULHY9ci5hc2NlbnR8fE1hdGgucm91bmQoZyooZS5hc2NlbnR8fGRbM10pKSx5PXIuZGVzY2VudHx8TWF0aC5yb3VuZChnKihlLmRlc2NlbnR8fGRbMV0pKTt5PjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJih5PS15KTt2YXIgbT1yLnlNYXh8fHYsYj0tci55TWlufHwteTtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShhKSsoMCxuLnN0cmluZzMyKShpKSsoMCxuLnN0cmluZzMyKShzKSsoMCxuLnN0cmluZzMyKShjKSsiKjIxKiIrRChlLml0YWxpY0FuZ2xlPzE6MCkrRCh1fHxlLmZpcnN0Q2hhcikrRChsfHxlLmxhc3RDaGFyKStEKHYpK0QoeSkrIlwwZCIrRChtKStEKGIpKyJcMFwwXDBcMFwwXDBcMFwwIitEKGUueEhlaWdodCkrRChlLmNhcEhlaWdodCkrRCgwKStEKHV8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBXKGUpe3ZhciB0PU1hdGguZmxvb3IoZS5pdGFsaWNBbmdsZSpNYXRoLnBvdygyLDE2KSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnJlcGxhY2UoL1teXHgyMS1ceDdFXXxbW1xdKCl7fTw+LyVdL2csIiIpLnNsaWNlKDAsNjMpfWZ1bmN0aW9uIFkoZSx0KXt0fHwodD1bW10sW11dKTt2YXIgcixuLGEsaSxvLHM9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8VihlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0sYz1bXTtmb3Iocj0wLG49cy5sZW5ndGg7cjxuO3IrKyl7dmFyIHU9W107Zm9yKGE9MCxpPShvPXRbMV1bcl18fHNbcl0pLmxlbmd0aDthPGk7YSsrKXUucHVzaChEKG8uY2hhckNvZGVBdChhKSkpO2MucHVzaCh1LmpvaW4oIiIpKX12YXIgbD1bcyxjXSxmPVsiXDABIiwiXDADIl0saD1bIlwwXDAiLCJcMAEiXSxkPVsiXDBcMCIsIgRcdCJdLHA9cy5sZW5ndGgqZi5sZW5ndGgsZz0iXDBcMCIrRChwKStEKDEyKnArNiksdj0wO2ZvcihyPTAsbj1mLmxlbmd0aDtyPG47cisrKXt2YXIgeT1sW3JdO2ZvcihhPTAsaT15Lmxlbmd0aDthPGk7YSsrKW89eVthXSxnKz1mW3JdK2hbcl0rZFtyXStEKGEpK0Qoby5sZW5ndGgpK0Qodiksdis9by5sZW5ndGh9cmV0dXJuIGcrKHMuam9pbigiIikrYy5qb2luKCIiKSl9dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixhKXtBKHRoaXMsZSksdGhpcy5uYW1lPXQsdGhpcy5wc05hbWU9bnVsbCx0aGlzLm1pbWV0eXBlPW51bGwsdGhpcy5kaXNhYmxlRm9udEZhY2U9ITEsdGhpcy5sb2FkZWROYW1lPWEubG9hZGVkTmFtZSx0aGlzLmlzVHlwZTNGb250PWEuaXNUeXBlM0ZvbnQsdGhpcy5taXNzaW5nRmlsZT0hMSx0aGlzLmNzc0ZvbnRJbmZvPWEuY3NzRm9udEluZm8sdGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgbz0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlNlcmlmKTtpZighbyYmIWEuaXNTaW11bGF0ZWRGbGFncyl7dmFyIHMsYz10LnJlcGxhY2UoL1ssX10vZywiLSIpLnNwbGl0KCItIilbMF0sbD0oMCx1LmdldFNlcmlmRm9udHMpKCksaD1rKGMuc3BsaXQoIisiKSk7dHJ5e2ZvcihoLnMoKTshKHM9aC5uKCkpLmRvbmU7KWlmKGxbcy52YWx1ZV0pe289ITA7YnJlYWt9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX10aGlzLmlzU2VyaWZGb250PW8sdGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKSx0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7dmFyIGQ9YS50eXBlLHA9YS5zdWJ0eXBlO3RoaXMudHlwZT1kLHRoaXMuc3VidHlwZT1wO3ZhciBnPXQubWF0Y2goL15JbnZhbGlkUERGanNGb250XyguKilfXGQrJC8pO2lmKHRoaXMuaXNJbnZhbGlkUERGanNGb250PSEhZyx0aGlzLmlzSW52YWxpZFBERmpzRm9udD90aGlzLmZhbGxiYWNrTmFtZT1nWzFdOnRoaXMuaXNNb25vc3BhY2U/dGhpcy5mYWxsYmFja05hbWU9Im1vbm9zcGFjZSI6dGhpcy5pc1NlcmlmRm9udD90aGlzLmZhbGxiYWNrTmFtZT0ic2VyaWYiOnRoaXMuZmFsbGJhY2tOYW1lPSJzYW5zLXNlcmlmIix0aGlzLmRpZmZlcmVuY2VzPWEuZGlmZmVyZW5jZXMsdGhpcy53aWR0aHM9YS53aWR0aHMsdGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGgsdGhpcy5jb21wb3NpdGU9YS5jb21wb3NpdGUsdGhpcy5jTWFwPWEuY01hcCx0aGlzLmNhcEhlaWdodD1hLmNhcEhlaWdodC9ULHRoaXMuYXNjZW50PWEuYXNjZW50L1QsdGhpcy5kZXNjZW50PWEuZGVzY2VudC9ULHRoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQsdGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeCx0aGlzLmJib3g9YS5iYm94LHRoaXMuZGVmYXVsdEVuY29kaW5nPWEuZGVmYXVsdEVuY29kaW5nLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMudG9Gb250Q2hhcj1bXSwiVHlwZTMiIT09YS50eXBlKXtpZih0aGlzLmNpZEVuY29kaW5nPWEuY2lkRW5jb2Rpbmd8fCIiLHRoaXMudmVydGljYWw9ISFhLnZlcnRpY2FsLHRoaXMudmVydGljYWwmJih0aGlzLnZtZXRyaWNzPWEudm1ldHJpY3MsdGhpcy5kZWZhdWx0Vk1ldHJpY3M9YS5kZWZhdWx0Vk1ldHJpY3MpLCFyfHxyLmlzRW1wdHkpcmV0dXJuIHImJigwLG4ud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJyt0KyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpLHZvaWQgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChhKTt2YXIgdixtPXcoZnVuY3Rpb24oZSx0KXt2YXIgcixhLGk9dC50eXBlLG89dC5zdWJ0eXBlLHM9dC5jb21wb3NpdGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLHkucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fFUoZSk/cj1zPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSk/cj1zPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSk/cj1zPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP3M/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9byksW3IsYV19KHIsYSksMik7ZD1tWzBdLHA9bVsxXSxkPT09dGhpcy50eXBlJiZwPT09dGhpcy5zdWJ0eXBlfHwoMCxuLmluZm8pKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIrIiIuY29uY2F0KHRoaXMudHlwZSwiLyIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIiBidXQgZm91bmQ6ICIpLmNvbmNhdChkLCIvIikuY29uY2F0KHAsIi4iKSk7dHJ5e3N3aXRjaChkKXtjYXNlIk1NVHlwZTEiOigwLG4uaW5mbykoIk1NVHlwZTEgZm9udCAoIit0KyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO3ZhciBTPSJUeXBlMUMiPT09cHx8IkNJREZvbnRUeXBlMEMiPT09cD9uZXcgZi5DRkZGb250KHIsYSk6bmV3IGIuVHlwZTFGb250KHQscixhKTtqKGEpLHY9dGhpcy5jb252ZXJ0KHQsUyxhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsdj10aGlzLmNoZWNrQW5kUmVwYWlyKHQscixhKSx0aGlzLmlzT3BlblR5cGUmJihqKGEpLGQ9Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChkLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSl9TShhKSx0aGlzLmRhdGE9dix0aGlzLmZvbnRUeXBlPSgwLGkuZ2V0Rm9udFR5cGUpKGQscCxhLmlzU3RhbmRhcmRGb250KSx0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4LHRoaXMud2lkdGhzPWEud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPWEuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMuc2VhY01hcD1hLnNlYWNNYXB9ZWxzZXtmb3IodmFyIHg9MDt4PDI1Njt4KyspdGhpcy50b0ZvbnRDaGFyW3hdPXRoaXMuZGlmZmVyZW5jZXNbeF18fGEuZGVmYXVsdEVuY29kaW5nW3hdO3RoaXMuZm9udFR5cGU9bi5Gb250VHlwZS5UWVBFM319cmV0dXJuIEYoZSxbe2tleToicmVuZGVyZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPWguRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcyxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXT9bXS5jb25jYXQoSSxFKTpJLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxpPWsobik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXZvaWQgMCE9PSh0PXRoaXNbZT1yLnZhbHVlXSkmJihhW2VdPXQpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0se2tleToiZmFsbGJhY2tUb1N5c3RlbUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5taXNzaW5nRmlsZT0hMDt2YXIgcj10aGlzLm5hbWUsYT10aGlzLnR5cGUsZj10aGlzLnN1YnR5cGUsaD0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKShyKSxwPSgwLHUuZ2V0U3RkRm9udE1hcCkoKSxnPSgwLHUuZ2V0Tm9uU3RkRm9udE1hcCkoKSx2PSEhcFtoXSx5PSEoIWdbaF18fCFwW2dbaF1dKTtoPXBbaF18fGdbaF18fGg7dmFyIG09KDAsZC5nZXRGb250QmFzaWNNZXRyaWNzKSgpW2hdO20mJihpc05hTih0aGlzLmFzY2VudCkmJih0aGlzLmFzY2VudD1tLmFzY2VudC9UKSxpc05hTih0aGlzLmRlc2NlbnQpJiYodGhpcy5kZXNjZW50PW0uZGVzY2VudC9UKSxpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1tLmNhcEhlaWdodC9UKSksdGhpcy5ib2xkPS9ib2xkL2dpLnRlc3QoaCksdGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoaCksdGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHIpO3ZhciBiPS9OYXJyb3cvZy50ZXN0KHIpO2lmKHRoaXMucmVtZWFzdXJlPSghdnx8YikmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MCwodnx8eSkmJiJDSURGb250VHlwZTIiPT09YSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7dmFyIHc9ZS5jaWRUb0dpZE1hcCxrPVtdO2lmKCQoaywoMCx1LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSksL0FyaWFsLT9CbGFjay9pLnRlc3Qocik/JChrLCgwLHUuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTovQ2FsaWJyaS9pLnRlc3QocikmJiQoaywoMCx1LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSksdyl7Zm9yKHZhciBTIGluIGspe3ZhciB4PWtbU107dm9pZCAwIT09d1t4XSYmKGtbK1NdPXdbeF0pfXcubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9a1tlXTt2b2lkIDA9PT13W3JdJiYoa1srZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2tbK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPWssdGhpcy50b1VuaWNvZGU9bmV3IGwuVG9Vbmljb2RlTWFwKGspfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QoaCkpdGhpcy50b0ZvbnRDaGFyPVgoYy5TeW1ib2xTZXRFbmNvZGluZywoMCxzLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KGgpKS9XaW5nZGluZ3MvaS50ZXN0KHIpJiYoMCxuLndhcm4pKCJOb24tZW1iZWRkZWQgV2luZ2RpbmdzIGZvbnQsIGZhbGxpbmcgYmFjayB0byBaYXBmRGluZ2JhdHMuIiksdGhpcy50b0ZvbnRDaGFyPVgoYy5aYXBmRGluZ2JhdHNFbmNvZGluZywoMCxzLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKHYpe3ZhciBPPVgodGhpcy5kZWZhdWx0RW5jb2RpbmcsKDAscy5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09YXx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe09bK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPU99ZWxzZXt2YXIgQT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKCksQz1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCF0LmNvbXBvc2l0ZSl7dmFyIG49dC5kaWZmZXJlbmNlc1tlXXx8dC5kZWZhdWx0RW5jb2RpbmdbZV0sYT0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkobixBKTstMSE9PWEmJihyPWEpfUNbK2VdPXJ9KSksdGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCYmL1RhaG9tYXxWZXJkYW5hL2kudGVzdChyKSYmJChDLCgwLHUuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpKSx0aGlzLnRvRm9udENoYXI9Q31NKGUpLHRoaXMubG9hZGVkTmFtZT1oLnNwbGl0KCItIilbMF0sdGhpcy5mb250VHlwZT0oMCxpLmdldEZvbnRUeXBlKShhLGYsZS5pc1N0YW5kYXJkRm9udCl9fSx7a2V5OiJjaGVja0FuZFJlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPVsiT1MvMiIsImNtYXAiLCJoZWFkIiwiaGhlYSIsImhtdHgiLCJtYXhwIiwibmFtZSIsInBvc3QiLCJsb2NhIiwiZ2x5ZiIsImZwZ20iLCJwcmVwIiwiY3Z0ICIsIkNGRiAiXTtmdW5jdGlvbiB1KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyWyJPUy8yIl09bnVsbCxyLmNtYXA9bnVsbCxyLmhlYWQ9bnVsbCxyLmhoZWE9bnVsbCxyLmhtdHg9bnVsbCxyLm1heHA9bnVsbCxyLm5hbWU9bnVsbCxyLnBvc3Q9bnVsbDtmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgYT1oKGUpO28uaW5jbHVkZXMoYS50YWcpJiYwIT09YS5sZW5ndGgmJihyW2EudGFnXT1hKX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLGk9ZS5wb3M7ZS5wb3M9ZS5zdGFydHx8MCxlLnNraXAobik7dmFyIG89ZS5nZXRCeXRlcyhhKTtyZXR1cm4gZS5wb3M9aSwiaGVhZCI9PT10JiYob1s4XT1vWzldPW9bMTBdPW9bMTFdPTAsb1sxN118PTMyKSx7dGFnOnQsY2hlY2tzdW06cixsZW5ndGg6YSxvZmZzZXQ6bixkYXRhOm99fWZ1bmN0aW9uIGQoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiB5KGUsdCxyLG4sYSxpKXt2YXIgbz17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHItdDw9MTIpcmV0dXJuIG87dmFyIHM9ZS5zdWJhcnJheSh0LHIpLGM9TihzWzBdLHNbMV0pO2lmKGM8MClyZXR1cm4gUihzLDAsYz0tMSksbi5zZXQocyxhKSxvLmxlbmd0aD1zLmxlbmd0aCxvO3ZhciB1LGw9MTAsZj0wO2Zvcih1PTA7dTxjO3UrKylmPTErKHNbbF08PDh8c1tsKzFdKSxsKz0yO3ZhciBoPWwsZD1zW2xdPDw4fHNbbCsxXTtvLnNpemVPZkluc3RydWN0aW9ucz1kO3ZhciBwPWwrPTIrZCxnPTA7Zm9yKHU9MDt1PGY7dSsrKXt2YXIgdj1zW2wrK107MTkyJnYmJihzW2wtMV09NjMmdik7dmFyIHk9MjsyJnY/eT0xOjE2JnYmJih5PTApO3ZhciBtPTI7NCZ2P209MTozMiZ2JiYobT0wKTt2YXIgYj15K207aWYoZys9Yiw4JnYpe3ZhciB3PXNbbCsrXTt1Kz13LGcrPXcqYn19aWYoMD09PWcpcmV0dXJuIG87dmFyIGs9bCtnO3JldHVybiBrPnMubGVuZ3RoP286IWkmJmQ+MD8obi5zZXQocy5zdWJhcnJheSgwLGgpLGEpLG4uc2V0KFswLDBdLGEraCksbi5zZXQocy5zdWJhcnJheShwLGspLGEraCsyKSxrLT1kLHMubGVuZ3RoLWs+MyYmKGs9ayszJi00KSxvLmxlbmd0aD1rLG8pOnMubGVuZ3RoLWs+Mz8oaz1rKzMmLTQsbi5zZXQocy5zdWJhcnJheSgwLGspLGEpLG8ubGVuZ3RoPWssbyk6KG4uc2V0KHMsYSksby5sZW5ndGg9cy5sZW5ndGgsbyl9ZnVuY3Rpb24gYihlKXt2YXIgcj0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9cjt2YXIgbj1bW10sW11dLGE9ZS5sZW5ndGgsaT1yK2E7aWYoMCE9PXQuZ2V0VWludDE2KCl8fGE8NilyZXR1cm4gbjt2YXIgbyxzLGM9dC5nZXRVaW50MTYoKSx1PXQuZ2V0VWludDE2KCksbD1bXTtmb3Iobz0wO288YyYmdC5wb3MrMTI8PWk7bysrKXt2YXIgZj17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoMT09PWYucGxhdGZvcm0mJjA9PT1mLmVuY29kaW5nJiYwPT09Zi5sYW5ndWFnZXx8Mz09PWYucGxhdGZvcm0mJjE9PT1mLmVuY29kaW5nJiYxMDMzPT09Zi5sYW5ndWFnZSkmJmwucHVzaChmKX1mb3Iobz0wLHM9bC5sZW5ndGg7bzxzO28rKyl7dmFyIGg9bFtvXTtpZighKGgubGVuZ3RoPD0wKSl7dmFyIGQ9cit1K2gub2Zmc2V0O2lmKCEoZCtoLmxlbmd0aD5pKSl7dC5wb3M9ZDt2YXIgcD1oLm5hbWU7aWYoaC5lbmNvZGluZyl7Zm9yKHZhciBnPSIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kz0yKWcrPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7blsxXVtwXT1nfWVsc2UgblswXVtwXT10LmdldFN0cmluZyhoLmxlbmd0aCl9fX1yZXR1cm4gbn12YXIgdyxTLHgsTyxBPVswLDAsMCwwLDAsMCwwLDAsLTIsLTIsLTIsLTIsMCwwLC0yLC01LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLC0xLC0xLDEsLTEsLTk5OSwwLDEsMCwtMSwtMiwwLC0xLC0yLC0xLC0xLDAsLTEsLTEsMCwwLC05OTksLTk5OSwtMSwtMSwtMSwtMSwtMiwtOTk5LC0yLC0yLC05OTksMCwtMiwtMiwwLDAsLTIsMCwtMiwwLDAsMCwtMiwtMSwtMSwxLDEsMCwwLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLDAsLTk5OSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwtMiwtOTk5LC05OTksLTk5OSwtOTk5LC05OTksLTEsLTEsLTIsLTIsMCwwLDAsMCwtMSwtMSwtOTk5LC0yLC0yLDAsMCwtMSwtMiwtMiwwLDAsMCwtMSwtMSwtMSwtMl07ZnVuY3Rpb24gQyhlLHQpe2Zvcih2YXIgcixhLGksbyxzLGM9ZS5kYXRhLHU9MCxsPTAsZj0wLGg9W10sZD1bXSxwPVtdLGc9dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMsdj0hMSx5PTAsbT0wLGI9Yy5sZW5ndGg7dTxiOyl7dmFyIHc9Y1t1KytdO2lmKDY0PT09dylpZihhPWNbdSsrXSx2fHxtKXUrPWE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaC5wdXNoKGNbdSsrXSk7ZWxzZSBpZig2NT09PXcpaWYoYT1jW3UrK10sdnx8bSl1Kz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1jW3UrK10saC5wdXNoKGk8PDh8Y1t1KytdKTtlbHNlIGlmKDE3Nj09KDI0OCZ3KSlpZihhPXctMTc2KzEsdnx8bSl1Kz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWgucHVzaChjW3UrK10pO2Vsc2UgaWYoMTg0PT0oMjQ4JncpKWlmKGE9dy0xODQrMSx2fHxtKXUrPTIqYTtlbHNlIGZvcihyPTA7cjxhO3IrKylpPWNbdSsrXSxoLnB1c2goaTw8OHxjW3UrK10pO2Vsc2UgaWYoNDMhPT13fHxnKWlmKDQ0IT09d3x8Zyl7aWYoNDU9PT13KWlmKHYpdj0hMSxsPXU7ZWxzZXtpZighKHM9ZC5wb3AoKSkpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IEVOREYgYmFkIHN0YWNrIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO289cC5wb3AoKSxjPXMuZGF0YSx1PXMuaSx0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW29dPWgubGVuZ3RoLXMuc3RhY2tUb3B9ZWxzZSBpZigxMzc9PT13KSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dTtlbHNlIGlmKDg4PT09dykrK3k7ZWxzZSBpZigyNz09PXcpbT15O2Vsc2UgaWYoODk9PT13KW09PT15JiYobT0wKSwtLXk7ZWxzZSBpZigyOD09PXcmJiF2JiYhbSl7dmFyIGs9aC5hdCgtMSk7az4wJiYodSs9ay0xKX19ZWxzZSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dSxvPWgucG9wKCksdC5mdW5jdGlvbnNEZWZpbmVkW29dPXtkYXRhOmMsaTp1fTtlbHNlIGlmKCF2JiYhbSlpZihvPWguYXQoLTEpLGlzTmFOKG8pKSgwLG4uaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNlIGlmKHQuZnVuY3Rpb25zVXNlZFtvXT0hMCxvIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe3ZhciBTPWgubGVuZ3RoK3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbb107aWYoUzwwKXJldHVybigwLG4ud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtoLmxlbmd0aD1TfWVsc2UgaWYobyBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFwLmluY2x1ZGVzKG8pKXtpZihkLnB1c2goe2RhdGE6YyxpOnUsc3RhY2tUb3A6aC5sZW5ndGgtMX0pLHAucHVzaChvKSwhKHM9dC5mdW5jdGlvbnNEZWZpbmVkW29dKSlyZXR1cm4oMCxuLndhcm4pKCJUVDogQ0FMTCBub24tZXhpc3RlbnQgZnVuY3Rpb24iKSx2b2lkKHQuaGludHNWYWxpZD0hMSk7Yz1zLmRhdGEsdT1zLml9aWYoIXYmJiFtKXt2YXIgeD0wO2Zvcih3PD0xNDI/eD1BW3ddOnc+PTE5MiYmdzw9MjIzP3g9LTE6dz49MjI0JiYoeD0tMiksdz49MTEzJiZ3PD0xMTcmJihhPWgucG9wKCksaXNOYU4oYSl8fCh4PTIqLWEpKTt4PDAmJmgubGVuZ3RoPjA7KWgucG9wKCkseCsrO2Zvcig7eD4wOyloLnB1c2goTmFOKSx4LS19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPWc7dmFyIE89W2NdO3U+Yy5sZW5ndGgmJk8ucHVzaChuZXcgVWludDhBcnJheSh1LWMubGVuZ3RoKSksZj5sJiYoKDAsbi53YXJuKSgiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKSxPLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzM0LDQ1XSkpKSxmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPjEpe3ZhciByLG4sYT0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWErPXRbcl0ubGVuZ3RoO2E9YSszJi00O3ZhciBpPW5ldyBVaW50OEFycmF5KGEpLG89MDtmb3Iocj0wLG49dC5sZW5ndGg7cjxuO3IrKylpLnNldCh0W3JdLG8pLG8rPXRbcl0ubGVuZ3RoO2UuZGF0YT1pLGUubGVuZ3RoPWF9fShlLE8pfWlmKFUodD1uZXcgbS5TdHJlYW0obmV3IFVpbnQ4QXJyYXkodC5nZXRCeXRlcygpKSkpKXt2YXIgRj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpOygwLG4uYXNzZXJ0KSgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2Zvcih2YXIgcj1lLmdldFVpbnQxNigpLGE9ZS5nZXRVaW50MTYoKSxpPWUuZ2V0SW50MzIoKT4+PjAsbz1bXSxzPTA7czxpO3MrKylvLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7dmFyIGM9e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjpyLG1pbm9yVmVyc2lvbjphLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6b307c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gYztjYXNlIDI6cmV0dXJuIGMuZHNpZ1RhZz1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ0xlbmd0aD1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ09mZnNldD1lLmdldEludDMyKCk+Pj4wLGN9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICIuY29uY2F0KHIsIi4iKSl9KGUpLGk9YS5udW1Gb250cyxvPWEub2Zmc2V0VGFibGUscz10LnNwbGl0KCIrIiksYz0wO2M8aTtjKyspe2UucG9zPShlLnN0YXJ0fHwwKStvW2NdO3ZhciBsPWQoZSksZj11KGUsbC5udW1UYWJsZXMpO2lmKCFmLm5hbWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Zm9yKHZhciBoPWIoZi5uYW1lKSxwPTAsZz1oLmxlbmd0aDtwPGc7cCsrKWZvcih2YXIgdj0wLHk9aFtwXS5sZW5ndGg7djx5O3YrKyl7dmFyIG09aFtwXVt2XSYmaFtwXVt2XS5yZXBsYWNlKC9ccy9nLCIiKTtpZihtKXtpZihtPT09dClyZXR1cm57aGVhZGVyOmwsdGFibGVzOmZ9O2lmKCEocy5sZW5ndGg8Mikpe3ZhciB3LFM9ayhzKTt0cnl7Zm9yKFMucygpOyEodz1TLm4oKSkuZG9uZTspe3ZhciB4PXcudmFsdWU7bT09PXgmJihyPXtuYW1lOngsaGVhZGVyOmwsdGFibGVzOmZ9KX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fX19fWlmKHIpcmV0dXJuKDAsbi53YXJuKSgnVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQsICcpKydmYWxsaW5nIGJhY2sgdG8gIicuY29uY2F0KHIubmFtZSwnIiBmb250IGluc3RlYWQuJykpLHtoZWFkZXI6ci5oZWFkZXIsdGFibGVzOnIudGFibGVzfTt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQuJykpfSh0LHRoaXMubmFtZSk7dz1GLmhlYWRlcixTPUYudGFibGVzfWVsc2Ugdz1kKHQpLFM9dSh0LHcubnVtVGFibGVzKTt2YXIgUD0hU1siQ0ZGICJdO2lmKFApe2lmKCFTLmxvY2EpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtTLmdseWZ8fCgoMCxuLndhcm4pKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpLFMuZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksdGhpcy5pc09wZW5UeXBlPSExfWVsc2V7dmFyIFQ9ci5jb21wb3NpdGUmJigoci5jaWRUb0dpZE1hcHx8W10pLmxlbmd0aD4wfHwhKHIuY01hcCBpbnN0YW5jZW9mIGcuSWRlbnRpdHlDTWFwKSk7aWYoIk9UVE8iPT09dy52ZXJzaW9uJiYhVHx8IVMuaGVhZHx8IVMuaGhlYXx8IVMubWF4cHx8IVMucG9zdClyZXR1cm4gTz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLHg9bmV3IGYuQ0ZGRm9udChPLHIpLGoociksdGhpcy5jb252ZXJ0KGUseCxyKTtkZWxldGUgUy5nbHlmLGRlbGV0ZSBTLmxvY2EsZGVsZXRlIFMuZnBnbSxkZWxldGUgUy5wcmVwLGRlbGV0ZSBTWyJjdnQgIl0sdGhpcy5pc09wZW5UeXBlPSEwfWlmKCFTLm1heHApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkrUy5tYXhwLm9mZnNldDt2YXIgST10LmdldEludDMyKCksRT10LmdldFVpbnQxNigpO2lmKHIuc2NhbGVGYWN0b3JzJiZyLnNjYWxlRmFjdG9ycy5sZW5ndGg9PT1FJiZQKXt2YXIgTT1yLnNjYWxlRmFjdG9ycyxfPUwoUy5oZWFkLmRhdGFbNTBdLFMuaGVhZC5kYXRhWzUxXSksRD1uZXcgcC5HbHlmVGFibGUoe2dseWZUYWJsZTpTLmdseWYuZGF0YSxpc0dseXBoTG9jYXRpb25zTG9uZzpfLGxvY2FUYWJsZTpTLmxvY2EuZGF0YSxudW1HbHlwaHM6RX0pO0Quc2NhbGUoTSk7dmFyIEI9RC53cml0ZSgpLCQ9Qi5nbHlmLFg9Qi5sb2NhLFY9Qi5pc0xvY2F0aW9uTG9uZztTLmdseWYuZGF0YT0kLFMubG9jYS5kYXRhPVgsViE9PSEhXyYmKFMuaGVhZC5kYXRhWzUwXT0wLFMuaGVhZC5kYXRhWzUxXT1WPzE6MCk7Zm9yKHZhciBLPVMuaG10eC5kYXRhLEo9MDtKPEU7SisrKXt2YXIgWj00KkosUT1NYXRoLnJvdW5kKE1bSl0qTChLW1pdLEtbWisxXSkpO0tbWl09UT4+OCYyNTUsS1taKzFdPTI1NSZRLFIoSyxaKzIsTWF0aC5yb3VuZChNW0pdKk4oS1taKzJdLEtbWiszXSkpKX19dmFyIGVlPUUrMSx0ZT0hMDtlZT42NTUzNSYmKHRlPSExLGVlPUUsKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBnbHlmcyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIikpO3ZhciByZT0wLG5lPTA7ST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYodC5wb3MrPTgsdC5nZXRVaW50MTYoKT4yJiYoUy5tYXhwLmRhdGFbMTRdPTAsUy5tYXhwLmRhdGFbMTVdPTIpLHQucG9zKz00LHJlPXQuZ2V0VWludDE2KCksdC5wb3MrPTQsbmU9dC5nZXRVaW50MTYoKSksUy5tYXhwLmRhdGFbNF09ZWU+PjgsUy5tYXhwLmRhdGFbNV09MjU1JmVlO3ZhciBhZT1mdW5jdGlvbihlLHQscixhKXt2YXIgaT17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtpZihlJiZDKGUsaSksdCYmQyh0LGkpLGUmJmZ1bmN0aW9uKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKXtpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtmb3IodmFyIHI9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7cjxhO3IrKyl7aWYocj50KXJldHVybigwLG4ud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtpZihlLmZ1bmN0aW9uc1VzZWRbcl0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbcl0pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIityKSx2b2lkKGUuaGludHNWYWxpZD0hMSl9fX0oaSxhKSxyJiYxJnIubGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtvLnNldChyLmRhdGEpLHIuZGF0YT1vfXJldHVybiBpLmhpbnRzVmFsaWR9KFMuZnBnbSxTLnByZXAsU1siY3Z0ICJdLHJlKTtpZihhZXx8KGRlbGV0ZSBTLmZwZ20sZGVsZXRlIFMucHJlcCxkZWxldGUgU1siY3Z0ICJdKSxmdW5jdGlvbihlLHQscixhLGksbyl7aWYodCl7ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0LGUucG9zKz00LGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yO3ZhciBzPWUuZ2V0VWludDE2KCk7ZS5wb3MrPTgsZS5wb3MrPTI7dmFyIGM9ZS5nZXRVaW50MTYoKTswIT09cyYmKDImTChhLmRhdGFbNDRdLGEuZGF0YVs0NV0pfHwodC5kYXRhWzIyXT0wLHQuZGF0YVsyM109MCkpLGM+aSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIuY29uY2F0KGMsIikgc2hvdWxkIG5vdCBiZSAiKSsiZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKCIuY29uY2F0KGksIikuIikpLGM9aSx0LmRhdGFbMzRdPSg2NTI4MCZjKT4+OCx0LmRhdGFbMzVdPTI1NSZjKTt2YXIgdT1pLWMtKHIubGVuZ3RoLTQqYz4+MSk7aWYodT4wKXt2YXIgbD1uZXcgVWludDhBcnJheShyLmxlbmd0aCsyKnUpO2wuc2V0KHIuZGF0YSksbyYmKGxbci5sZW5ndGhdPXIuZGF0YVsyXSxsW3IubGVuZ3RoKzFdPXIuZGF0YVszXSksci5kYXRhPWx9fWVsc2UgciYmKHIuZGF0YT1udWxsKX0odCxTLmhoZWEsUy5obXR4LFMuaGVhZCxlZSx0ZSksIVMuaGVhZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbihlLHQscil7dmFyIGE9ZS5kYXRhLGk9KGFbMF08PDI0KSsoYVsxXTw8MTYpKyhhWzJdPDw4KSthWzNdO2k+PjE2IT0xJiYoKDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSksYVswXT0wLGFbMV09MSxhWzJdPTAsYVszXT0wKTt2YXIgbz1MKGFbNTBdLGFbNTFdKTtpZihvPDB8fG8+MSl7KDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrbyk7dmFyIHM9dCsxO2lmKHI9PT1zPDwxKWFbNTBdPTAsYVs1MV09MDtlbHNle2lmKHIhPT1zPDwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6ICIrbyk7YVs1MF09MCxhWzUxXT0xfX19KFMuaGVhZCxFLFA/Uy5sb2NhLmxlbmd0aDowKTt2YXIgaWU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihQKXt2YXIgb2U9TChTLmhlYWQuZGF0YVs1MF0sUy5oZWFkLmRhdGFbNTFdKSxzZT1mdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU7bj8ocz00LGM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+Pj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfSk6KHM9MixjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+PjkmMjU1LGVbdCsxXT1yPj4xJjI1NX0pO3ZhciBsPWk/cisxOnIsZj1zKigxK2wpLGg9bmV3IFVpbnQ4QXJyYXkoZik7aC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsZikpLGUuZGF0YT1oO3ZhciBkLHAsZz10LmRhdGEsdj1nLmxlbmd0aCxtPW5ldyBVaW50OEFycmF5KHYpLGI9W107Zm9yKGQ9MCxwPTA7ZDxyKzE7ZCsrLHArPXMpe3ZhciB3PWMoaCxwKTt3PnYmJih3PXYpLGIucHVzaCh7aW5kZXg6ZCxvZmZzZXQ6dyxlbmRPZmZzZXQ6MH0pfWZvcihiLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUub2Zmc2V0LXQub2Zmc2V0fSkpLGQ9MDtkPHI7ZCsrKWJbZF0uZW5kT2Zmc2V0PWJbZCsxXS5vZmZzZXQ7Zm9yKGIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pbmRleC10LmluZGV4fSkpLGQ9MDtkPHI7ZCsrKXt2YXIgaz1iW2RdLFM9ay5vZmZzZXQseD1rLmVuZE9mZnNldDtpZigwIT09U3x8MCE9PXgpYnJlYWs7dmFyIE89YltkKzFdLm9mZnNldDtpZigwIT09Tyl7YltkXS5lbmRPZmZzZXQ9TzticmVha319dmFyIEE9T2JqZWN0LmNyZWF0ZShudWxsKSxDPTA7Zm9yKHUoaCwwLEMpLGQ9MCxwPXM7ZDxyO2QrKyxwKz1zKXt2YXIgRj15KGcsYltkXS5vZmZzZXQsYltkXS5lbmRPZmZzZXQsbSxDLGEpLFA9Ri5sZW5ndGg7MD09PVAmJihBW2RdPSEwKSxGLnNpemVPZkluc3RydWN0aW9ucz5vJiYobz1GLnNpemVPZkluc3RydWN0aW9ucyksdShoLHAsQys9UCl9aWYoMD09PUMpe3ZhciBUPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihkPTAscD1zO2Q8bDtkKysscCs9cyl1KGgscCxULmxlbmd0aCk7dC5kYXRhPVR9ZWxzZSBpZihpKXt2YXIgST1jKGgscyk7bS5sZW5ndGg+SStDP3QuZGF0YT1tLnN1YmFycmF5KDAsSStDKToodC5kYXRhPW5ldyBVaW50OEFycmF5KEkrQyksdC5kYXRhLnNldChtLnN1YmFycmF5KDAsQykpKSx0LmRhdGEuc2V0KG0uc3ViYXJyYXkoMCxJKSxDKSx1KGUuZGF0YSxoLmxlbmd0aC1zLEMrSSl9ZWxzZSB0LmRhdGE9bS5zdWJhcnJheSgwLEMpO3JldHVybnttaXNzaW5nR2x5cGhzOkEsbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOm99fShTLmxvY2EsUy5nbHlmLEUsb2UsYWUsdGUsbmUpO2llPXNlLm1pc3NpbmdHbHlwaHMsST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYoUy5tYXhwLmRhdGFbMjZdPXNlLm1heFNpemVPZkluc3RydWN0aW9ucz4+OCxTLm1heHAuZGF0YVsyN109MjU1JnNlLm1heFNpemVPZkluc3RydWN0aW9ucyl9aWYoIVMuaGhlYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOzA9PT1TLmhoZWEuZGF0YVsxMF0mJjA9PT1TLmhoZWEuZGF0YVsxMV0mJihTLmhoZWEuZGF0YVsxMF09MjU1LFMuaGhlYS5kYXRhWzExXT0yNTUpO3ZhciBjZT17dW5pdHNQZXJFbTpMKFMuaGVhZC5kYXRhWzE4XSxTLmhlYWQuZGF0YVsxOV0pLHlNYXg6TChTLmhlYWQuZGF0YVs0Ml0sUy5oZWFkLmRhdGFbNDNdKSx5TWluOk4oUy5oZWFkLmRhdGFbMzhdLFMuaGVhZC5kYXRhWzM5XSksYXNjZW50Ok4oUy5oaGVhLmRhdGFbNF0sUy5oaGVhLmRhdGFbNV0pLGRlc2NlbnQ6TihTLmhoZWEuZGF0YVs2XSxTLmhoZWEuZGF0YVs3XSksbGluZUdhcDpOKFMuaGhlYS5kYXRhWzhdLFMuaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9Y2UuYXNjZW50L2NlLnVuaXRzUGVyRW0sdGhpcy5kZXNjZW50PWNlLmRlc2NlbnQvY2UudW5pdHNQZXJFbSx0aGlzLmxpbmVHYXA9Y2UubGluZUdhcC9jZS51bml0c1BlckVtLHRoaXMuY3NzRm9udEluZm8mJnRoaXMuY3NzRm9udEluZm8ubGluZUhlaWdodD8odGhpcy5saW5lSGVpZ2h0PXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lSGVpZ2h0LHRoaXMubGluZUdhcD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcCk6dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXAsUy5wb3N0JiZmdW5jdGlvbihlLHIsYSl7dmFyIG89KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPW87dmFyIHMsYz1vK2UubGVuZ3RoLHU9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7dmFyIGwsZj0hMDtzd2l0Y2godSl7Y2FzZSA2NTUzNjpzPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOnZhciBoPXQuZ2V0VWludDE2KCk7aWYoaCE9PWEpe2Y9ITE7YnJlYWt9dmFyIGQ9W107Zm9yKGw9MDtsPGg7KytsKXt2YXIgcD10LmdldFVpbnQxNigpO2lmKHA+PTMyNzY4KXtmPSExO2JyZWFrfWQucHVzaChwKX1pZighZilicmVhaztmb3IodmFyIGc9W10sdj1bXTt0LnBvczxjOyl7dmFyIHk9dC5nZXRCeXRlKCk7Zm9yKHYubGVuZ3RoPXksbD0wO2w8eTsrK2wpdltsXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0Qnl0ZSgpKTtnLnB1c2godi5qb2luKCIiKSl9Zm9yKHM9W10sbD0wO2w8aDsrK2wpe3ZhciBtPWRbbF07bTwyNTg/cy5wdXNoKGkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW21dKTpzLnB1c2goZ1ttLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIit1KSxmPSExLHIuZGVmYXVsdEVuY29kaW5nJiYocz1yLmRlZmF1bHRFbmNvZGluZyl9ci5nbHlwaE5hbWVzPXN9KFMucG9zdCxyLEUpLFMucG9zdD17dGFnOiJwb3N0IixkYXRhOlcocil9O3ZhciB1ZT1bXTtmdW5jdGlvbiBsZShlKXtyZXR1cm4haWVbZV19aWYoci5jb21wb3NpdGUpe3ZhciBmZT1yLmNpZFRvR2lkTWFwfHxbXSxoZT0wPT09ZmUubGVuZ3RoO3IuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9SChlLHQsITApKSx0PjY1NTM1KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9LTE7aGU/cj10OnZvaWQgMCE9PWZlW3RdJiYocj1mZVt0XSkscj49MCYmcjxFJiZsZShyKSYmKHVlW2VdPXIpfSkpfWVsc2V7dmFyIGRlPWZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybigwLG4ud2FybikoIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgaSxvPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1vLHQuc2tpcCgyKTtmb3IodmFyIHMsYz10LmdldFVpbnQxNigpLHU9ITEsbD0wO2w8YztsKyspe3ZhciBmPXQuZ2V0VWludDE2KCksaD10LmdldFVpbnQxNigpLGQ9dC5nZXRJbnQzMigpPj4+MCxwPSExO2lmKCFzfHxzLnBsYXRmb3JtSWQhPT1mfHxzLmVuY29kaW5nSWQhPT1oKXtpZigwIT09Znx8MCE9PWgmJjEhPT1oJiYzIT09aClpZigxPT09ZiYmMD09PWgpcD0hMDtlbHNlIGlmKDMhPT1mfHwxIT09aHx8IWEmJnMpe2lmKHImJjM9PT1mJiYwPT09aCl7cD0hMDt2YXIgZz0hMDtpZihsPGMtMSl7dmFyIHY9dC5wZWVrQnl0ZXMoMik7TCh2WzBdLHZbMV0pPGYmJihnPSExKX1nJiYodT0hMCl9fWVsc2UgcD0hMCxyfHwodT0hMCk7ZWxzZSBwPSEwO2lmKHAmJihzPXtwbGF0Zm9ybUlkOmYsZW5jb2RpbmdJZDpoLG9mZnNldDpkfSksdSlicmVha319aWYocyYmKHQucG9zPW8rcy5vZmZzZXQpLCFzfHwtMT09PXQucGVla0J5dGUoKSlyZXR1cm4oMCxuLndhcm4pKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgeSxtLGI9dC5nZXRVaW50MTYoKSx3PSExLGs9W107aWYoMD09PWIpe2Zvcih0LnNraXAoNCkseT0wO3k8MjU2O3krKyl7dmFyIFM9dC5nZXRCeXRlKCk7UyYmay5wdXNoKHtjaGFyQ29kZTp5LGdseXBoSWQ6U30pfXc9ITB9ZWxzZSBpZigyPT09Yil7dC5za2lwKDQpO2Zvcih2YXIgeD1bXSxPPTAsQT0wO0E8MjU2O0ErKyl7dmFyIEM9dC5nZXRVaW50MTYoKT4+Mzt4LnB1c2goQyksTz1NYXRoLm1heChDLE8pfWZvcih2YXIgRj1bXSxQPTA7UDw9TztQKyspRi5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpOKHQuZ2V0Qnl0ZSgpLHQuZ2V0Qnl0ZSgpKSxpZFJhbmdlUG9zOnQucG9zK3QuZ2V0VWludDE2KCl9KTtmb3IodmFyIFQ9MDtUPDI1NjtUKyspaWYoMD09PXhbVF0pdC5wb3M9RlswXS5pZFJhbmdlUG9zKzIqVCxtPXQuZ2V0VWludDE2KCksay5wdXNoKHtjaGFyQ29kZTpULGdseXBoSWQ6bX0pO2Vsc2V7dmFyIEk9Rlt4W1RdXTtmb3IoeT0wO3k8SS5lbnRyeUNvdW50O3krKyl7dmFyIEU9KFQ8PDgpK3krSS5maXJzdENvZGU7dC5wb3M9SS5pZFJhbmdlUG9zKzIqeSwwIT09KG09dC5nZXRVaW50MTYoKSkmJihtPShtK0kuaWREZWx0YSklNjU1MzYpLGsucHVzaCh7Y2hhckNvZGU6RSxnbHlwaElkOm19KX19fWVsc2UgaWYoND09PWIpe3Quc2tpcCg0KTt2YXIgaj10LmdldFVpbnQxNigpPj4xO3Quc2tpcCg2KTt2YXIgTSxfPVtdO2ZvcihNPTA7TTxqO00rKylfLnB1c2goe2VuZDp0LmdldFVpbnQxNigpfSk7Zm9yKHQuc2tpcCgyKSxNPTA7TTxqO00rKylfW01dLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKE09MDtNPGo7TSsrKV9bTV0uZGVsdGE9dC5nZXRVaW50MTYoKTt2YXIgUixEPTA7Zm9yKE09MDtNPGo7TSsrKXtpPV9bTV07dmFyIEI9dC5nZXRVaW50MTYoKTtCPyhSPShCPj4xKS0oai1NKSxpLm9mZnNldEluZGV4PVIsRD1NYXRoLm1heChELFIraS5lbmQtaS5zdGFydCsxKSk6aS5vZmZzZXRJbmRleD0tMX12YXIgVT1bXTtmb3IoeT0wO3k8RDt5KyspVS5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihNPTA7TTxqO00rKyl7bz0oaT1fW01dKS5zdGFydDt2YXIgJD1pLmVuZCxYPWkuZGVsdGE7Zm9yKFI9aS5vZmZzZXRJbmRleCx5PW87eTw9JDt5KyspNjU1MzUhPT15JiYobT0obT1SPDA/eTpVW1IreS1vXSkrWCY2NTUzNSxrLnB1c2goe2NoYXJDb2RlOnksZ2x5cGhJZDptfSkpfX1lbHNlIGlmKDY9PT1iKXt0LnNraXAoNCk7dmFyIEg9dC5nZXRVaW50MTYoKSxxPXQuZ2V0VWludDE2KCk7Zm9yKHk9MDt5PHE7eSsrKXttPXQuZ2V0VWludDE2KCk7dmFyIEc9SCt5O2sucHVzaCh7Y2hhckNvZGU6RyxnbHlwaElkOm19KX19ZWxzZXtpZigxMiE9PWIpcmV0dXJuKDAsbi53YXJuKSgiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiK2IpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt0LnNraXAoMTApO3ZhciB6PXQuZ2V0SW50MzIoKT4+PjA7Zm9yKHk9MDt5PHo7eSsrKWZvcih2YXIgVz10LmdldEludDMyKCk+Pj4wLFY9dC5nZXRJbnQzMigpPj4+MCxZPXQuZ2V0SW50MzIoKT4+PjAsSz1XO0s8PVY7SysrKWsucHVzaCh7Y2hhckNvZGU6SyxnbHlwaElkOlkrK30pfWsuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2Zvcih2YXIgSj0xO0o8ay5sZW5ndGg7SisrKWtbSi0xXS5jaGFyQ29kZT09PWtbSl0uY2hhckNvZGUmJihrLnNwbGljZShKLDEpLEotLSk7cmV0dXJue3BsYXRmb3JtSWQ6cy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6cy5lbmNvZGluZ0lkLG1hcHBpbmdzOmssaGFzU2hvcnRDbWFwOnd9fShTLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LHIuaGFzRW5jb2RpbmcpLHBlPWRlLnBsYXRmb3JtSWQsZ2U9ZGUuZW5jb2RpbmdJZCx2ZT1kZS5tYXBwaW5ncyx5ZT1bXSxtZT0hMTtpZighci5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09ci5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PXIuYmFzZUVuY29kaW5nTmFtZXx8KHllPSgwLGMuZ2V0RW5jb2RpbmcpKHIuYmFzZUVuY29kaW5nTmFtZSkpLHIuaGFzRW5jb2RpbmcmJiF0aGlzLmlzU3ltYm9saWNGb250JiYoMz09PXBlJiYxPT09Z2V8fDE9PT1wZSYmMD09PWdlKSlmb3IodmFyIGJlPSgwLHMuZ2V0R2x5cGhzVW5pY29kZSkoKSx3ZT0wO3dlPDI1Njt3ZSsrKXt2YXIga2U7aWYoa2U9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t3ZV0/dGhpcy5kaWZmZXJlbmNlc1t3ZV06eWUubGVuZ3RoJiYiIiE9PXllW3dlXT95ZVt3ZV06Yy5TdGFuZGFyZEVuY29kaW5nW3dlXSl7dmFyIFNlPSgwLGkucmVjb3ZlckdseXBoTmFtZSkoa2UsYmUpLHhlPXZvaWQgMDtpZigzPT09cGUmJjE9PT1nZT94ZT1iZVtTZV06MT09PXBlJiYwPT09Z2UmJih4ZT1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihTZSkpLHZvaWQgMD09PXhlKXtpZighci5nbHlwaE5hbWVzJiZyLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciBPZT10aGlzLnRvVW5pY29kZS5nZXQod2UpO09lJiYoeGU9T2UuY29kZVBvaW50QXQoMCkpfWlmKHZvaWQgMD09PXhlKWNvbnRpbnVlfXZhciBBZSxDZT1rKHZlKTt0cnl7Zm9yKENlLnMoKTshKEFlPUNlLm4oKSkuZG9uZTspe3ZhciBGZT1BZS52YWx1ZTtpZihGZS5jaGFyQ29kZT09PXhlKXt1ZVt3ZV09RmUuZ2x5cGhJZDticmVha319fWNhdGNoKGUpe0NlLmUoZSl9ZmluYWxseXtDZS5mKCl9fX1lbHNlIGlmKDA9PT1wZSl7dmFyIFBlLFRlPWsodmUpO3RyeXtmb3IoVGUucygpOyEoUGU9VGUubigpKS5kb25lOyl7dmFyIEllPVBlLnZhbHVlO3VlW0llLmNoYXJDb2RlXT1JZS5nbHlwaElkfX1jYXRjaChlKXtUZS5lKGUpfWZpbmFsbHl7VGUuZigpfW1lPSEwfWVsc2V7dmFyIEVlLGplPWsodmUpO3RyeXtmb3IoamUucygpOyEoRWU9amUubigpKS5kb25lOyl7dmFyIE1lPUVlLnZhbHVlLF9lPU1lLmNoYXJDb2RlOzM9PT1wZSYmX2U+PTYxNDQwJiZfZTw9NjE2OTUmJihfZSY9MjU1KSx1ZVtfZV09TWUuZ2x5cGhJZH19Y2F0Y2goZSl7amUuZShlKX1maW5hbGx5e2plLmYoKX19aWYoci5nbHlwaE5hbWVzJiYoeWUubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKHZhciBMZT0wO0xlPDI1NjsrK0xlKWlmKG1lfHx2b2lkIDA9PT11ZVtMZV0pe3ZhciBSZT10aGlzLmRpZmZlcmVuY2VzW0xlXXx8eWVbTGVdO2lmKFJlKXt2YXIgTmU9ci5nbHlwaE5hbWVzLmluZGV4T2YoUmUpO05lPjAmJmxlKE5lKSYmKHVlW0xlXT1OZSl9fX0wPT09dWUubGVuZ3RoJiYodWVbMF09MCk7dmFyIERlPWVlLTE7aWYodGV8fChEZT0wKSwhci5jc3NGb250SW5mbyl7dmFyIEJlPXEodWUsbGUsRGUsdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1CZS50b0ZvbnRDaGFyLFMuY21hcD17dGFnOiJjbWFwIixkYXRhOkcoQmUuY2hhckNvZGVUb0dseXBoSWQsQmUudG9Vbmljb2RlRXh0cmFNYXAsZWUpfSxTWyJPUy8yIl0mJmZ1bmN0aW9uKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3ZhciByPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTt2YXIgbj10LmdldFVpbnQxNigpO3JldHVybiEocjw0JiY3Njgmbnx8dC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpfHwodC5za2lwKDYpLDA9PT10LmdldFVpbnQxNigpfHwoZS5kYXRhWzhdPWUuZGF0YVs5XT0wLDApKSl9KFNbIk9TLzIiXSx0KXx8KFNbIk9TLzIiXT17dGFnOiJPUy8yIixkYXRhOnoocixCZS5jaGFyQ29kZVRvR2x5cGhJZCxjZSl9KX1pZighUCl0cnl7Tz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLCh4PW5ldyBhLkNGRlBhcnNlcihPLHIsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLnBhcnNlKCkpLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTt2YXIgVWU9bmV3IGEuQ0ZGQ29tcGlsZXIoeCk7U1siQ0ZGICJdLmRhdGE9VWUuY29tcGlsZSgpfWNhdGNoKGUpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIityLmxvYWRlZE5hbWUpfWlmKFMubmFtZSl7dmFyICRlPWIoUy5uYW1lKTtTLm5hbWUuZGF0YT1ZKGUsJGUpLHRoaXMucHNOYW1lPSRlWzBdWzZdfHxudWxsfWVsc2UgUy5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6WSh0aGlzLm5hbWUpfTt2YXIgWGU9bmV3IHYuT3BlblR5cGVGaWxlQnVpbGRlcih3LnZlcnNpb24pO2Zvcih2YXIgSGUgaW4gUylYZS5hZGRUYWJsZShIZSxTW0hlXS5kYXRhKTtyZXR1cm4gWGUudG9BcnJheSgpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3IuZml4ZWRQaXRjaD0hMSxyLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24oZSx0KXtpZighZS5pc0ludGVybmFsRm9udCYmIShlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwfHx0PT09ZS5kZWZhdWx0RW5jb2Rpbmd8fGUudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciByPVtdLG49KDAscy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgYSBpbiB0KWlmKCFlLmhhc0VuY29kaW5nfHwwIT09ZS5kaWZmZXJlbmNlcy5sZW5ndGgmJnZvaWQgMD09PWUuZGlmZmVyZW5jZXNbYV0pe3ZhciBpPXRbYV0sYz0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkoaSxuKTstMSE9PWMmJihyW2FdPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpfXIubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHIpfX0ocixyLmJ1aWx0SW5FbmNvZGluZyk7dmFyIGE9MTt0IGluc3RhbmNlb2YgZi5DRkZGb250JiYoYT10Lm51bUdseXBocy0xKTt2YXIgdT10LmdldEdseXBoTWFwcGluZyhyKSxoPW51bGwsZD11LHA9bnVsbDtyLmNzc0ZvbnRJbmZvfHwoaD1xKHUsdC5oYXNHbHlwaElkLmJpbmQodCksYSx0aGlzLnRvVW5pY29kZSksdGhpcy50b0ZvbnRDaGFyPWgudG9Gb250Q2hhcixkPWguY2hhckNvZGVUb0dseXBoSWQscD1oLnRvVW5pY29kZUV4dHJhTWFwKTt2YXIgZz10Lm51bUdseXBocztmdW5jdGlvbiB5KGUsdCl7dmFyIHI9bnVsbDtmb3IodmFyIG4gaW4gZSl0PT09ZVtuXSYmKHJ8fChyPVtdKSxyLnB1c2goMHxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgciBpbiBlKWlmKHQ9PT1lW3JdKXJldHVybiAwfHI7cmV0dXJuIGguY2hhckNvZGVUb0dseXBoSWRbaC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXT10LGgubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrfXZhciBiPXQuc2VhY3M7aWYoaCYmaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQmJmImJmIubGVuZ3RoKXt2YXIgdz1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsUz10LmdldENoYXJzZXQoKSx4PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBPIGluIGIpe3ZhciBBPWJbT3w9MF0sQz1jLlN0YW5kYXJkRW5jb2RpbmdbQVsyXV0sRj1jLlN0YW5kYXJkRW5jb2RpbmdbQVszXV0sUD1TLmluZGV4T2YoQyksVD1TLmluZGV4T2YoRik7aWYoIShQPDB8fFQ8MCkpe3ZhciBJPXt4OkFbMF0qd1swXStBWzFdKndbMl0rd1s0XSx5OkFbMF0qd1sxXStBWzFdKndbM10rd1s1XX0sRT15KHUsTyk7aWYoRSl7dmFyIGosTT1rKEUpO3RyeXtmb3IoTS5zKCk7IShqPU0ubigpKS5kb25lOyl7dmFyIF89ai52YWx1ZSxMPWguY2hhckNvZGVUb0dseXBoSWQsUj1tKEwsUCksTj1tKEwsVCk7eFtfXT17YmFzZUZvbnRDaGFyQ29kZTpSLGFjY2VudEZvbnRDaGFyQ29kZTpOLGFjY2VudE9mZnNldDpJfX19Y2F0Y2goZSl7TS5lKGUpfWZpbmFsbHl7TS5mKCl9fX19ci5zZWFjTWFwPXh9dmFyIFU9MS8oci5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSwkPW5ldyB2Lk9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtyZXR1cm4gJC5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSwkLmFkZFRhYmxlKCJPUy8yIix6KHIsZCkpLCQuYWRkVGFibGUoImNtYXAiLEcoZCxwLGcpKSwkLmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrQihVKSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK0Ioci5kZXNjZW50KSsiD8O/IitCKHIuYXNjZW50KStEKHIuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIiksJC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK0Ioci5hc2NlbnQpK0Ioci5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK0Ioci5jYXBIZWlnaHQpK0IoTWF0aC50YW4oci5pdGFsaWNBbmdsZSkqci54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitEKGcpKSwkLmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbigpe2Zvcih2YXIgZT10LmNoYXJzdHJpbmdzLHI9dC5jZmY/dC5jZmYud2lkdGhzOm51bGwsbj0iXDBcMFwwXDAiLGE9MSxpPWc7YTxpO2ErKyl7dmFyIG89MDtpZihlKXt2YXIgcz1lW2EtMV07bz0id2lkdGgiaW4gcz9zLndpZHRoOjB9ZWxzZSByJiYobz1NYXRoLmNlaWwoclthXXx8MCkpO24rPUQobykrRCgwKX1yZXR1cm4gbn0oKSksJC5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK0QoZykpLCQuYWRkVGFibGUoIm5hbWUiLFkoZSkpLCQuYWRkVGFibGUoInBvc3QiLFcocikpLCQudG9BcnJheSgpfX0se2tleToic3BhY2VXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxyPVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl07dDxyLmxlbmd0aDt0Kyspe3ZhciBhPXJbdF07aWYoYSBpbiB0aGlzLndpZHRocyl7ZT10aGlzLndpZHRoc1thXTticmVha312YXIgaT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKClbYV0sbz0wO2lmKHRoaXMuY29tcG9zaXRlJiZ0aGlzLmNNYXAuY29udGFpbnMoaSkmJiJzdHJpbmciPT10eXBlb2Yobz10aGlzLmNNYXAubG9va3VwKGkpKSYmKG89SChpLG8pKSwhbyYmdGhpcy50b1VuaWNvZGUmJihvPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoaSkpLG88PTAmJihvPWkpLGU9dGhpcy53aWR0aHNbb10pYnJlYWt9cmV0dXJuIGU9ZXx8dGhpcy5kZWZhdWx0V2lkdGgsKDAsbi5zaGFkb3cpKHRoaXMsInNwYWNlV2lkdGgiLGUpfX0se2tleToiX2NoYXJUb0dseXBoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHM9dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihzJiZzLmlzU3BhY2U9PT1pKXJldHVybiBzO3ZhciBjPWU7dGhpcy5jTWFwJiZ0aGlzLmNNYXAuY29udGFpbnMoZSkmJiJzdHJpbmciPT10eXBlb2YoYz10aGlzLmNNYXAubG9va3VwKGUpKSYmKGM9SChlLGMpKSwibnVtYmVyIiE9dHlwZW9mKHI9dGhpcy53aWR0aHNbY10pJiYocj10aGlzLmRlZmF1bHRXaWR0aCk7dmFyIHU9dGhpcy52bWV0cmljcyYmdGhpcy52bWV0cmljc1tjXSxsPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGwmJihsPVN0cmluZy5mcm9tQ2hhckNvZGUobCkpO3ZhciBmPXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTtpZih0PXRoaXMudG9Gb250Q2hhcltlXXx8ZSx0aGlzLm1pc3NpbmdGaWxlKXt2YXIgaD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT1oJiYiIiE9PWh8fCJUeXBlMSIhPT10aGlzLnR5cGV8fCh0PTMyKSx0PSgwLG8ubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKHQpfXRoaXMuaXNUeXBlM0ZvbnQmJihhPXQpO3ZhciBkPW51bGw7aWYodGhpcy5zZWFjTWFwJiZ0aGlzLnNlYWNNYXBbZV0pe2Y9ITA7dmFyIHA9dGhpcy5zZWFjTWFwW2VdO3Q9cC5iYXNlRm9udENoYXJDb2RlLGQ9e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHAuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6cC5hY2NlbnRPZmZzZXR9fXZhciBnPSIiO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ8PTExMTQxMTE/Zz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KTooMCxuLndhcm4pKCJjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAiLmNvbmNhdCh0KSkpLHM9bmV3IF8oZSxnLGwsZCxyLHUsYSxpLGYpLHRoaXMuX2dseXBoQ2FjaGVbZV09c319LHtrZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDtpZih0PVtdLHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUubGVuZ3RoLGE9MDthPG47KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsYSxyKTt2YXIgaT1yLmNoYXJjb2RlLG89ci5sZW5ndGg7YSs9bzt2YXIgcz10aGlzLl9jaGFyVG9HbHlwaChpLDE9PT1vJiYzMj09PWUuY2hhckNvZGVBdChhLTEpKTt0LnB1c2gocyl9ZWxzZSBmb3IodmFyIGM9MCx1PWUubGVuZ3RoO2M8dTsrK2Mpe3ZhciBsPWUuY2hhckNvZGVBdChjKSxmPXRoaXMuX2NoYXJUb0dseXBoKGwsMzI9PT1sKTt0LnB1c2goZil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH19LHtrZXk6ImdldENoYXJQb3NpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPTA7bjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxuLHIpO3ZhciBhPXIubGVuZ3RoO3QucHVzaChbbixuK2FdKSxuKz1hfWVsc2UgZm9yKHZhciBpPTAsbz1lLmxlbmd0aDtpPG87KytpKXQucHVzaChbaSxpKzFdKTtyZXR1cm4gdH19LHtrZXk6ImdseXBoQ2FjaGVWYWx1ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfX0se2tleToiZW5jb2RlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPVtdLG49W10sYT1mdW5jdGlvbigpe3JldHVybiByLmxlbmd0aCUyPT0xfSxpPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcD9mdW5jdGlvbihlKXtyZXR1cm4gdC50b1VuaWNvZGUuY2hhckNvZGVPZihlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpfSxvPTAscz1lLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1lLmNvZGVQb2ludEF0KG8pO2lmKGM+NTUyOTUmJihjPDU3MzQ0fHxjPjY1NTMzKSYmbysrLHRoaXMudG9Vbmljb2RlKXt2YXIgdT1pKGMpO2lmKC0xIT09dSl7YSgpJiYoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApO2Zvcih2YXIgZj0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aCh1KToxKS0xO2Y+PTA7Zi0tKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHU+PjgqZiYyNTUpKTtjb250aW51ZX19YSgpfHwoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApLG4ucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSl9cmV0dXJuIHIucHVzaChuLmpvaW4oIiIpKSxyfX1dKSxlfSgpO3QuRm9udD1LO3ZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtBKHRoaXMsZSksdGhpcy5lcnJvcj10LHRoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIix0aGlzLm1pc3NpbmdGaWxlPSEwfXJldHVybiBGKGUsW3trZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSx7a2V5OiJlbmNvZGVTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlXX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOnRoaXMuZXJyb3J9fX1dKSxlfSgpO3QuRXJyb3JGb250PUp9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZUb3BEaWN0PXQuQ0ZGU3RyaW5ncz10LkNGRlN0YW5kYXJkU3RyaW5ncz10LkNGRlByaXZhdGVEaWN0PXQuQ0ZGUGFyc2VyPXQuQ0ZGSW5kZXg9dC5DRkZIZWFkZXI9dC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGQ2hhcnNldD10LkNGRj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY1KSxpPXIoMTY2KTtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWQoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGQoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHAoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9wKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1mKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB5KGUsdCxyKXtyZXR1cm4gdCYmdihlLnByb3RvdHlwZSx0KSxyJiZ2KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbT1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiLCIwMDEuMDAwIiwiMDAxLjAwMSIsIjAwMS4wMDIiLCIwMDEuMDAzIiwiQmxhY2siLCJCb2xkIiwiQm9vayIsIkxpZ2h0IiwiTWVkaXVtIiwiUmVndWxhciIsIlJvbWFuIiwiU2VtaWJvbGQiXTt0LkNGRlN0YW5kYXJkU3RyaW5ncz1tO3ZhciBiPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLHc9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm46ZnVuY3Rpb24oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2codGhpcyxlKSx0aGlzLmJ5dGVzPXQuZ2V0Qnl0ZXMoKSx0aGlzLnByb3BlcnRpZXM9cix0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFufXJldHVybiB5KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBTO3RoaXMuY2ZmPXQ7dmFyIHI9dGhpcy5wYXJzZUhlYWRlcigpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxhPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG89dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VEaWN0KGEub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoUCxzLHQuc3RyaW5ncyk7dC5oZWFkZXI9ci5vYmosdC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KG4ub2JqKSx0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKSx0LnRvcERpY3Q9Yyx0Lmdsb2JhbFN1YnJJbmRleD1vLm9iaix0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KSx0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO3ZhciB1PWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGw9dGhpcy5wYXJzZUluZGV4KHUpLm9iaixmPWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZiYmKGUuZm9udE1hdHJpeD1mKTt2YXIgaCxkLHA9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYocCYmKGUuYXNjZW50PU1hdGgubWF4KHBbM10scFsxXSksZS5kZXNjZW50PU1hdGgubWluKHBbMV0scFszXSksZS5hc2NlbnRTY2FsZWQ9ITApLHQuaXNDSURGb250KXtmb3IodmFyIGc9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iaix2PTAseT1nLmNvdW50O3Y8eTsrK3Ype3ZhciBtPWcuZ2V0KHYpLGI9dGhpcy5jcmVhdGVEaWN0KFAsdGhpcy5wYXJzZURpY3QobSksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoYiksdC5mZEFycmF5LnB1c2goYil9ZD1udWxsLGg9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksbC5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGwuY291bnQpfWVsc2UgaD10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxsLmNvdW50LHQuc3RyaW5ncywhMSksZD10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsaC5jaGFyc2V0KTt0LmNoYXJzZXQ9aCx0LmVuY29kaW5nPWQ7dmFyIHc9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpsLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6by5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7cmV0dXJuIHQuY2hhclN0cmluZ3M9dy5jaGFyU3RyaW5ncyx0LnNlYWNzPXcuc2VhY3MsdC53aWR0aHM9dy53aWR0aHMsdH19LHtrZXk6InBhcnNlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmJ5dGVzLHQ9ZS5sZW5ndGgscj0wO3I8dCYmMSE9PWVbcl07KSsrcjtpZihyPj10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIENGRiBoZWFkZXIiKTswIT09ciYmKCgwLG4uaW5mbykoImNmZiBkYXRhIGlzIHNoaWZ0ZWQiKSxlPWUuc3ViYXJyYXkociksdGhpcy5ieXRlcz1lKTt2YXIgYT1lWzBdLGk9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybntvYmo6bmV3IHgoYSxpLG8scyksZW5kUG9zOm99fX0se2tleToicGFyc2VEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wO3ZhciByLGE9W10saT1bXTt0PTA7Zm9yKHZhciBvPWUubGVuZ3RoO3Q8bzspe3ZhciBzPWVbdF07czw9MjE/KDEyPT09cyYmKHM9czw8OHxlWysrdF0pLGkucHVzaChbcyxhXSksYT1bXSwrK3QpOmEucHVzaCgocj12b2lkIDAsMzA9PT0ocj1lW3QrK10pP2Z1bmN0aW9uKCl7Zm9yKHZhciByPSIiLG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7dDxhOyl7dmFyIGk9ZVt0KytdLG89aT4+NCxzPTE1Jmk7aWYoMTU9PT1vKWJyZWFrO2lmKHIrPW5bb10sMTU9PT1zKWJyZWFrO3IrPW5bc119cmV0dXJuIHBhcnNlRmxvYXQocil9KCk6Mjg9PT1yP3I9KChyPWVbdCsrXSk8PDI0fGVbdCsrXTw8MTYpPj4xNjoyOT09PXI/cj0ocj0ocj0ocj1lW3QrK10pPDw4fGVbdCsrXSk8PDh8ZVt0KytdKTw8OHxlW3QrK106cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pKSl9cmV0dXJuIGl9fSx7a2V5OiJwYXJzZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49bmV3IEEsYT10aGlzLmJ5dGVzLGk9YVtlKytdPDw4fGFbZSsrXSxvPVtdLHM9ZTtpZigwIT09aSl7dmFyIGM9YVtlKytdLHU9ZSsoaSsxKSpjLTE7Zm9yKHQ9MCxyPWkrMTt0PHI7Kyt0KXtmb3IodmFyIGw9MCxmPTA7ZjxjOysrZilsPDw9OCxsKz1hW2UrK107by5wdXNoKHUrbCl9cz1vW2ldfWZvcih0PTAscj1vLmxlbmd0aC0xO3Q8cjsrK3Qpe3ZhciBoPW9bdF0sZD1vW3QrMV07bi5hZGQoYS5zdWJhcnJheShoLGQpKX1yZXR1cm57b2JqOm4sZW5kUG9zOnN9fX0se2tleToicGFyc2VOYW1lSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QucHVzaCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGkpKX1yZXR1cm4gdH19LHtrZXk6InBhcnNlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgTyxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QuYWRkKCgwLG4uYnl0ZXNUb1N0cmluZykoaSkpfXJldHVybiB0fX0se2tleToiY3JlYXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPW5ldyBlKHIpLHM9aCh0KTt0cnl7Zm9yKHMucygpOyEobj1zLm4oKSkuZG9uZTspe3ZhciBjPShhPW4udmFsdWUsaT0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGEpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGEsaSl8fGQoYSxpKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PWNbMF0sbD1jWzFdO28uc2V0QnlLZXkodSxsKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9cmV0dXJuIG99fSx7a2V5OiJwYXJzZUNoYXJTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCF0fHxlLmNhbGxEZXB0aD4xMClyZXR1cm4hMTtmb3IodmFyIGk9ZS5zdGFja1NpemUsbz1lLnN0YWNrLHM9dC5sZW5ndGgsYz0wO2M8czspe3ZhciB1PXRbYysrXSxsPW51bGw7aWYoMTI9PT11KXt2YXIgZj10W2MrK107MD09PWY/KHRbYy0yXT0xMzksdFtjLTFdPTIyLGk9MCk6bD13W2ZdfWVsc2UgaWYoMjg9PT11KW9baV09KHRbY108PDI0fHRbYysxXTw8MTYpPj4xNixjKz0yLGkrKztlbHNlIGlmKDE0PT09dSl7aWYoaT49NCYmKGktPTQsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSlyZXR1cm4gZS5zZWFjPW8uc2xpY2UoaSxpKzQpLCExO2w9Ylt1XX1lbHNlIGlmKHU+PTMyJiZ1PD0yNDYpb1tpXT11LTEzOSxpKys7ZWxzZSBpZih1Pj0yNDcmJnU8PTI1NClvW2ldPXU8MjUxPyh1LTI0Nzw8OCkrdFtjXSsxMDg6LSh1LTI1MTw8OCktdFtjXS0xMDgsYysrLGkrKztlbHNlIGlmKDI1NT09PXUpb1tpXT0odFtjXTw8MjR8dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKS82NTUzNixjKz00LGkrKztlbHNlIGlmKDE5PT09dXx8MjA9PT11KWUuaGludHMrPWk+PjEsYys9ZS5oaW50cys3Pj4zLGklPTIsbD1iW3VdO2Vsc2V7aWYoMTA9PT11fHwyOT09PXUpe3ZhciBoPXZvaWQgMDtpZighKGg9MTA9PT11P3I6YSkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrbC5pZCksITE7dmFyIGQ9MzI3Njg7aC5jb3VudDwxMjQwP2Q9MTA3OmguY291bnQ8MzM5MDAmJihkPTExMzEpO3ZhciBwPW9bLS1pXStkO2lmKHA8MHx8cD49aC5jb3VudHx8aXNOYU4ocCkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitsLmlkKSwhMTtpZihlLnN0YWNrU2l6ZT1pLGUuY2FsbERlcHRoKyssIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsaC5nZXQocCkscixhKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tLGk9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT11KXJldHVybiBlLnN0YWNrU2l6ZT1pLCEwO2lmKDA9PT11JiZjPT09dC5sZW5ndGgpdFtjLTFdPTE0LGw9YlsxNF07ZWxzZXtpZig5PT09dSl7dC5jb3B5V2l0aGluKGMtMSxjLC0xKSxjLT0xLHMtPTE7Y29udGludWV9bD1iW3VdfX1pZihsKXtpZihsLnN0ZW0mJihlLmhpbnRzKz1pPj4xLDM9PT11fHwyMz09PXU/ZS5oYXNWU3RlbXM9ITA6IWUuaGFzVlN0ZW1zfHwxIT09dSYmMTghPT11fHwoKDAsbi53YXJuKSgiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyIiksdFtjLTFdPTE9PT11PzM6MjMpKSwibWluImluIGwmJiFlLnVuZGVmU3RhY2smJmk8bC5taW4pcmV0dXJuKDAsbi53YXJuKSgiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAiK2wuaWQrIjsgYWN0dWFsOiAiK2krIiwgZXhwZWN0ZWQ6ICIrbC5taW4pLDA9PT1pJiYodFtjLTFdPTE0LCEwKTtlLmZpcnN0U3RhY2tDbGVhcmluZyYmbC5zdGFja0NsZWFyaW5nJiYoZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITEsKGktPWwubWluKT49MiYmbC5zdGVtP2klPTI6aT4xJiYoMCxuLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIiksaT4wJiYoZS53aWR0aD1vW2ktMV0pKSwic3RhY2tEZWx0YSJpbiBsPygic3RhY2tGbiJpbiBsJiZsLnN0YWNrRm4obyxpKSxpKz1sLnN0YWNrRGVsdGEpOmwuc3RhY2tDbGVhcmluZz9pPTA6bC5yZXNldFN0YWNrPyhpPTAsZS51bmRlZlN0YWNrPSExKTpsLnVuZGVmU3RhY2smJihpPTAsZS51bmRlZlN0YWNrPSEwLGUuZmlyc3RTdGFja0NsZWFyaW5nPSExKX19cmV0dXJuIHM8dC5sZW5ndGgmJnQuZmlsbCgxNCxzKSxlLnN0YWNrU2l6ZT1pLCEwfX0se2tleToicGFyc2VDaGFyU3RyaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY2hhclN0cmluZ3Mscj1lLmxvY2FsU3VickluZGV4LGE9ZS5nbG9iYWxTdWJySW5kZXgsaT1lLmZkU2VsZWN0LG89ZS5mZEFycmF5LHM9ZS5wcml2YXRlRGljdCxjPVtdLHU9W10sbD10LmNvdW50LGY9MDtmPGw7ZisrKXt2YXIgaD10LmdldChmKSxkPXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX0scD0hMCxnPW51bGwsdj1zO2lmKGkmJm8ubGVuZ3RoKXt2YXIgeT1pLmdldEZESW5kZXgoZik7LTE9PT15JiYoKDAsbi53YXJuKSgiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKSxwPSExKSx5Pj1vLmxlbmd0aCYmKCgwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpLHA9ITEpLHAmJihnPSh2PW9beV0ucHJpdmF0ZURpY3QpLnN1YnJzSW5kZXgpfWVsc2UgciYmKGc9cik7aWYocCYmKHA9dGhpcy5wYXJzZUNoYXJTdHJpbmcoZCxoLGcsYSkpLG51bGwhPT1kLndpZHRoKXt2YXIgbT12LmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO3VbZl09bStkLndpZHRofWVsc2V7dmFyIGI9di5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTt1W2ZdPWJ9bnVsbCE9PWQuc2VhYyYmKGNbZl09ZC5zZWFjKSxwfHx0LnNldChmLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6dCxzZWFjczpjLHdpZHRoczp1fX19LHtrZXk6ImVtcHR5UHJpdmF0ZURpY3Rpb25hcnkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRGljdChJLFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSksZS5wcml2YXRlRGljdD10fX0se2tleToicGFyc2VQcml2YXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNOYW1lKCJQcml2YXRlIikpe3ZhciB0PWUuZ2V0QnlOYW1lKCJQcml2YXRlIik7aWYoQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoKXt2YXIgcj10WzBdLG49dFsxXTtpZigwPT09cnx8bj49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGE9bityLGk9dGhpcy5ieXRlcy5zdWJhcnJheShuLGEpLG89dGhpcy5wYXJzZURpY3QoaSkscz10aGlzLmNyZWF0ZURpY3QoSSxvLGUuc3RyaW5ncyk7aWYoZS5wcml2YXRlRGljdD1zLHMuZ2V0QnlOYW1lKCJTdWJycyIpKXt2YXIgYz1zLmdldEJ5TmFtZSgiU3VicnMiKSx1PW4rYztpZigwPT09Y3x8dT49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGw9dGhpcy5wYXJzZUluZGV4KHUpO3Muc3VicnNJbmRleD1sLm9ian19fX1lbHNlIGUucmVtb3ZlQnlOYW1lKCJQcml2YXRlIil9ZWxzZSB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl9fSx7a2V5OiJwYXJzZUNoYXJzZXRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixpKXtpZigwPT09ZSlyZXR1cm4gbmV3IGooITAsRS5JU09fQURPQkUsYS5JU09BZG9iZUNoYXJzZXQpO2lmKDE9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVCxhLkV4cGVydENoYXJzZXQpO2lmKDI9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVF9TVUJTRVQsYS5FeHBlcnRTdWJzZXRDaGFyc2V0KTt2YXIgbyxzLGMsdT10aGlzLmJ5dGVzLGw9ZSxmPXVbZSsrXSxoPVtpPzA6Ii5ub3RkZWYiXTtzd2l0Y2godC09MSxmKXtjYXNlIDA6Zm9yKGM9MDtjPHQ7YysrKW89dVtlKytdPDw4fHVbZSsrXSxoLnB1c2goaT9vOnIuZ2V0KG8pKTticmVhaztjYXNlIDE6Zm9yKDtoLmxlbmd0aDw9dDspZm9yKG89dVtlKytdPDw4fHVbZSsrXSxzPXVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2Nhc2UgMjpmb3IoO2gubGVuZ3RoPD10Oylmb3Iobz11W2UrK108PDh8dVtlKytdLHM9dVtlKytdPDw4fHVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY2hhcnNldCBmb3JtYXQiKX12YXIgZD1lLHA9dS5zdWJhcnJheShsLGQpO3JldHVybiBuZXcgaighMSxmLGgscCl9fSx7a2V5OiJwYXJzZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbyxzLGMsdT1PYmplY3QuY3JlYXRlKG51bGwpLGw9dGhpcy5ieXRlcyxmPSExLGg9bnVsbDtpZigwPT09ZXx8MT09PWUpe2Y9ITAsbz1lO3ZhciBkPWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKHM9MCxjPWEubGVuZ3RoO3M8YztzKyspe3ZhciBwPWQuaW5kZXhPZihhW3NdKTstMSE9PXAmJih1W3BdPXMpfX1lbHNle3ZhciBnPWU7c3dpdGNoKDEyNyYobz1sW2UrK10pKXtjYXNlIDA6dmFyIHY9bFtlKytdO2ZvcihzPTE7czw9djtzKyspdVtsW2UrK11dPXM7YnJlYWs7Y2FzZSAxOnZhciB5PWxbZSsrXSxtPTE7Zm9yKHM9MDtzPHk7cysrKWZvcih2YXIgYj1sW2UrK10sdz1sW2UrK10saz1iO2s8PWIrdztrKyspdVtrXT1tKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICIuY29uY2F0KG8sIiBpbiBDRkYiKSl9dmFyIFM9ZTsxMjgmbyYmKGxbZ10mPTEyNyxmdW5jdGlvbigpe3ZhciB0PWxbZSsrXTtmb3Iocz0wO3M8dDtzKyspe3ZhciBuPWxbZSsrXSxpPShsW2UrK108PDgpKygyNTUmbFtlKytdKTt1W25dPWEuaW5kZXhPZihyLmdldChpKSl9fSgpKSxoPWwuc3ViYXJyYXkoZyxTKX1yZXR1cm4gbmV3IE0oZixvJj0xMjcsdSxoKX19LHtrZXk6InBhcnNlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT10aGlzLmJ5dGVzLGk9YVtlKytdLG89W107c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocj0wO3I8dDsrK3Ipe3ZhciBzPWFbZSsrXTtvLnB1c2gocyl9YnJlYWs7Y2FzZSAzOnZhciBjPWFbZSsrXTw8OHxhW2UrK107Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1hW2UrK108PDh8YVtlKytdOzA9PT1yJiYwIT09dSYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSx1PTApO2Zvcih2YXIgbD1hW2UrK10sZj1hW2VdPDw4fGFbZSsxXSxoPXU7aDxmOysraClvLnB1c2gobCl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoaSwnIi4nKSl9aWYoby5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IF8oaSxvKX19XSksZX0oKTt0LkNGRlBhcnNlcj1rO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2codGhpcyxlKSx0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyBPLHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfXJldHVybiB5KGUsW3trZXk6ImR1cGxpY2F0ZUZpcnN0R2x5cGgiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGFyU3RyaW5ncy5jb3VudD49NjU1MzUpKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7ZWxzZXt2YXIgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKSx0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfX19LHtrZXk6Imhhc0dseXBoSWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KSYmdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fV0pLGV9KCk7dC5DRkY9Uzt2YXIgeD15KChmdW5jdGlvbiBlKHQscixuLGEpe2codGhpcyxlKSx0aGlzLm1ham9yPXQsdGhpcy5taW5vcj1yLHRoaXMuaGRyU2l6ZT1uLHRoaXMub2ZmU2l6ZT1hfSkpO3QuQ0ZGSGVhZGVyPXg7dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMuc3RyaW5ncz1bXX1yZXR1cm4geShlLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0zOTA/bVtlXTplLTM5MTw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS0zOTFdOm1bMF19fSx7a2V5OiJnZXRTSUQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW0uaW5kZXhPZihlKTtyZXR1cm4tMSE9PXQ/dDotMSE9PSh0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpKT90KzM5MTotMX19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9fSx7a2V5OiJjb3VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fV0pLGV9KCk7dC5DRkZTdHJpbmdzPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2JqZWN0cz1bXSx0aGlzLmxlbmd0aD0wfXJldHVybiB5KGUsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5sZW5ndGgrPWUubGVuZ3RoLHRoaXMub2JqZWN0cy5wdXNoKGUpfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoLHRoaXMub2JqZWN0c1tlXT10fX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmplY3RzW2VdfX0se2tleToiY291bnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdHMubGVuZ3RofX1dKSxlfSgpO3QuQ0ZGSW5kZXg9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5rZXlUb05hbWVNYXA9dC5rZXlUb05hbWVNYXAsdGhpcy5uYW1lVG9LZXlNYXA9dC5uYW1lVG9LZXlNYXAsdGhpcy5kZWZhdWx0cz10LmRlZmF1bHRzLHRoaXMudHlwZXM9dC50eXBlcyx0aGlzLm9wY29kZXM9dC5vcGNvZGVzLHRoaXMub3JkZXI9dC5vcmRlcix0aGlzLnN0cmluZ3M9cix0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6InNldEJ5S2V5Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7aWYoMD09PXQubGVuZ3RoKXJldHVybiEwO3ZhciByLGE9aCh0KTt0cnl7Zm9yKGEucygpOyEocj1hLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aWYoaXNOYU4oaSkpcmV0dXJuKDAsbi53YXJuKSgnSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJy5jb25jYXQodCwnIiBmb3Iga2V5ICInKS5jb25jYXQoZSwnIi4nKSksITB9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXZhciBvPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1vJiYic2lkIiE9PW8mJiJvZmZzZXQiIT09b3x8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH19LHtrZXk6InNldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiJy5jb25jYXQoZSwnIicpKTt0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV09dH19LHtrZXk6Imhhc05hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWVUb0tleU1hcFtlXWluIHRoaXMudmFsdWVzfX0se2tleToiZ2V0QnlOYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO3ZhciB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19fSx7a2V5OiJyZW1vdmVCeU5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19fV0sW3trZXk6ImNyZWF0ZVRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj17a2V5VG9OYW1lTWFwOnt9LG5hbWVUb0tleU1hcDp7fSxkZWZhdWx0czp7fSx0eXBlczp7fSxvcGNvZGVzOnt9LG9yZGVyOltdfSxuPWgoZSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlLGk9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Iua2V5VG9OYW1lTWFwW2ldPWFbMV0sci5uYW1lVG9LZXlNYXBbYVsxXV09aSxyLnR5cGVzW2ldPWFbMl0sci5kZWZhdWx0c1tpXT1hWzNdLHIub3Bjb2Rlc1tpXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dLHIub3JkZXIucHVzaChpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fV0pLGV9KCksRj1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dLFA9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHIudGFibGVzLGUpKS5wcml2YXRlRGljdD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKEYpKX19XSkscn0oQyk7dC5DRkZUb3BEaWN0PVA7dmFyIFQ9W1s2LCJCbHVlVmFsdWVzIiwiZGVsdGEiLG51bGxdLFs3LCJPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFs4LCJGYW1pbHlCbHVlcyIsImRlbHRhIixudWxsXSxbOSwiRmFtaWx5T3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbWzEyLDldLCJCbHVlU2NhbGUiLCJudW0iLC4wMzk2MjVdLFtbMTIsMTBdLCJCbHVlU2hpZnQiLCJudW0iLDddLFtbMTIsMTFdLCJCbHVlRnV6eiIsIm51bSIsMV0sWzEwLCJTdGRIVyIsIm51bSIsbnVsbF0sWzExLCJTdGRWVyIsIm51bSIsbnVsbF0sW1sxMiwxMl0sIlN0ZW1TbmFwSCIsImRlbHRhIixudWxsXSxbWzEyLDEzXSwiU3RlbVNuYXBWIiwiZGVsdGEiLG51bGxdLFtbMTIsMTRdLCJGb3JjZUJvbGQiLCJudW0iLDBdLFtbMTIsMTddLCJMYW5ndWFnZUdyb3VwIiwibnVtIiwwXSxbWzEyLDE4XSwiRXhwYW5zaW9uRmFjdG9yIiwibnVtIiwuMDZdLFtbMTIsMTldLCJpbml0aWFsUmFuZG9tU2VlZCIsIm51bSIsMF0sWzIwLCJkZWZhdWx0V2lkdGhYIiwibnVtIiwwXSxbMjEsIm5vbWluYWxXaWR0aFgiLCJudW0iLDBdLFsxOSwiU3VicnMiLCJvZmZzZXQiLG51bGxdXSxJPWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGcodGhpcyxyKSwobj10LmNhbGwodGhpcyxyLnRhYmxlcyxlKSkuc3VicnNJbmRleD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKFQpKX19XSkscn0oQyk7dC5DRkZQcml2YXRlRGljdD1JO3ZhciBFPXtJU09fQURPQkU6MCxFWFBFUlQ6MSxFWFBFUlRfU1VCU0VUOjJ9LGo9eSgoZnVuY3Rpb24gZSh0LHIsbixhKXtnKHRoaXMsZSksdGhpcy5wcmVkZWZpbmVkPXQsdGhpcy5mb3JtYXQ9cix0aGlzLmNoYXJzZXQ9bix0aGlzLnJhdz1hfSkpO3QuQ0ZGQ2hhcnNldD1qO3ZhciBNPXkoKGZ1bmN0aW9uIGUodCxyLG4sYSl7Zyh0aGlzLGUpLHRoaXMucHJlZGVmaW5lZD10LHRoaXMuZm9ybWF0PXIsdGhpcy5lbmNvZGluZz1uLHRoaXMucmF3PWF9KSksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5mb3JtYXQ9dCx0aGlzLmZkU2VsZWN0PXJ9cmV0dXJuIHkoZSxbe2tleToiZ2V0RkRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MHx8ZT49dGhpcy5mZFNlbGVjdC5sZW5ndGg/LTE6dGhpcy5mZFNlbGVjdFtlXX19XSksZX0oKTt0LkNGRkZEU2VsZWN0PV87dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6ImlzVHJhY2tpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMub2Zmc2V0c319LHtrZXk6InRyYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTt0aGlzLm9mZnNldHNbZV09dH19LHtrZXk6Im9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMub2Zmc2V0cyl0aGlzLm9mZnNldHNbdF0rPWV9fSx7a2V5OiJzZXRFbnRyeUxvY2F0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYoIShlIGluIHRoaXMub2Zmc2V0cykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAiLmNvbmNhdChlKSk7Zm9yKHZhciBhPXIuZGF0YSxpPXRoaXMub2Zmc2V0c1tlXSxvPTAscz10Lmxlbmd0aDtvPHM7KytvKXt2YXIgYz01Km8raSx1PWMrMSxsPWMrMixmPWMrMyxoPWMrNDtpZigyOSE9PWFbY118fDAhPT1hW3VdfHwwIT09YVtsXXx8MCE9PWFbZl18fDAhPT1hW2hdKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO3ZhciBkPXRbb107YVtjXT0yOSxhW3VdPWQ+PjI0JjI1NSxhW2xdPWQ+PjE2JjI1NSxhW2ZdPWQ+PjgmMjU1LGFbaF09MjU1JmR9fX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2codGhpcyxlKSx0aGlzLmNmZj10fXJldHVybiB5KGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LHI9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChyKTt2YXIgYT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7aWYodC5hZGQoYSksZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe3ZhciBpPWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7dmFyIG8scz1oKGUuZmRBcnJheSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9aS5zbGljZSgwKTtjLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKHU9bi5VdGlsLnRyYW5zZm9ybSh1LGMuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKSxjLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsdSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX12YXIgbD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7bCYmbC5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKSxlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTt2YXIgZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQoZi5vdXRwdXQpO3ZhciBkPWYudHJhY2tlcnNbMF0scD10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQocCk7dmFyIGc9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGcpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClkLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7dmFyIHY9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KSx0LmFkZCh2KX12YXIgeT10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpLHQuYWRkKHkpO3ZhciBtPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKGQuc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQobSksZS5pc0NJREZvbnQpe2Quc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7dmFyIGI9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYiksZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApLGQuc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KSx0LmFkZChmLm91dHB1dCk7dmFyIHc9Zi50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHcsdCl9cmV0dXJuIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbZF0sdCksdC5hZGQoWzBdKSx0LmRhdGF9fSx7a2V5OiJlbmNvZGVOdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfX0se2tleToiZW5jb2RlRmxvYXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQudG9TdHJpbmcoKSxuPWUuRW5jb2RlRmxvYXRSZWdFeHAuZXhlYyhyKTtpZihuKXt2YXIgYT1wYXJzZUZsb2F0KCIxZSIrKChuWzJdPytuWzJdOjApK25bMV0ubGVuZ3RoKSk7cj0oTWF0aC5yb3VuZCh0KmEpL2EpLnRvU3RyaW5nKCl9dmFyIGksbyxzPSIiO2ZvcihpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYz1yW2ldO3MrPSJlIj09PWM/Ii0iPT09clsrK2ldPyJjIjoiYiI6Ii4iPT09Yz8iYSI6Ii0iPT09Yz8iZSI6Y312YXIgdT1bMzBdO2ZvcihpPTAsbz0ocys9MSZzLmxlbmd0aD8iZiI6ImZmIikubGVuZ3RoO2k8bztpKz0yKXUucHVzaChwYXJzZUludChzLnN1YnN0cmluZyhpLGkrMiksMTYpKTtyZXR1cm4gdX19LHtrZXk6ImVuY29kZUludGVnZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXX19LHtrZXk6ImNvbXBpbGVIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfX0se2tleToiY29tcGlsZU5hbWVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgQSxhPWgoZSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXtmb3IodmFyIGk9dC52YWx1ZSxvPU1hdGgubWluKGkubGVuZ3RoLDEyNykscz1uZXcgQXJyYXkobyksYz0wO2M8bztjKyspe3ZhciB1PWlbY107KHU8IiEifHx1PiJ+Inx8IlsiPT09dXx8Il0iPT09dXx8IigiPT09dXx8IikiPT09dXx8InsiPT09dXx8In0iPT09dXx8IjwiPT09dXx8Ij4iPT09dXx8Ii8iPT09dXx8IiUiPT09dSkmJih1PSJfIiksc1tjXT11fSIiPT09KHM9cy5qb2luKCIiKSkmJihzPSJCYWRfRm9udF9OYW1lIiksci5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShzKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleChyKX19LHtrZXk6ImNvbXBpbGVUb3BEaWN0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9W10saT1uZXcgQSxvPWgoZSk7dHJ5e2ZvcihvLnMoKTshKG49by5uKCkpLmRvbmU7KXt2YXIgcz1uLnZhbHVlO3ImJihzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFZlcnNpb24iKSxzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFJldmlzaW9uIikscy5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIikscy5yZW1vdmVCeU5hbWUoIkNJRENvdW50Iikscy5yZW1vdmVCeU5hbWUoIlVJREJhc2UiKSk7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyk7YS5wdXNoKGMpLGkuYWRkKHUpLGMub2Zmc2V0KHQpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm57dHJhY2tlcnM6YSxvdXRwdXQ6aT10aGlzLmNvbXBpbGVJbmRleChpLGEpfX19LHtrZXk6ImNvbXBpbGVQcml2YXRlRGljdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTsrK2Epe3ZhciBvPWVbYV0scz1vLnByaXZhdGVEaWN0O2lmKCFzfHwhby5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyksbD1yLmxlbmd0aDtpZihjLm9mZnNldChsKSx1Lmxlbmd0aHx8KGw9MCksdFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbdS5sZW5ndGgsbF0sciksci5hZGQodSkscy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe3ZhciBmPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7Yy5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW3UubGVuZ3RoXSxyKSxyLmFkZChmKX19fX0se2tleToiY29tcGlsZURpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1bXSxpPWgoZS5vcmRlcik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKHMgaW4gZS52YWx1ZXMpe3ZhciBjPWUudmFsdWVzW3NdLHU9ZS50eXBlc1tzXTtpZihBcnJheS5pc0FycmF5KHUpfHwodT1bdV0pLEFycmF5LmlzQXJyYXkoYyl8fChjPVtjXSksMCE9PWMubGVuZ3RoKXtmb3IodmFyIGw9MCxmPXUubGVuZ3RoO2w8ZjsrK2wpe3ZhciBkPXVbbF0scD1jW2xdO3N3aXRjaChkKXtjYXNlIm51bSI6Y2FzZSJzaWQiOmEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIocCkpKTticmVhaztjYXNlIm9mZnNldCI6dmFyIGc9ZS5rZXlUb05hbWVNYXBbc107dC5pc1RyYWNraW5nKGcpfHx0LnRyYWNrKGcsYS5sZW5ndGgpLGEucHVzaCgyOSwwLDAsMCwwKTticmVhaztjYXNlImFycmF5IjpjYXNlImRlbHRhIjphLnB1c2guYXBwbHkoYSxvKHRoaXMuZW5jb2RlTnVtYmVyKHApKSk7Zm9yKHZhciB2PTEseT1jLmxlbmd0aDt2PHk7Kyt2KWEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIoY1t2XSkpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGRhdGEgdHlwZSBvZiAiLmNvbmNhdChkKSl9fWEucHVzaC5hcHBseShhLG8oZS5vcGNvZGVzW3NdKSl9fX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIGF9fSx7a2V5OiJjb21waWxlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IEEsYT1oKGUpO3RyeXtmb3IoYS5zKCk7ISh0PWEubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZTtyLmFkZCgoMCxuLnN0cmluZ1RvQnl0ZXMpKGkpKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHIpfX0se2tleToiY29tcGlsZUdsb2JhbFN1YnJJbmRleCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7dGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZSkpfX0se2tleToiY29tcGlsZUNoYXJTdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEEscj0wO3I8ZS5jb3VudDtyKyspe3ZhciBuPWUuZ2V0KHIpOzAhPT1uLmxlbmd0aD90LmFkZChuKTp0LmFkZChuZXcgVWludDhBcnJheShbMTM5LDE0XSkpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX19LHtrZXk6ImNvbXBpbGVDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaSxvPXQtMTtpZihhKWk9bmV3IFVpbnQ4QXJyYXkoWzIsMCwwLG8+PjgmMjU1LDI1NSZvXSk7ZWxzZXsoaT1uZXcgVWludDhBcnJheSgxKzIqbykpWzBdPTA7Zm9yKHZhciBzPTAsYz1lLmNoYXJzZXQubGVuZ3RoLHU9ITEsbD0xO2w8aS5sZW5ndGg7bCs9Mil7dmFyIGY9MDtpZihzPGMpe3ZhciBoPWUuY2hhcnNldFtzKytdOy0xPT09KGY9ci5nZXRTSUQoaCkpJiYoZj0wLHV8fCh1PSEwLCgwLG4ud2FybikoIkNvdWxkbid0IGZpbmQgIi5jb25jYXQoaCwiIGluIENGRiBzdHJpbmdzIikpKSl9aVtsXT1mPj44JjI1NSxpW2wrMV09MjU1JmZ9fXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGkpfX0se2tleToiY29tcGlsZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9fSx7a2V5OiJjb21waWxlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmZvcm1hdDtzd2l0Y2gobil7Y2FzZSAwOmZvcigodD1uZXcgVWludDhBcnJheSgxK2UuZmRTZWxlY3QubGVuZ3RoKSlbMF09bixyPTA7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspdFtyKzFdPWUuZmRTZWxlY3Rbcl07YnJlYWs7Y2FzZSAzOnZhciBhPWUuZmRTZWxlY3RbMF0saT1bbiwwLDAsMCwwLGFdO2ZvcihyPTE7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspe3ZhciBvPWUuZmRTZWxlY3Rbcl07byE9PWEmJihpLnB1c2gocj4+OCYyNTUsMjU1JnIsbyksYT1vKX12YXIgcz0oaS5sZW5ndGgtMykvMztpWzFdPXM+PjgmMjU1LGlbMl09MjU1JnMsaS5wdXNoKHI+PjgmMjU1LDI1NSZyKSx0PW5ldyBVaW50OEFycmF5KGkpfXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KHQpfX0se2tleToiY29tcGlsZVR5cGVkQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47KytyKXRbcl09ZVtyXTtyZXR1cm4gdH19LHtrZXk6ImNvbXBpbGVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLHI9ZS5vYmplY3RzLG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuWzAsMF07dmFyIGEsaSxzPVtuPj44JjI1NSwyNTUmbl0sYz0xO2ZvcihhPTA7YTxuOysrYSljKz1yW2FdLmxlbmd0aDtpPWM8MjU2PzE6Yzw2NTUzNj8yOmM8MTY3NzcyMTY/Mzo0LHMucHVzaChpKTt2YXIgdT0xO2ZvcihhPTA7YTxuKzE7YSsrKTE9PT1pP3MucHVzaCgyNTUmdSk6Mj09PWk/cy5wdXNoKHU+PjgmMjU1LDI1NSZ1KTozPT09aT9zLnB1c2godT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1KTpzLnB1c2godT4+PjI0JjI1NSx1Pj4xNiYyNTUsdT4+OCYyNTUsMjU1JnUpLHJbYV0mJih1Kz1yW2FdLmxlbmd0aCk7Zm9yKGE9MDthPG47YSsrKXRbYV0mJnRbYV0ub2Zmc2V0KHMubGVuZ3RoKSxzLnB1c2guYXBwbHkocyxvKHJbYV0pKTtyZXR1cm4gc319XSxbe2tleToiRW5jb2RlRmxvYXRSZWdFeHAiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfX1dKSxlfSgpO3QuQ0ZGQ29tcGlsZXI9Un0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JU09BZG9iZUNoYXJzZXQ9dC5FeHBlcnRTdWJzZXRDaGFyc2V0PXQuRXhwZXJ0Q2hhcnNldD12b2lkIDAsdC5JU09BZG9iZUNoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iXSx0LkV4cGVydENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0sdC5FeHBlcnRTdWJzZXRDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlphcGZEaW5nYmF0c0VuY29kaW5nPXQuV2luQW5zaUVuY29kaW5nPXQuU3ltYm9sU2V0RW5jb2Rpbmc9dC5TdGFuZGFyZEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LkV4cGVydEVuY29kaW5nPXZvaWQgMCx0LmdldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJTdGFuZGFyZEVuY29kaW5nIjpyZXR1cm4gaTtjYXNlIk1hY1JvbWFuRW5jb2RpbmciOnJldHVybiBhO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiBzO2Nhc2UiWmFwZkRpbmdiYXRzRW5jb2RpbmciOnJldHVybiBjO2Nhc2UiRXhwZXJ0RW5jb2RpbmciOnJldHVybiByO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiBuO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTt2YXIgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsIiIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsIiIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsIiIsIiIsIiIsImlzdXBlcmlvciIsIiIsIiIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsIiIsIiIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCIiLCJEb3RhY2NlbnRzbWFsbCIsIiIsIiIsIk1hY3JvbnNtYWxsIiwiIiwiIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiIiwiIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdO3QuRXhwZXJ0RW5jb2Rpbmc9cjt2YXIgbj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9YTt2YXIgaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCIiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCIiLCJxdWVzdGlvbmRvd24iLCIiLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsIiIsInJpbmciLCJjZWRpbGxhIiwiIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJBRSIsIiIsIm9yZGZlbWluaW5lIiwiIiwiIiwiIiwiIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCIiLCIiLCIiLCIiLCIiLCJhZSIsIiIsIiIsIiIsImRvdGxlc3NpIiwiIiwiIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwiIiwiIiwiIiwiIl07dC5TdGFuZGFyZEVuY29kaW5nPWk7dmFyIG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiYnVsbGV0IiwiRXVybyIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwiZmxvcmluIiwicXVvdGVkYmxiYXNlIiwiZWxsaXBzaXMiLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJjaXJjdW1mbGV4IiwicGVydGhvdXNhbmQiLCJTY2Fyb24iLCJndWlsc2luZ2xsZWZ0IiwiT0UiLCJidWxsZXQiLCJaY2Fyb24iLCJidWxsZXQiLCJidWxsZXQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsImJ1bGxldCIsImVuZGFzaCIsImVtZGFzaCIsInRpbGRlIiwidHJhZGVtYXJrIiwic2Nhcm9uIiwiZ3VpbHNpbmdscmlnaHQiLCJvZSIsImJ1bGxldCIsInpjYXJvbiIsIllkaWVyZXNpcyIsInNwYWNlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImN1cnJlbmN5IiwieWVuIiwiYnJva2VuYmFyIiwic2VjdGlvbiIsImRpZXJlc2lzIiwiY29weXJpZ2h0Iiwib3JkZmVtaW5pbmUiLCJndWlsbGVtb3RsZWZ0IiwibG9naWNhbG5vdCIsImh5cGhlbiIsInJlZ2lzdGVyZWQiLCJtYWNyb24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJhY3V0ZSIsIm11IiwicGFyYWdyYXBoIiwicGVyaW9kY2VudGVyZWQiLCJjZWRpbGxhIiwib25lc3VwZXJpb3IiLCJvcmRtYXNjdWxpbmUiLCJndWlsbGVtb3RyaWdodCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93biIsIkFncmF2ZSIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJBRSIsIkNjZWRpbGxhIiwiRWdyYXZlIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJJZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIkV0aCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT3RpbGRlIiwiT2RpZXJlc2lzIiwibXVsdGlwbHkiLCJPc2xhc2giLCJVZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIllhY3V0ZSIsIlRob3JuIiwiZ2VybWFuZGJscyIsImFncmF2ZSIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYXRpbGRlIiwiYWRpZXJlc2lzIiwiYXJpbmciLCJhZSIsImNjZWRpbGxhIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImV0aCIsIm50aWxkZSIsIm9ncmF2ZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib3RpbGRlIiwib2RpZXJlc2lzIiwiZGl2aWRlIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ5YWN1dGUiLCJ0aG9ybiIsInlkaWVyZXNpcyJdO3QuV2luQW5zaUVuY29kaW5nPW87dmFyIHM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPXM7dmFyIGM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImExIiwiYTIiLCJhMjAyIiwiYTMiLCJhNCIsImE1IiwiYTExOSIsImExMTgiLCJhMTE3IiwiYTExIiwiYTEyIiwiYTEzIiwiYTE0IiwiYTE1IiwiYTE2IiwiYTEwNSIsImExNyIsImExOCIsImExOSIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEyNCIsImEyNSIsImEyNiIsImEyNyIsImEyOCIsImE2IiwiYTciLCJhOCIsImE5IiwiYTEwIiwiYTI5IiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwiYTM0IiwiYTM1IiwiYTM2IiwiYTM3IiwiYTM4IiwiYTM5IiwiYTQwIiwiYTQxIiwiYTQyIiwiYTQzIiwiYTQ0IiwiYTQ1IiwiYTQ2IiwiYTQ3IiwiYTQ4IiwiYTQ5IiwiYTUwIiwiYTUxIiwiYTUyIiwiYTUzIiwiYTU0IiwiYTU1IiwiYTU2IiwiYTU3IiwiYTU4IiwiYTU5IiwiYTYwIiwiYTYxIiwiYTYyIiwiYTYzIiwiYTY0IiwiYTY1IiwiYTY2IiwiYTY3IiwiYTY4IiwiYTY5IiwiYTcwIiwiYTcxIiwiYTcyIiwiYTczIiwiYTc0IiwiYTIwMyIsImE3NSIsImEyMDQiLCJhNzYiLCJhNzciLCJhNzgiLCJhNzkiLCJhODEiLCJhODIiLCJhODMiLCJhODQiLCJhOTciLCJhOTgiLCJhOTkiLCJhMTAwIiwiIiwiYTg5IiwiYTkwIiwiYTkzIiwiYTk0IiwiYTkxIiwiYTkyIiwiYTIwNSIsImE4NSIsImEyMDYiLCJhODYiLCJhODciLCJhODgiLCJhOTUiLCJhOTYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJhMTAxIiwiYTEwMiIsImExMDMiLCJhMTA0IiwiYTEwNiIsImExMDciLCJhMTA4IiwiYTExMiIsImExMTEiLCJhMTEwIiwiYTEwOSIsImExMjAiLCJhMTIxIiwiYTEyMiIsImExMjMiLCJhMTI0IiwiYTEyNSIsImExMjYiLCJhMTI3IiwiYTEyOCIsImExMjkiLCJhMTMwIiwiYTEzMSIsImExMzIiLCJhMTMzIiwiYTEzNCIsImExMzUiLCJhMTM2IiwiYTEzNyIsImExMzgiLCJhMTM5IiwiYTE0MCIsImExNDEiLCJhMTQyIiwiYTE0MyIsImExNDQiLCJhMTQ1IiwiYTE0NiIsImExNDciLCJhMTQ4IiwiYTE0OSIsImExNTAiLCJhMTUxIiwiYTE1MiIsImExNTMiLCJhMTU0IiwiYTE1NSIsImExNTYiLCJhMTU3IiwiYTE1OCIsImExNTkiLCJhMTYwIiwiYTE2MSIsImExNjMiLCJhMTY0IiwiYTE5NiIsImExNjUiLCJhMTkyIiwiYTE2NiIsImExNjciLCJhMTY4IiwiYTE2OSIsImExNzAiLCJhMTcxIiwiYTE3MiIsImExNzMiLCJhMTYyIiwiYTE3NCIsImExNzUiLCJhMTc2IiwiYTE3NyIsImExNzgiLCJhMTc5IiwiYTE5MyIsImExODAiLCJhMTk5IiwiYTE4MSIsImEyMDAiLCJhMTgyIiwiIiwiYTIwMSIsImExODMiLCJhMTg0IiwiYTE5NyIsImExODUiLCJhMTk0IiwiYTE5OCIsImExODYiLCJhMTk1IiwiYTE4NyIsImExODgiLCJhMTg5IiwiYTE5MCIsImExOTEiLCIiXTt0LlphcGZEaW5nYmF0c0VuY29kaW5nPWN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9dC5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc9dC5Gb250RmxhZ3M9dm9pZCAwLHQuZ2V0Rm9udFR5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3N3aXRjaChlKXtjYXNlIlR5cGUxIjpyZXR1cm4gcj9uLkZvbnRUeXBlLlRZUEUxU1RBTkRBUkQ6IlR5cGUxQyI9PT10P24uRm9udFR5cGUuVFlQRTFDOm4uRm9udFR5cGUuVFlQRTE7Y2FzZSJDSURGb250VHlwZTAiOnJldHVybiJDSURGb250VHlwZTBDIj09PXQ/bi5Gb250VHlwZS5DSURGT05UVFlQRTBDOm4uRm9udFR5cGUuQ0lERk9OVFRZUEUwO2Nhc2UiT3BlblR5cGUiOnJldHVybiBuLkZvbnRUeXBlLk9QRU5UWVBFO2Nhc2UiVHJ1ZVR5cGUiOnJldHVybiBuLkZvbnRUeXBlLlRSVUVUWVBFO2Nhc2UiQ0lERm9udFR5cGUyIjpyZXR1cm4gbi5Gb250VHlwZS5DSURGT05UVFlQRTI7Y2FzZSJNTVR5cGUxIjpyZXR1cm4gbi5Gb250VHlwZS5NTVRZUEUxO2Nhc2UiVHlwZTAiOnJldHVybiBuLkZvbnRUeXBlLlRZUEUwO2RlZmF1bHQ6cmV0dXJuIG4uRm9udFR5cGUuVU5LTk9XTn19LHQubm9ybWFsaXplRm9udE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWyxfXS9nLCItIikucmVwbGFjZSgvXHMvZywiIil9LHQucmVjb3ZlckdseXBoTmFtZT1jLHQudHlwZTFGb250R2x5cGhNYXBwaW5nPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixvLHUsbD1PYmplY3QuY3JlYXRlKG51bGwpLGY9ISEoZS5mbGFncyZzLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KWZvcih1PXQsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpZm9yKHU9KDAsYS5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKSxvPTA7bzx1Lmxlbmd0aDtvKyspbj1yLmluZGV4T2YodVtvXSksbFtvXT1uPj0wP246MDtlbHNlIGlmKGYpZm9yKG8gaW4gdClsW29dPXRbb107ZWxzZSBmb3IodT1hLlN0YW5kYXJkRW5jb2Rpbmcsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7dmFyIGgsZD1lLmRpZmZlcmVuY2VzO2lmKGQpZm9yKG8gaW4gZCl7dmFyIHA9ZFtvXTtpZigtMT09PShuPXIuaW5kZXhPZihwKSkpe2h8fChoPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSk7dmFyIGc9YyhwLGgpO2chPT1wJiYobj1yLmluZGV4T2YoZykpfWxbb109bj49MD9uOjB9cmV0dXJuIGx9O3ZhciBuPXIoMiksYT1yKDE2NiksaT1yKDE2OCksbz1yKDE2OSk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7dmFyIHM9e0ZpeGVkUGl0Y2g6MSxTZXJpZjoyLFN5bWJvbGljOjQsU2NyaXB0OjgsTm9uc3ltYm9saWM6MzIsSXRhbGljOjY0LEFsbENhcDo2NTUzNixTbWFsbENhcDoxMzEwNzIsRm9yY2VCb2xkOjI2MjE0NH07ZnVuY3Rpb24gYyhlLHQpe2lmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIGU7dmFyIHI9KDAsby5nZXRVbmljb2RlRm9yR2x5cGgpKGUsdCk7aWYoLTEhPT1yKWZvcih2YXIgYSBpbiB0KWlmKHRbYV09PT1yKXJldHVybiBhO3JldHVybigwLG4uaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSksZX10LkZvbnRGbGFncz1zLHQuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXX0sKGUsdCxyKT0+e3Iucih0KSxyLmQodCx7Z2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlOigpPT5pLGdldEdseXBoc1VuaWNvZGU6KCk9PmF9KTt2YXIgbj1yKDEzNSk7Y29uc3QgYT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIkEiLDY1LCJBRSIsMTk4LCJBRWFjdXRlIiw1MDgsIkFFbWFjcm9uIiw0ODIsIkFFc21hbGwiLDYzNDYyLCJBYWN1dGUiLDE5MywiQWFjdXRlc21hbGwiLDYzNDU3LCJBYnJldmUiLDI1OCwiQWJyZXZlYWN1dGUiLDc4NTQsIkFicmV2ZWN5cmlsbGljIiwxMjMyLCJBYnJldmVkb3RiZWxvdyIsNzg2MiwiQWJyZXZlZ3JhdmUiLDc4NTYsIkFicmV2ZWhvb2thYm92ZSIsNzg1OCwiQWJyZXZldGlsZGUiLDc4NjAsIkFjYXJvbiIsNDYxLCJBY2lyY2xlIiw5Mzk4LCJBY2lyY3VtZmxleCIsMTk0LCJBY2lyY3VtZmxleGFjdXRlIiw3ODQ0LCJBY2lyY3VtZmxleGRvdGJlbG93Iiw3ODUyLCJBY2lyY3VtZmxleGdyYXZlIiw3ODQ2LCJBY2lyY3VtZmxleGhvb2thYm92ZSIsNzg0OCwiQWNpcmN1bWZsZXhzbWFsbCIsNjM0NTgsIkFjaXJjdW1mbGV4dGlsZGUiLDc4NTAsIkFjdXRlIiw2MzE3NywiQWN1dGVzbWFsbCIsNjM0MTIsIkFjeXJpbGxpYyIsMTA0MCwiQWRibGdyYXZlIiw1MTIsIkFkaWVyZXNpcyIsMTk2LCJBZGllcmVzaXNjeXJpbGxpYyIsMTIzNCwiQWRpZXJlc2lzbWFjcm9uIiw0NzgsIkFkaWVyZXNpc3NtYWxsIiw2MzQ2MCwiQWRvdGJlbG93Iiw3ODQwLCJBZG90bWFjcm9uIiw0ODAsIkFncmF2ZSIsMTkyLCJBZ3JhdmVzbWFsbCIsNjM0NTYsIkFob29rYWJvdmUiLDc4NDIsIkFpZWN5cmlsbGljIiwxMjM2LCJBaW52ZXJ0ZWRicmV2ZSIsNTE0LCJBbHBoYSIsOTEzLCJBbHBoYXRvbm9zIiw5MDIsIkFtYWNyb24iLDI1NiwiQW1vbm9zcGFjZSIsNjUzMTMsIkFvZ29uZWsiLDI2MCwiQXJpbmciLDE5NywiQXJpbmdhY3V0ZSIsNTA2LCJBcmluZ2JlbG93Iiw3NjgwLCJBcmluZ3NtYWxsIiw2MzQ2MSwiQXNtYWxsIiw2MzMyOSwiQXRpbGRlIiwxOTUsIkF0aWxkZXNtYWxsIiw2MzQ1OSwiQXliYXJtZW5pYW4iLDEzMjksIkIiLDY2LCJCY2lyY2xlIiw5Mzk5LCJCZG90YWNjZW50Iiw3NjgyLCJCZG90YmVsb3ciLDc2ODQsIkJlY3lyaWxsaWMiLDEwNDEsIkJlbmFybWVuaWFuIiwxMzMwLCJCZXRhIiw5MTQsIkJob29rIiwzODUsIkJsaW5lYmVsb3ciLDc2ODYsIkJtb25vc3BhY2UiLDY1MzE0LCJCcmV2ZXNtYWxsIiw2MzIyMCwiQnNtYWxsIiw2MzMzMCwiQnRvcGJhciIsMzg2LCJDIiw2NywiQ2Fhcm1lbmlhbiIsMTM0MiwiQ2FjdXRlIiwyNjIsIkNhcm9uIiw2MzE3OCwiQ2Fyb25zbWFsbCIsNjMyMjEsIkNjYXJvbiIsMjY4LCJDY2VkaWxsYSIsMTk5LCJDY2VkaWxsYWFjdXRlIiw3Njg4LCJDY2VkaWxsYXNtYWxsIiw2MzQ2MywiQ2NpcmNsZSIsOTQwMCwiQ2NpcmN1bWZsZXgiLDI2NCwiQ2RvdCIsMjY2LCJDZG90YWNjZW50IiwyNjYsIkNlZGlsbGFzbWFsbCIsNjM0MTYsIkNoYWFybWVuaWFuIiwxMzUzLCJDaGVhYmtoYXNpYW5jeXJpbGxpYyIsMTIxMiwiQ2hlY3lyaWxsaWMiLDEwNjMsIkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljIiwxMjE0LCJDaGVkZXNjZW5kZXJjeXJpbGxpYyIsMTIwNiwiQ2hlZGllcmVzaXNjeXJpbGxpYyIsMTI2OCwiQ2hlaGFybWVuaWFuIiwxMzQ3LCJDaGVraGFrYXNzaWFuY3lyaWxsaWMiLDEyMjcsIkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMiLDEyMDgsIkNoaSIsOTM1LCJDaG9vayIsMzkxLCJDaXJjdW1mbGV4c21hbGwiLDYzMjIyLCJDbW9ub3NwYWNlIiw2NTMxNSwiQ29hcm1lbmlhbiIsMTM2MSwiQ3NtYWxsIiw2MzMzMSwiRCIsNjgsIkRaIiw0OTcsIkRaY2Fyb24iLDQ1MiwiRGFhcm1lbmlhbiIsMTMzMiwiRGFmcmljYW4iLDM5MywiRGNhcm9uIiwyNzAsIkRjZWRpbGxhIiw3Njk2LCJEY2lyY2xlIiw5NDAxLCJEY2lyY3VtZmxleGJlbG93Iiw3Njk4LCJEY3JvYXQiLDI3MiwiRGRvdGFjY2VudCIsNzY5MCwiRGRvdGJlbG93Iiw3NjkyLCJEZWN5cmlsbGljIiwxMDQ0LCJEZWljb3B0aWMiLDEwMDYsIkRlbHRhIiw4NzEwLCJEZWx0YWdyZWVrIiw5MTYsIkRob29rIiwzOTQsIkRpZXJlc2lzIiw2MzE3OSwiRGllcmVzaXNBY3V0ZSIsNjMxODAsIkRpZXJlc2lzR3JhdmUiLDYzMTgxLCJEaWVyZXNpc3NtYWxsIiw2MzQwMCwiRGlnYW1tYWdyZWVrIiw5ODgsIkRqZWN5cmlsbGljIiwxMDI2LCJEbGluZWJlbG93Iiw3Njk0LCJEbW9ub3NwYWNlIiw2NTMxNiwiRG90YWNjZW50c21hbGwiLDYzMjIzLCJEc2xhc2giLDI3MiwiRHNtYWxsIiw2MzMzMiwiRHRvcGJhciIsMzk1LCJEeiIsNDk4LCJEemNhcm9uIiw0NTMsIkR6ZWFia2hhc2lhbmN5cmlsbGljIiwxMjQ4LCJEemVjeXJpbGxpYyIsMTAyOSwiRHpoZWN5cmlsbGljIiwxMDM5LCJFIiw2OSwiRWFjdXRlIiwyMDEsIkVhY3V0ZXNtYWxsIiw2MzQ2NSwiRWJyZXZlIiwyNzYsIkVjYXJvbiIsMjgyLCJFY2VkaWxsYWJyZXZlIiw3NzA4LCJFY2hhcm1lbmlhbiIsMTMzMywiRWNpcmNsZSIsOTQwMiwiRWNpcmN1bWZsZXgiLDIwMiwiRWNpcmN1bWZsZXhhY3V0ZSIsNzg3MCwiRWNpcmN1bWZsZXhiZWxvdyIsNzcwNCwiRWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg3OCwiRWNpcmN1bWZsZXhncmF2ZSIsNzg3MiwiRWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NzQsIkVjaXJjdW1mbGV4c21hbGwiLDYzNDY2LCJFY2lyY3VtZmxleHRpbGRlIiw3ODc2LCJFY3lyaWxsaWMiLDEwMjgsIkVkYmxncmF2ZSIsNTE2LCJFZGllcmVzaXMiLDIwMywiRWRpZXJlc2lzc21hbGwiLDYzNDY3LCJFZG90IiwyNzgsIkVkb3RhY2NlbnQiLDI3OCwiRWRvdGJlbG93Iiw3ODY0LCJFZmN5cmlsbGljIiwxMDYwLCJFZ3JhdmUiLDIwMCwiRWdyYXZlc21hbGwiLDYzNDY0LCJFaGFybWVuaWFuIiwxMzM1LCJFaG9va2Fib3ZlIiw3ODY2LCJFaWdodHJvbWFuIiw4NTUxLCJFaW52ZXJ0ZWRicmV2ZSIsNTE4LCJFaW90aWZpZWRjeXJpbGxpYyIsMTEyNCwiRWxjeXJpbGxpYyIsMTA1MSwiRWxldmVucm9tYW4iLDg1NTQsIkVtYWNyb24iLDI3NCwiRW1hY3JvbmFjdXRlIiw3NzAyLCJFbWFjcm9uZ3JhdmUiLDc3MDAsIkVtY3lyaWxsaWMiLDEwNTIsIkVtb25vc3BhY2UiLDY1MzE3LCJFbmN5cmlsbGljIiwxMDUzLCJFbmRlc2NlbmRlcmN5cmlsbGljIiwxMTg2LCJFbmciLDMzMCwiRW5naGVjeXJpbGxpYyIsMTE4OCwiRW5ob29rY3lyaWxsaWMiLDEyMjMsIkVvZ29uZWsiLDI4MCwiRW9wZW4iLDQwMCwiRXBzaWxvbiIsOTE3LCJFcHNpbG9udG9ub3MiLDkwNCwiRXJjeXJpbGxpYyIsMTA1NiwiRXJldmVyc2VkIiwzOTgsIkVyZXZlcnNlZGN5cmlsbGljIiwxMDY5LCJFc2N5cmlsbGljIiwxMDU3LCJFc2Rlc2NlbmRlcmN5cmlsbGljIiwxMTk0LCJFc2giLDQyNSwiRXNtYWxsIiw2MzMzMywiRXRhIiw5MTksIkV0YXJtZW5pYW4iLDEzMzYsIkV0YXRvbm9zIiw5MDUsIkV0aCIsMjA4LCJFdGhzbWFsbCIsNjM0NzIsIkV0aWxkZSIsNzg2OCwiRXRpbGRlYmVsb3ciLDc3MDYsIkV1cm8iLDgzNjQsIkV6aCIsNDM5LCJFemhjYXJvbiIsNDk0LCJFemhyZXZlcnNlZCIsNDQwLCJGIiw3MCwiRmNpcmNsZSIsOTQwMywiRmRvdGFjY2VudCIsNzcxMCwiRmVoYXJtZW5pYW4iLDEzNjYsIkZlaWNvcHRpYyIsOTk2LCJGaG9vayIsNDAxLCJGaXRhY3lyaWxsaWMiLDExMzgsIkZpdmVyb21hbiIsODU0OCwiRm1vbm9zcGFjZSIsNjUzMTgsIkZvdXJyb21hbiIsODU0NywiRnNtYWxsIiw2MzMzNCwiRyIsNzEsIkdCc3F1YXJlIiwxMzE5MSwiR2FjdXRlIiw1MDAsIkdhbW1hIiw5MTUsIkdhbW1hYWZyaWNhbiIsNDA0LCJHYW5naWFjb3B0aWMiLDEwMDIsIkdicmV2ZSIsMjg2LCJHY2Fyb24iLDQ4NiwiR2NlZGlsbGEiLDI5MCwiR2NpcmNsZSIsOTQwNCwiR2NpcmN1bWZsZXgiLDI4NCwiR2NvbW1hYWNjZW50IiwyOTAsIkdkb3QiLDI4OCwiR2RvdGFjY2VudCIsMjg4LCJHZWN5cmlsbGljIiwxMDQzLCJHaGFkYXJtZW5pYW4iLDEzNDYsIkdoZW1pZGRsZWhvb2tjeXJpbGxpYyIsMTE3MiwiR2hlc3Ryb2tlY3lyaWxsaWMiLDExNzAsIkdoZXVwdHVybmN5cmlsbGljIiwxMTY4LCJHaG9vayIsNDAzLCJHaW1hcm1lbmlhbiIsMTMzMSwiR2plY3lyaWxsaWMiLDEwMjcsIkdtYWNyb24iLDc3MTIsIkdtb25vc3BhY2UiLDY1MzE5LCJHcmF2ZSIsNjMxODIsIkdyYXZlc21hbGwiLDYzMzI4LCJHc21hbGwiLDYzMzM1LCJHc21hbGxob29rIiw2NjcsIkdzdHJva2UiLDQ4NCwiSCIsNzIsIkgxODUzMyIsOTY3OSwiSDE4NTQzIiw5NjQyLCJIMTg1NTEiLDk2NDMsIkgyMjA3MyIsOTYzMywiSFBzcXVhcmUiLDEzMjU5LCJIYWFia2hhc2lhbmN5cmlsbGljIiwxMTkyLCJIYWRlc2NlbmRlcmN5cmlsbGljIiwxMjAyLCJIYXJkc2lnbmN5cmlsbGljIiwxMDY2LCJIYmFyIiwyOTQsIkhicmV2ZWJlbG93Iiw3NzIyLCJIY2VkaWxsYSIsNzcyMCwiSGNpcmNsZSIsOTQwNSwiSGNpcmN1bWZsZXgiLDI5MiwiSGRpZXJlc2lzIiw3NzE4LCJIZG90YWNjZW50Iiw3NzE0LCJIZG90YmVsb3ciLDc3MTYsIkhtb25vc3BhY2UiLDY1MzIwLCJIb2FybWVuaWFuIiwxMzQ0LCJIb3JpY29wdGljIiwxZTMsIkhzbWFsbCIsNjMzMzYsIkh1bmdhcnVtbGF1dCIsNjMxODMsIkh1bmdhcnVtbGF1dHNtYWxsIiw2MzIyNCwiSHpzcXVhcmUiLDEzMjAwLCJJIiw3MywiSUFjeXJpbGxpYyIsMTA3MSwiSUoiLDMwNiwiSVVjeXJpbGxpYyIsMTA3MCwiSWFjdXRlIiwyMDUsIklhY3V0ZXNtYWxsIiw2MzQ2OSwiSWJyZXZlIiwzMDAsIkljYXJvbiIsNDYzLCJJY2lyY2xlIiw5NDA2LCJJY2lyY3VtZmxleCIsMjA2LCJJY2lyY3VtZmxleHNtYWxsIiw2MzQ3MCwiSWN5cmlsbGljIiwxMDMwLCJJZGJsZ3JhdmUiLDUyMCwiSWRpZXJlc2lzIiwyMDcsIklkaWVyZXNpc2FjdXRlIiw3NzI2LCJJZGllcmVzaXNjeXJpbGxpYyIsMTI1MiwiSWRpZXJlc2lzc21hbGwiLDYzNDcxLCJJZG90IiwzMDQsIklkb3RhY2NlbnQiLDMwNCwiSWRvdGJlbG93Iiw3ODgyLCJJZWJyZXZlY3lyaWxsaWMiLDEyMzgsIkllY3lyaWxsaWMiLDEwNDUsIklmcmFrdHVyIiw4NDY1LCJJZ3JhdmUiLDIwNCwiSWdyYXZlc21hbGwiLDYzNDY4LCJJaG9va2Fib3ZlIiw3ODgwLCJJaWN5cmlsbGljIiwxMDQ4LCJJaW52ZXJ0ZWRicmV2ZSIsNTIyLCJJaXNob3J0Y3lyaWxsaWMiLDEwNDksIkltYWNyb24iLDI5OCwiSW1hY3JvbmN5cmlsbGljIiwxMjUwLCJJbW9ub3NwYWNlIiw2NTMyMSwiSW5pYXJtZW5pYW4iLDEzMzksIklvY3lyaWxsaWMiLDEwMjUsIklvZ29uZWsiLDMwMiwiSW90YSIsOTIxLCJJb3RhYWZyaWNhbiIsNDA2LCJJb3RhZGllcmVzaXMiLDkzOCwiSW90YXRvbm9zIiw5MDYsIklzbWFsbCIsNjMzMzcsIklzdHJva2UiLDQwNywiSXRpbGRlIiwyOTYsIkl0aWxkZWJlbG93Iiw3NzI0LCJJemhpdHNhY3lyaWxsaWMiLDExNDAsIkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljIiwxMTQyLCJKIiw3NCwiSmFhcm1lbmlhbiIsMTM0NSwiSmNpcmNsZSIsOTQwNywiSmNpcmN1bWZsZXgiLDMwOCwiSmVjeXJpbGxpYyIsMTAzMiwiSmhlaGFybWVuaWFuIiwxMzU1LCJKbW9ub3NwYWNlIiw2NTMyMiwiSnNtYWxsIiw2MzMzOCwiSyIsNzUsIktCc3F1YXJlIiwxMzE4OSwiS0tzcXVhcmUiLDEzMjYxLCJLYWJhc2hraXJjeXJpbGxpYyIsMTE4NCwiS2FjdXRlIiw3NzI4LCJLYWN5cmlsbGljIiwxMDUwLCJLYWRlc2NlbmRlcmN5cmlsbGljIiwxMTc4LCJLYWhvb2tjeXJpbGxpYyIsMTIxOSwiS2FwcGEiLDkyMiwiS2FzdHJva2VjeXJpbGxpYyIsMTE4MiwiS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMTgwLCJLY2Fyb24iLDQ4OCwiS2NlZGlsbGEiLDMxMCwiS2NpcmNsZSIsOTQwOCwiS2NvbW1hYWNjZW50IiwzMTAsIktkb3RiZWxvdyIsNzczMCwiS2VoYXJtZW5pYW4iLDEzNjQsIktlbmFybWVuaWFuIiwxMzQzLCJLaGFjeXJpbGxpYyIsMTA2MSwiS2hlaWNvcHRpYyIsOTk4LCJLaG9vayIsNDA4LCJLamVjeXJpbGxpYyIsMTAzNiwiS2xpbmViZWxvdyIsNzczMiwiS21vbm9zcGFjZSIsNjUzMjMsIktvcHBhY3lyaWxsaWMiLDExNTIsIktvcHBhZ3JlZWsiLDk5MCwiS3NpY3lyaWxsaWMiLDExMzQsIktzbWFsbCIsNjMzMzksIkwiLDc2LCJMSiIsNDU1LCJMTCIsNjMxNjcsIkxhY3V0ZSIsMzEzLCJMYW1iZGEiLDkyMywiTGNhcm9uIiwzMTcsIkxjZWRpbGxhIiwzMTUsIkxjaXJjbGUiLDk0MDksIkxjaXJjdW1mbGV4YmVsb3ciLDc3NDAsIkxjb21tYWFjY2VudCIsMzE1LCJMZG90IiwzMTksIkxkb3RhY2NlbnQiLDMxOSwiTGRvdGJlbG93Iiw3NzM0LCJMZG90YmVsb3dtYWNyb24iLDc3MzYsIkxpd25hcm1lbmlhbiIsMTM0MCwiTGoiLDQ1NiwiTGplY3lyaWxsaWMiLDEwMzMsIkxsaW5lYmVsb3ciLDc3MzgsIkxtb25vc3BhY2UiLDY1MzI0LCJMc2xhc2giLDMyMSwiTHNsYXNoc21hbGwiLDYzMjI1LCJMc21hbGwiLDYzMzQwLCJNIiw3NywiTUJzcXVhcmUiLDEzMTkwLCJNYWNyb24iLDYzMTg0LCJNYWNyb25zbWFsbCIsNjM0MDcsIk1hY3V0ZSIsNzc0MiwiTWNpcmNsZSIsOTQxMCwiTWRvdGFjY2VudCIsNzc0NCwiTWRvdGJlbG93Iiw3NzQ2LCJNZW5hcm1lbmlhbiIsMTM0OCwiTW1vbm9zcGFjZSIsNjUzMjUsIk1zbWFsbCIsNjMzNDEsIk10dXJuZWQiLDQxMiwiTXUiLDkyNCwiTiIsNzgsIk5KIiw0NTgsIk5hY3V0ZSIsMzIzLCJOY2Fyb24iLDMyNywiTmNlZGlsbGEiLDMyNSwiTmNpcmNsZSIsOTQxMSwiTmNpcmN1bWZsZXhiZWxvdyIsNzc1NCwiTmNvbW1hYWNjZW50IiwzMjUsIk5kb3RhY2NlbnQiLDc3NDgsIk5kb3RiZWxvdyIsNzc1MCwiTmhvb2tsZWZ0Iiw0MTMsIk5pbmVyb21hbiIsODU1MiwiTmoiLDQ1OSwiTmplY3lyaWxsaWMiLDEwMzQsIk5saW5lYmVsb3ciLDc3NTIsIk5tb25vc3BhY2UiLDY1MzI2LCJOb3dhcm1lbmlhbiIsMTM1MCwiTnNtYWxsIiw2MzM0MiwiTnRpbGRlIiwyMDksIk50aWxkZXNtYWxsIiw2MzQ3MywiTnUiLDkyNSwiTyIsNzksIk9FIiwzMzgsIk9Fc21hbGwiLDYzMjI2LCJPYWN1dGUiLDIxMSwiT2FjdXRlc21hbGwiLDYzNDc1LCJPYmFycmVkY3lyaWxsaWMiLDEyNTYsIk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljIiwxMjU4LCJPYnJldmUiLDMzNCwiT2Nhcm9uIiw0NjUsIk9jZW50ZXJlZHRpbGRlIiw0MTUsIk9jaXJjbGUiLDk0MTIsIk9jaXJjdW1mbGV4IiwyMTIsIk9jaXJjdW1mbGV4YWN1dGUiLDc4ODgsIk9jaXJjdW1mbGV4ZG90YmVsb3ciLDc4OTYsIk9jaXJjdW1mbGV4Z3JhdmUiLDc4OTAsIk9jaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODkyLCJPY2lyY3VtZmxleHNtYWxsIiw2MzQ3NiwiT2NpcmN1bWZsZXh0aWxkZSIsNzg5NCwiT2N5cmlsbGljIiwxMDU0LCJPZGJsYWN1dGUiLDMzNiwiT2RibGdyYXZlIiw1MjQsIk9kaWVyZXNpcyIsMjE0LCJPZGllcmVzaXNjeXJpbGxpYyIsMTI1NCwiT2RpZXJlc2lzc21hbGwiLDYzNDc4LCJPZG90YmVsb3ciLDc4ODQsIk9nb25la3NtYWxsIiw2MzIyNywiT2dyYXZlIiwyMTAsIk9ncmF2ZXNtYWxsIiw2MzQ3NCwiT2hhcm1lbmlhbiIsMTM2NSwiT2htIiw4NDg2LCJPaG9va2Fib3ZlIiw3ODg2LCJPaG9ybiIsNDE2LCJPaG9ybmFjdXRlIiw3ODk4LCJPaG9ybmRvdGJlbG93Iiw3OTA2LCJPaG9ybmdyYXZlIiw3OTAwLCJPaG9ybmhvb2thYm92ZSIsNzkwMiwiT2hvcm50aWxkZSIsNzkwNCwiT2h1bmdhcnVtbGF1dCIsMzM2LCJPaSIsNDE4LCJPaW52ZXJ0ZWRicmV2ZSIsNTI2LCJPbWFjcm9uIiwzMzIsIk9tYWNyb25hY3V0ZSIsNzc2MiwiT21hY3JvbmdyYXZlIiw3NzYwLCJPbWVnYSIsODQ4NiwiT21lZ2FjeXJpbGxpYyIsMTEyMCwiT21lZ2FncmVlayIsOTM3LCJPbWVnYXJvdW5kY3lyaWxsaWMiLDExNDYsIk9tZWdhdGl0bG9jeXJpbGxpYyIsMTE0OCwiT21lZ2F0b25vcyIsOTExLCJPbWljcm9uIiw5MjcsIk9taWNyb250b25vcyIsOTA4LCJPbW9ub3NwYWNlIiw2NTMyNywiT25lcm9tYW4iLDg1NDQsIk9vZ29uZWsiLDQ5MCwiT29nb25la21hY3JvbiIsNDkyLCJPb3BlbiIsMzkwLCJPc2xhc2giLDIxNiwiT3NsYXNoYWN1dGUiLDUxMCwiT3NsYXNoc21hbGwiLDYzNDgwLCJPc21hbGwiLDYzMzQzLCJPc3Ryb2tlYWN1dGUiLDUxMCwiT3RjeXJpbGxpYyIsMTE1MCwiT3RpbGRlIiwyMTMsIk90aWxkZWFjdXRlIiw3NzU2LCJPdGlsZGVkaWVyZXNpcyIsNzc1OCwiT3RpbGRlc21hbGwiLDYzNDc3LCJQIiw4MCwiUGFjdXRlIiw3NzY0LCJQY2lyY2xlIiw5NDEzLCJQZG90YWNjZW50Iiw3NzY2LCJQZWN5cmlsbGljIiwxMDU1LCJQZWhhcm1lbmlhbiIsMTM1NCwiUGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTAsIlBoaSIsOTM0LCJQaG9vayIsNDIwLCJQaSIsOTI4LCJQaXdyYXJtZW5pYW4iLDEzNjMsIlBtb25vc3BhY2UiLDY1MzI4LCJQc2kiLDkzNiwiUHNpY3lyaWxsaWMiLDExMzYsIlBzbWFsbCIsNjMzNDQsIlEiLDgxLCJRY2lyY2xlIiw5NDE0LCJRbW9ub3NwYWNlIiw2NTMyOSwiUXNtYWxsIiw2MzM0NSwiUiIsODIsIlJhYXJtZW5pYW4iLDEzNTYsIlJhY3V0ZSIsMzQwLCJSY2Fyb24iLDM0NCwiUmNlZGlsbGEiLDM0MiwiUmNpcmNsZSIsOTQxNSwiUmNvbW1hYWNjZW50IiwzNDIsIlJkYmxncmF2ZSIsNTI4LCJSZG90YWNjZW50Iiw3NzY4LCJSZG90YmVsb3ciLDc3NzAsIlJkb3RiZWxvd21hY3JvbiIsNzc3MiwiUmVoYXJtZW5pYW4iLDEzNjAsIlJmcmFrdHVyIiw4NDc2LCJSaG8iLDkyOSwiUmluZ3NtYWxsIiw2MzIyOCwiUmludmVydGVkYnJldmUiLDUzMCwiUmxpbmViZWxvdyIsNzc3NCwiUm1vbm9zcGFjZSIsNjUzMzAsIlJzbWFsbCIsNjMzNDYsIlJzbWFsbGludmVydGVkIiw2NDEsIlJzbWFsbGludmVydGVkc3VwZXJpb3IiLDY5NCwiUyIsODMsIlNGMDEwMDAwIiw5NDg0LCJTRjAyMDAwMCIsOTQ5MiwiU0YwMzAwMDAiLDk0ODgsIlNGMDQwMDAwIiw5NDk2LCJTRjA1MDAwMCIsOTUzMiwiU0YwNjAwMDAiLDk1MTYsIlNGMDcwMDAwIiw5NTI0LCJTRjA4MDAwMCIsOTUwMCwiU0YwOTAwMDAiLDk1MDgsIlNGMTAwMDAwIiw5NDcyLCJTRjExMDAwMCIsOTQ3NCwiU0YxOTAwMDAiLDk1NjksIlNGMjAwMDAwIiw5NTcwLCJTRjIxMDAwMCIsOTU1OCwiU0YyMjAwMDAiLDk1NTcsIlNGMjMwMDAwIiw5NTcxLCJTRjI0MDAwMCIsOTU1MywiU0YyNTAwMDAiLDk1NTksIlNGMjYwMDAwIiw5NTY1LCJTRjI3MDAwMCIsOTU2NCwiU0YyODAwMDAiLDk1NjMsIlNGMzYwMDAwIiw5NTY2LCJTRjM3MDAwMCIsOTU2NywiU0YzODAwMDAiLDk1NjIsIlNGMzkwMDAwIiw5NTU2LCJTRjQwMDAwMCIsOTU3NywiU0Y0MTAwMDAiLDk1NzQsIlNGNDIwMDAwIiw5NTY4LCJTRjQzMDAwMCIsOTU1MiwiU0Y0NDAwMDAiLDk1ODAsIlNGNDUwMDAwIiw5NTc1LCJTRjQ2MDAwMCIsOTU3NiwiU0Y0NzAwMDAiLDk1NzIsIlNGNDgwMDAwIiw5NTczLCJTRjQ5MDAwMCIsOTU2MSwiU0Y1MDAwMDAiLDk1NjAsIlNGNTEwMDAwIiw5NTU0LCJTRjUyMDAwMCIsOTU1NSwiU0Y1MzAwMDAiLDk1NzksIlNGNTQwMDAwIiw5NTc4LCJTYWN1dGUiLDM0NiwiU2FjdXRlZG90YWNjZW50Iiw3NzgwLCJTYW1waWdyZWVrIiw5OTIsIlNjYXJvbiIsMzUyLCJTY2Fyb25kb3RhY2NlbnQiLDc3ODIsIlNjYXJvbnNtYWxsIiw2MzIyOSwiU2NlZGlsbGEiLDM1MCwiU2Nod2EiLDM5OSwiU2Nod2FjeXJpbGxpYyIsMTI0MCwiU2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQyLCJTY2lyY2xlIiw5NDE2LCJTY2lyY3VtZmxleCIsMzQ4LCJTY29tbWFhY2NlbnQiLDUzNiwiU2RvdGFjY2VudCIsNzc3NiwiU2RvdGJlbG93Iiw3Nzc4LCJTZG90YmVsb3dkb3RhY2NlbnQiLDc3ODQsIlNlaGFybWVuaWFuIiwxMzU3LCJTZXZlbnJvbWFuIiw4NTUwLCJTaGFhcm1lbmlhbiIsMTM1MSwiU2hhY3lyaWxsaWMiLDEwNjQsIlNoY2hhY3lyaWxsaWMiLDEwNjUsIlNoZWljb3B0aWMiLDk5NCwiU2hoYWN5cmlsbGljIiwxMjEwLCJTaGltYWNvcHRpYyIsMTAwNCwiU2lnbWEiLDkzMSwiU2l4cm9tYW4iLDg1NDksIlNtb25vc3BhY2UiLDY1MzMxLCJTb2Z0c2lnbmN5cmlsbGljIiwxMDY4LCJTc21hbGwiLDYzMzQ3LCJTdGlnbWFncmVlayIsOTg2LCJUIiw4NCwiVGF1Iiw5MzIsIlRiYXIiLDM1OCwiVGNhcm9uIiwzNTYsIlRjZWRpbGxhIiwzNTQsIlRjaXJjbGUiLDk0MTcsIlRjaXJjdW1mbGV4YmVsb3ciLDc3OTIsIlRjb21tYWFjY2VudCIsMzU0LCJUZG90YWNjZW50Iiw3Nzg2LCJUZG90YmVsb3ciLDc3ODgsIlRlY3lyaWxsaWMiLDEwNTgsIlRlZGVzY2VuZGVyY3lyaWxsaWMiLDExOTYsIlRlbnJvbWFuIiw4NTUzLCJUZXRzZWN5cmlsbGljIiwxMjA0LCJUaGV0YSIsOTIwLCJUaG9vayIsNDI4LCJUaG9ybiIsMjIyLCJUaG9ybnNtYWxsIiw2MzQ4NiwiVGhyZWVyb21hbiIsODU0NiwiVGlsZGVzbWFsbCIsNjMyMzAsIlRpd25hcm1lbmlhbiIsMTM1OSwiVGxpbmViZWxvdyIsNzc5MCwiVG1vbm9zcGFjZSIsNjUzMzIsIlRvYXJtZW5pYW4iLDEzMzcsIlRvbmVmaXZlIiw0NDQsIlRvbmVzaXgiLDM4OCwiVG9uZXR3byIsNDIzLCJUcmV0cm9mbGV4aG9vayIsNDMwLCJUc2VjeXJpbGxpYyIsMTA2MiwiVHNoZWN5cmlsbGljIiwxMDM1LCJUc21hbGwiLDYzMzQ4LCJUd2VsdmVyb21hbiIsODU1NSwiVHdvcm9tYW4iLDg1NDUsIlUiLDg1LCJVYWN1dGUiLDIxOCwiVWFjdXRlc21hbGwiLDYzNDgyLCJVYnJldmUiLDM2NCwiVWNhcm9uIiw0NjcsIlVjaXJjbGUiLDk0MTgsIlVjaXJjdW1mbGV4IiwyMTksIlVjaXJjdW1mbGV4YmVsb3ciLDc3OTgsIlVjaXJjdW1mbGV4c21hbGwiLDYzNDgzLCJVY3lyaWxsaWMiLDEwNTksIlVkYmxhY3V0ZSIsMzY4LCJVZGJsZ3JhdmUiLDUzMiwiVWRpZXJlc2lzIiwyMjAsIlVkaWVyZXNpc2FjdXRlIiw0NzEsIlVkaWVyZXNpc2JlbG93Iiw3Nzk0LCJVZGllcmVzaXNjYXJvbiIsNDczLCJVZGllcmVzaXNjeXJpbGxpYyIsMTI2NCwiVWRpZXJlc2lzZ3JhdmUiLDQ3NSwiVWRpZXJlc2lzbWFjcm9uIiw0NjksIlVkaWVyZXNpc3NtYWxsIiw2MzQ4NCwiVWRvdGJlbG93Iiw3OTA4LCJVZ3JhdmUiLDIxNywiVWdyYXZlc21hbGwiLDYzNDgxLCJVaG9va2Fib3ZlIiw3OTEwLCJVaG9ybiIsNDMxLCJVaG9ybmFjdXRlIiw3OTEyLCJVaG9ybmRvdGJlbG93Iiw3OTIwLCJVaG9ybmdyYXZlIiw3OTE0LCJVaG9ybmhvb2thYm92ZSIsNzkxNiwiVWhvcm50aWxkZSIsNzkxOCwiVWh1bmdhcnVtbGF1dCIsMzY4LCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjYsIlVpbnZlcnRlZGJyZXZlIiw1MzQsIlVrY3lyaWxsaWMiLDExNDQsIlVtYWNyb24iLDM2MiwiVW1hY3JvbmN5cmlsbGljIiwxMjYyLCJVbWFjcm9uZGllcmVzaXMiLDc4MDIsIlVtb25vc3BhY2UiLDY1MzMzLCJVb2dvbmVrIiwzNzAsIlVwc2lsb24iLDkzMywiVXBzaWxvbjEiLDk3OCwiVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrIiw5NzksIlVwc2lsb25hZnJpY2FuIiw0MzMsIlVwc2lsb25kaWVyZXNpcyIsOTM5LCJVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsiLDk4MCwiVXBzaWxvbmhvb2tzeW1ib2wiLDk3OCwiVXBzaWxvbnRvbm9zIiw5MTAsIlVyaW5nIiwzNjYsIlVzaG9ydGN5cmlsbGljIiwxMDM4LCJVc21hbGwiLDYzMzQ5LCJVc3RyYWlnaHRjeXJpbGxpYyIsMTE5OCwiVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMiLDEyMDAsIlV0aWxkZSIsMzYwLCJVdGlsZGVhY3V0ZSIsNzgwMCwiVXRpbGRlYmVsb3ciLDc3OTYsIlYiLDg2LCJWY2lyY2xlIiw5NDE5LCJWZG90YmVsb3ciLDc4MDYsIlZlY3lyaWxsaWMiLDEwNDIsIlZld2FybWVuaWFuIiwxMzU4LCJWaG9vayIsNDM0LCJWbW9ub3NwYWNlIiw2NTMzNCwiVm9hcm1lbmlhbiIsMTM1MiwiVnNtYWxsIiw2MzM1MCwiVnRpbGRlIiw3ODA0LCJXIiw4NywiV2FjdXRlIiw3ODEwLCJXY2lyY2xlIiw5NDIwLCJXY2lyY3VtZmxleCIsMzcyLCJXZGllcmVzaXMiLDc4MTIsIldkb3RhY2NlbnQiLDc4MTQsIldkb3RiZWxvdyIsNzgxNiwiV2dyYXZlIiw3ODA4LCJXbW9ub3NwYWNlIiw2NTMzNSwiV3NtYWxsIiw2MzM1MSwiWCIsODgsIlhjaXJjbGUiLDk0MjEsIlhkaWVyZXNpcyIsNzgyMCwiWGRvdGFjY2VudCIsNzgxOCwiWGVoYXJtZW5pYW4iLDEzNDEsIlhpIiw5MjYsIlhtb25vc3BhY2UiLDY1MzM2LCJYc21hbGwiLDYzMzUyLCJZIiw4OSwiWWFjdXRlIiwyMjEsIllhY3V0ZXNtYWxsIiw2MzQ4NSwiWWF0Y3lyaWxsaWMiLDExMjIsIlljaXJjbGUiLDk0MjIsIlljaXJjdW1mbGV4IiwzNzQsIllkaWVyZXNpcyIsMzc2LCJZZGllcmVzaXNzbWFsbCIsNjM0ODcsIllkb3RhY2NlbnQiLDc4MjIsIllkb3RiZWxvdyIsNzkyNCwiWWVyaWN5cmlsbGljIiwxMDY3LCJZZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MiwiWWdyYXZlIiw3OTIyLCJZaG9vayIsNDM1LCJZaG9va2Fib3ZlIiw3OTI2LCJZaWFybWVuaWFuIiwxMzQ5LCJZaWN5cmlsbGljIiwxMDMxLCJZaXduYXJtZW5pYW4iLDEzNjIsIlltb25vc3BhY2UiLDY1MzM3LCJZc21hbGwiLDYzMzUzLCJZdGlsZGUiLDc5MjgsIll1c2JpZ2N5cmlsbGljIiwxMTMwLCJZdXNiaWdpb3RpZmllZGN5cmlsbGljIiwxMTMyLCJZdXNsaXR0bGVjeXJpbGxpYyIsMTEyNiwiWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyIsMTEyOCwiWiIsOTAsIlphYXJtZW5pYW4iLDEzMzQsIlphY3V0ZSIsMzc3LCJaY2Fyb24iLDM4MSwiWmNhcm9uc21hbGwiLDYzMjMxLCJaY2lyY2xlIiw5NDIzLCJaY2lyY3VtZmxleCIsNzgyNCwiWmRvdCIsMzc5LCJaZG90YWNjZW50IiwzNzksIlpkb3RiZWxvdyIsNzgyNiwiWmVjeXJpbGxpYyIsMTA0NywiWmVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NiwiWmVkaWVyZXNpc2N5cmlsbGljIiwxMjQ2LCJaZXRhIiw5MTgsIlpoZWFybWVuaWFuIiwxMzM4LCJaaGVicmV2ZWN5cmlsbGljIiwxMjE3LCJaaGVjeXJpbGxpYyIsMTA0NiwiWmhlZGVzY2VuZGVyY3lyaWxsaWMiLDExNzQsIlpoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDQsIlpsaW5lYmVsb3ciLDc4MjgsIlptb25vc3BhY2UiLDY1MzM4LCJac21hbGwiLDYzMzU0LCJac3Ryb2tlIiw0MzcsImEiLDk3LCJhYWJlbmdhbGkiLDI0MzgsImFhY3V0ZSIsMjI1LCJhYWRldmEiLDIzMTAsImFhZ3VqYXJhdGkiLDI2OTQsImFhZ3VybXVraGkiLDI1NjYsImFhbWF0cmFndXJtdWtoaSIsMjYyMiwiYWFydXNxdWFyZSIsMTMwNTksImFhdm93ZWxzaWduYmVuZ2FsaSIsMjQ5NCwiYWF2b3dlbHNpZ25kZXZhIiwyMzY2LCJhYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzUwLCJhYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4iLDEzNzUsImFiYnJldmlhdGlvbnNpZ25kZXZhIiwyNDE2LCJhYmVuZ2FsaSIsMjQzNywiYWJvcG9tb2ZvIiwxMjU3MCwiYWJyZXZlIiwyNTksImFicmV2ZWFjdXRlIiw3ODU1LCJhYnJldmVjeXJpbGxpYyIsMTIzMywiYWJyZXZlZG90YmVsb3ciLDc4NjMsImFicmV2ZWdyYXZlIiw3ODU3LCJhYnJldmVob29rYWJvdmUiLDc4NTksImFicmV2ZXRpbGRlIiw3ODYxLCJhY2Fyb24iLDQ2MiwiYWNpcmNsZSIsOTQyNCwiYWNpcmN1bWZsZXgiLDIyNiwiYWNpcmN1bWZsZXhhY3V0ZSIsNzg0NSwiYWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg1MywiYWNpcmN1bWZsZXhncmF2ZSIsNzg0NywiYWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NDksImFjaXJjdW1mbGV4dGlsZGUiLDc4NTEsImFjdXRlIiwxODAsImFjdXRlYmVsb3djbWIiLDc5MSwiYWN1dGVjbWIiLDc2OSwiYWN1dGVjb21iIiw3NjksImFjdXRlZGV2YSIsMjM4OCwiYWN1dGVsb3dtb2QiLDcxOSwiYWN1dGV0b25lY21iIiw4MzMsImFjeXJpbGxpYyIsMTA3MiwiYWRibGdyYXZlIiw1MTMsImFkZGFrZ3VybXVraGkiLDI2NzMsImFkZXZhIiwyMzA5LCJhZGllcmVzaXMiLDIyOCwiYWRpZXJlc2lzY3lyaWxsaWMiLDEyMzUsImFkaWVyZXNpc21hY3JvbiIsNDc5LCJhZG90YmVsb3ciLDc4NDEsImFkb3RtYWNyb24iLDQ4MSwiYWUiLDIzMCwiYWVhY3V0ZSIsNTA5LCJhZWtvcmVhbiIsMTI2MjQsImFlbWFjcm9uIiw0ODMsImFmaWkwMDIwOCIsODIxMywiYWZpaTA4OTQxIiw4MzU2LCJhZmlpMTAwMTciLDEwNDAsImFmaWkxMDAxOCIsMTA0MSwiYWZpaTEwMDE5IiwxMDQyLCJhZmlpMTAwMjAiLDEwNDMsImFmaWkxMDAyMSIsMTA0NCwiYWZpaTEwMDIyIiwxMDQ1LCJhZmlpMTAwMjMiLDEwMjUsImFmaWkxMDAyNCIsMTA0NiwiYWZpaTEwMDI1IiwxMDQ3LCJhZmlpMTAwMjYiLDEwNDgsImFmaWkxMDAyNyIsMTA0OSwiYWZpaTEwMDI4IiwxMDUwLCJhZmlpMTAwMjkiLDEwNTEsImFmaWkxMDAzMCIsMTA1MiwiYWZpaTEwMDMxIiwxMDUzLCJhZmlpMTAwMzIiLDEwNTQsImFmaWkxMDAzMyIsMTA1NSwiYWZpaTEwMDM0IiwxMDU2LCJhZmlpMTAwMzUiLDEwNTcsImFmaWkxMDAzNiIsMTA1OCwiYWZpaTEwMDM3IiwxMDU5LCJhZmlpMTAwMzgiLDEwNjAsImFmaWkxMDAzOSIsMTA2MSwiYWZpaTEwMDQwIiwxMDYyLCJhZmlpMTAwNDEiLDEwNjMsImFmaWkxMDA0MiIsMTA2NCwiYWZpaTEwMDQzIiwxMDY1LCJhZmlpMTAwNDQiLDEwNjYsImFmaWkxMDA0NSIsMTA2NywiYWZpaTEwMDQ2IiwxMDY4LCJhZmlpMTAwNDciLDEwNjksImFmaWkxMDA0OCIsMTA3MCwiYWZpaTEwMDQ5IiwxMDcxLCJhZmlpMTAwNTAiLDExNjgsImFmaWkxMDA1MSIsMTAyNiwiYWZpaTEwMDUyIiwxMDI3LCJhZmlpMTAwNTMiLDEwMjgsImFmaWkxMDA1NCIsMTAyOSwiYWZpaTEwMDU1IiwxMDMwLCJhZmlpMTAwNTYiLDEwMzEsImFmaWkxMDA1NyIsMTAzMiwiYWZpaTEwMDU4IiwxMDMzLCJhZmlpMTAwNTkiLDEwMzQsImFmaWkxMDA2MCIsMTAzNSwiYWZpaTEwMDYxIiwxMDM2LCJhZmlpMTAwNjIiLDEwMzgsImFmaWkxMDA2MyIsNjMxNzIsImFmaWkxMDA2NCIsNjMxNzMsImFmaWkxMDA2NSIsMTA3MiwiYWZpaTEwMDY2IiwxMDczLCJhZmlpMTAwNjciLDEwNzQsImFmaWkxMDA2OCIsMTA3NSwiYWZpaTEwMDY5IiwxMDc2LCJhZmlpMTAwNzAiLDEwNzcsImFmaWkxMDA3MSIsMTEwNSwiYWZpaTEwMDcyIiwxMDc4LCJhZmlpMTAwNzMiLDEwNzksImFmaWkxMDA3NCIsMTA4MCwiYWZpaTEwMDc1IiwxMDgxLCJhZmlpMTAwNzYiLDEwODIsImFmaWkxMDA3NyIsMTA4MywiYWZpaTEwMDc4IiwxMDg0LCJhZmlpMTAwNzkiLDEwODUsImFmaWkxMDA4MCIsMTA4NiwiYWZpaTEwMDgxIiwxMDg3LCJhZmlpMTAwODIiLDEwODgsImFmaWkxMDA4MyIsMTA4OSwiYWZpaTEwMDg0IiwxMDkwLCJhZmlpMTAwODUiLDEwOTEsImFmaWkxMDA4NiIsMTA5MiwiYWZpaTEwMDg3IiwxMDkzLCJhZmlpMTAwODgiLDEwOTQsImFmaWkxMDA4OSIsMTA5NSwiYWZpaTEwMDkwIiwxMDk2LCJhZmlpMTAwOTEiLDEwOTcsImFmaWkxMDA5MiIsMTA5OCwiYWZpaTEwMDkzIiwxMDk5LCJhZmlpMTAwOTQiLDExMDAsImFmaWkxMDA5NSIsMTEwMSwiYWZpaTEwMDk2IiwxMTAyLCJhZmlpMTAwOTciLDExMDMsImFmaWkxMDA5OCIsMTE2OSwiYWZpaTEwMDk5IiwxMTA2LCJhZmlpMTAxMDAiLDExMDcsImFmaWkxMDEwMSIsMTEwOCwiYWZpaTEwMTAyIiwxMTA5LCJhZmlpMTAxMDMiLDExMTAsImFmaWkxMDEwNCIsMTExMSwiYWZpaTEwMTA1IiwxMTEyLCJhZmlpMTAxMDYiLDExMTMsImFmaWkxMDEwNyIsMTExNCwiYWZpaTEwMTA4IiwxMTE1LCJhZmlpMTAxMDkiLDExMTYsImFmaWkxMDExMCIsMTExOCwiYWZpaTEwMTQ1IiwxMDM5LCJhZmlpMTAxNDYiLDExMjIsImFmaWkxMDE0NyIsMTEzOCwiYWZpaTEwMTQ4IiwxMTQwLCJhZmlpMTAxOTIiLDYzMTc0LCJhZmlpMTAxOTMiLDExMTksImFmaWkxMDE5NCIsMTEyMywiYWZpaTEwMTk1IiwxMTM5LCJhZmlpMTAxOTYiLDExNDEsImFmaWkxMDgzMSIsNjMxNzUsImFmaWkxMDgzMiIsNjMxNzYsImFmaWkxMDg0NiIsMTI0MSwiYWZpaTI5OSIsODIwNiwiYWZpaTMwMCIsODIwNywiYWZpaTMwMSIsODIwNSwiYWZpaTU3MzgxIiwxNjQyLCJhZmlpNTczODgiLDE1NDgsImFmaWk1NzM5MiIsMTYzMiwiYWZpaTU3MzkzIiwxNjMzLCJhZmlpNTczOTQiLDE2MzQsImFmaWk1NzM5NSIsMTYzNSwiYWZpaTU3Mzk2IiwxNjM2LCJhZmlpNTczOTciLDE2MzcsImFmaWk1NzM5OCIsMTYzOCwiYWZpaTU3Mzk5IiwxNjM5LCJhZmlpNTc0MDAiLDE2NDAsImFmaWk1NzQwMSIsMTY0MSwiYWZpaTU3NDAzIiwxNTYzLCJhZmlpNTc0MDciLDE1NjcsImFmaWk1NzQwOSIsMTU2OSwiYWZpaTU3NDEwIiwxNTcwLCJhZmlpNTc0MTEiLDE1NzEsImFmaWk1NzQxMiIsMTU3MiwiYWZpaTU3NDEzIiwxNTczLCJhZmlpNTc0MTQiLDE1NzQsImFmaWk1NzQxNSIsMTU3NSwiYWZpaTU3NDE2IiwxNTc2LCJhZmlpNTc0MTciLDE1NzcsImFmaWk1NzQxOCIsMTU3OCwiYWZpaTU3NDE5IiwxNTc5LCJhZmlpNTc0MjAiLDE1ODAsImFmaWk1NzQyMSIsMTU4MSwiYWZpaTU3NDIyIiwxNTgyLCJhZmlpNTc0MjMiLDE1ODMsImFmaWk1NzQyNCIsMTU4NCwiYWZpaTU3NDI1IiwxNTg1LCJhZmlpNTc0MjYiLDE1ODYsImFmaWk1NzQyNyIsMTU4NywiYWZpaTU3NDI4IiwxNTg4LCJhZmlpNTc0MjkiLDE1ODksImFmaWk1NzQzMCIsMTU5MCwiYWZpaTU3NDMxIiwxNTkxLCJhZmlpNTc0MzIiLDE1OTIsImFmaWk1NzQzMyIsMTU5MywiYWZpaTU3NDM0IiwxNTk0LCJhZmlpNTc0NDAiLDE2MDAsImFmaWk1NzQ0MSIsMTYwMSwiYWZpaTU3NDQyIiwxNjAyLCJhZmlpNTc0NDMiLDE2MDMsImFmaWk1NzQ0NCIsMTYwNCwiYWZpaTU3NDQ1IiwxNjA1LCJhZmlpNTc0NDYiLDE2MDYsImFmaWk1NzQ0OCIsMTYwOCwiYWZpaTU3NDQ5IiwxNjA5LCJhZmlpNTc0NTAiLDE2MTAsImFmaWk1NzQ1MSIsMTYxMSwiYWZpaTU3NDUyIiwxNjEyLCJhZmlpNTc0NTMiLDE2MTMsImFmaWk1NzQ1NCIsMTYxNCwiYWZpaTU3NDU1IiwxNjE1LCJhZmlpNTc0NTYiLDE2MTYsImFmaWk1NzQ1NyIsMTYxNywiYWZpaTU3NDU4IiwxNjE4LCJhZmlpNTc0NzAiLDE2MDcsImFmaWk1NzUwNSIsMTcwMCwiYWZpaTU3NTA2IiwxNjYyLCJhZmlpNTc1MDciLDE2NzAsImFmaWk1NzUwOCIsMTY4OCwiYWZpaTU3NTA5IiwxNzExLCJhZmlpNTc1MTEiLDE2NTcsImFmaWk1NzUxMiIsMTY3MiwiYWZpaTU3NTEzIiwxNjgxLCJhZmlpNTc1MTQiLDE3MjIsImFmaWk1NzUxOSIsMTc0NiwiYWZpaTU3NTM0IiwxNzQ5LCJhZmlpNTc2MzYiLDgzNjIsImFmaWk1NzY0NSIsMTQ3MCwiYWZpaTU3NjU4IiwxNDc1LCJhZmlpNTc2NjQiLDE0ODgsImFmaWk1NzY2NSIsMTQ4OSwiYWZpaTU3NjY2IiwxNDkwLCJhZmlpNTc2NjciLDE0OTEsImFmaWk1NzY2OCIsMTQ5MiwiYWZpaTU3NjY5IiwxNDkzLCJhZmlpNTc2NzAiLDE0OTQsImFmaWk1NzY3MSIsMTQ5NSwiYWZpaTU3NjcyIiwxNDk2LCJhZmlpNTc2NzMiLDE0OTcsImFmaWk1NzY3NCIsMTQ5OCwiYWZpaTU3Njc1IiwxNDk5LCJhZmlpNTc2NzYiLDE1MDAsImFmaWk1NzY3NyIsMTUwMSwiYWZpaTU3Njc4IiwxNTAyLCJhZmlpNTc2NzkiLDE1MDMsImFmaWk1NzY4MCIsMTUwNCwiYWZpaTU3NjgxIiwxNTA1LCJhZmlpNTc2ODIiLDE1MDYsImFmaWk1NzY4MyIsMTUwNywiYWZpaTU3Njg0IiwxNTA4LCJhZmlpNTc2ODUiLDE1MDksImFmaWk1NzY4NiIsMTUxMCwiYWZpaTU3Njg3IiwxNTExLCJhZmlpNTc2ODgiLDE1MTIsImFmaWk1NzY4OSIsMTUxMywiYWZpaTU3NjkwIiwxNTE0LCJhZmlpNTc2OTQiLDY0Mjk4LCJhZmlpNTc2OTUiLDY0Mjk5LCJhZmlpNTc3MDAiLDY0MzMxLCJhZmlpNTc3MDUiLDY0Mjg3LCJhZmlpNTc3MTYiLDE1MjAsImFmaWk1NzcxNyIsMTUyMSwiYWZpaTU3NzE4IiwxNTIyLCJhZmlpNTc3MjMiLDY0MzA5LCJhZmlpNTc3OTMiLDE0NjAsImFmaWk1Nzc5NCIsMTQ2MSwiYWZpaTU3Nzk1IiwxNDYyLCJhZmlpNTc3OTYiLDE0NjcsImFmaWk1Nzc5NyIsMTQ2NCwiYWZpaTU3Nzk4IiwxNDYzLCJhZmlpNTc3OTkiLDE0NTYsImFmaWk1NzgwMCIsMTQ1OCwiYWZpaTU3ODAxIiwxNDU3LCJhZmlpNTc4MDIiLDE0NTksImFmaWk1NzgwMyIsMTQ3NCwiYWZpaTU3ODA0IiwxNDczLCJhZmlpNTc4MDYiLDE0NjUsImFmaWk1NzgwNyIsMTQ2OCwiYWZpaTU3ODM5IiwxNDY5LCJhZmlpNTc4NDEiLDE0NzEsImFmaWk1Nzg0MiIsMTQ3MiwiYWZpaTU3OTI5Iiw3MDAsImFmaWk2MTI0OCIsODQ1MywiYWZpaTYxMjg5Iiw4NDY3LCJhZmlpNjEzNTIiLDg0NzAsImFmaWk2MTU3MyIsODIzNiwiYWZpaTYxNTc0Iiw4MjM3LCJhZmlpNjE1NzUiLDgyMzgsImFmaWk2MTY2NCIsODIwNCwiYWZpaTYzMTY3IiwxNjQ1LCJhZmlpNjQ5MzciLDcwMSwiYWdyYXZlIiwyMjQsImFndWphcmF0aSIsMjY5MywiYWd1cm11a2hpIiwyNTY1LCJhaGlyYWdhbmEiLDEyMzU0LCJhaG9va2Fib3ZlIiw3ODQzLCJhaWJlbmdhbGkiLDI0NDgsImFpYm9wb21vZm8iLDEyNTc0LCJhaWRldmEiLDIzMjAsImFpZWN5cmlsbGljIiwxMjM3LCJhaWd1amFyYXRpIiwyNzA0LCJhaWd1cm11a2hpIiwyNTc2LCJhaW1hdHJhZ3VybXVraGkiLDI2MzIsImFpbmFyYWJpYyIsMTU5MywiYWluZmluYWxhcmFiaWMiLDY1MjI2LCJhaW5pbml0aWFsYXJhYmljIiw2NTIyNywiYWlubWVkaWFsYXJhYmljIiw2NTIyOCwiYWludmVydGVkYnJldmUiLDUxNSwiYWl2b3dlbHNpZ25iZW5nYWxpIiwyNTA0LCJhaXZvd2Vsc2lnbmRldmEiLDIzNzYsImFpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjAsImFrYXRha2FuYSIsMTI0NTAsImFrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTMsImFrb3JlYW4iLDEyNjIzLCJhbGVmIiwxNDg4LCJhbGVmYXJhYmljIiwxNTc1LCJhbGVmZGFnZXNoaGVicmV3Iiw2NDMwNCwiYWxlZmZpbmFsYXJhYmljIiw2NTE2NiwiYWxlZmhhbXphYWJvdmVhcmFiaWMiLDE1NzEsImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU2LCJhbGVmaGFtemFiZWxvd2FyYWJpYyIsMTU3MywiYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUxNjAsImFsZWZoZWJyZXciLDE0ODgsImFsZWZsYW1lZGhlYnJldyIsNjQzMzUsImFsZWZtYWRkYWFib3ZlYXJhYmljIiwxNTcwLCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTE1NCwiYWxlZm1ha3N1cmFhcmFiaWMiLDE2MDksImFsZWZtYWtzdXJhZmluYWxhcmFiaWMiLDY1MjY0LCJhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMiLDY1MjY3LCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyIsNjUyNjgsImFsZWZwYXRhaGhlYnJldyIsNjQzMDIsImFsZWZxYW1hdHNoZWJyZXciLDY0MzAzLCJhbGVwaCIsODUwMSwiYWxsZXF1YWwiLDg3ODAsImFscGhhIiw5NDUsImFscGhhdG9ub3MiLDk0MCwiYW1hY3JvbiIsMjU3LCJhbW9ub3NwYWNlIiw2NTM0NSwiYW1wZXJzYW5kIiwzOCwiYW1wZXJzYW5kbW9ub3NwYWNlIiw2NTI4NiwiYW1wZXJzYW5kc21hbGwiLDYzMjcwLCJhbXNxdWFyZSIsMTMyNTAsImFuYm9wb21vZm8iLDEyNTc4LCJhbmdib3BvbW9mbyIsMTI1ODAsImFuZ2JyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nYnJhY2tldHJpZ2h0IiwxMjI5NywiYW5na2hhbmtodXRoYWkiLDM2NzQsImFuZ2xlIiw4NzM2LCJhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NywiYW5nbGVicmFja2V0cmlnaHQiLDEyMjk3LCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4OCwiYW5nbGVsZWZ0Iiw5MDAxLCJhbmdsZXJpZ2h0Iiw5MDAyLCJhbmdzdHJvbSIsODQ5MSwiYW5vdGVsZWlhIiw5MDMsImFudWRhdHRhZGV2YSIsMjM4NiwiYW51c3ZhcmFiZW5nYWxpIiwyNDM0LCJhbnVzdmFyYWRldmEiLDIzMDYsImFudXN2YXJhZ3VqYXJhdGkiLDI2OTAsImFvZ29uZWsiLDI2MSwiYXBhYXRvc3F1YXJlIiwxMzA1NiwiYXBhcmVuIiw5MzcyLCJhcG9zdHJvcGhlYXJtZW5pYW4iLDEzNzAsImFwb3N0cm9waGVtb2QiLDcwMCwiYXBwbGUiLDYzNzQzLCJhcHByb2FjaGVzIiw4Nzg0LCJhcHByb3hlcXVhbCIsODc3NiwiYXBwcm94ZXF1YWxvcmltYWdlIiw4Nzg2LCJhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3NzMsImFyYWVhZWtvcmVhbiIsMTI2ODYsImFyYWVha29yZWFuIiwxMjY4NSwiYXJjIiw4OTc4LCJhcmlnaHRoYWxmcmluZyIsNzgzNCwiYXJpbmciLDIyOSwiYXJpbmdhY3V0ZSIsNTA3LCJhcmluZ2JlbG93Iiw3NjgxLCJhcnJvd2JvdGgiLDg1OTYsImFycm93ZGFzaGRvd24iLDg2NzUsImFycm93ZGFzaGxlZnQiLDg2NzIsImFycm93ZGFzaHJpZ2h0Iiw4Njc0LCJhcnJvd2Rhc2h1cCIsODY3MywiYXJyb3dkYmxib3RoIiw4NjYwLCJhcnJvd2RibGRvd24iLDg2NTksImFycm93ZGJsbGVmdCIsODY1NiwiYXJyb3dkYmxyaWdodCIsODY1OCwiYXJyb3dkYmx1cCIsODY1NywiYXJyb3dkb3duIiw4NTk1LCJhcnJvd2Rvd25sZWZ0Iiw4NjAxLCJhcnJvd2Rvd25yaWdodCIsODYwMCwiYXJyb3dkb3dud2hpdGUiLDg2ODEsImFycm93aGVhZGRvd25tb2QiLDcwOSwiYXJyb3doZWFkbGVmdG1vZCIsNzA2LCJhcnJvd2hlYWRyaWdodG1vZCIsNzA3LCJhcnJvd2hlYWR1cG1vZCIsNzA4LCJhcnJvd2hvcml6ZXgiLDYzNzE5LCJhcnJvd2xlZnQiLDg1OTIsImFycm93bGVmdGRibCIsODY1NiwiYXJyb3dsZWZ0ZGJsc3Ryb2tlIiw4NjUzLCJhcnJvd2xlZnRvdmVycmlnaHQiLDg2NDYsImFycm93bGVmdHdoaXRlIiw4Njc4LCJhcnJvd3JpZ2h0Iiw4NTk0LCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlIiw4NjU1LCJhcnJvd3JpZ2h0aGVhdnkiLDEwMTQyLCJhcnJvd3JpZ2h0b3ZlcmxlZnQiLDg2NDQsImFycm93cmlnaHR3aGl0ZSIsODY4MCwiYXJyb3d0YWJsZWZ0Iiw4Njc2LCJhcnJvd3RhYnJpZ2h0Iiw4Njc3LCJhcnJvd3VwIiw4NTkzLCJhcnJvd3VwZG4iLDg1OTcsImFycm93dXBkbmJzZSIsODYxNiwiYXJyb3d1cGRvd25iYXNlIiw4NjE2LCJhcnJvd3VwbGVmdCIsODU5OCwiYXJyb3d1cGxlZnRvZmRvd24iLDg2NDUsImFycm93dXByaWdodCIsODU5OSwiYXJyb3d1cHdoaXRlIiw4Njc5LCJhcnJvd3ZlcnRleCIsNjM3MTgsImFzY2lpY2lyY3VtIiw5NCwiYXNjaWljaXJjdW1tb25vc3BhY2UiLDY1MzQyLCJhc2NpaXRpbGRlIiwxMjYsImFzY2lpdGlsZGVtb25vc3BhY2UiLDY1Mzc0LCJhc2NyaXB0Iiw1OTMsImFzY3JpcHR0dXJuZWQiLDU5NCwiYXNtYWxsaGlyYWdhbmEiLDEyMzUzLCJhc21hbGxrYXRha2FuYSIsMTI0NDksImFzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4MywiYXN0ZXJpc2siLDQyLCJhc3Rlcmlza2FsdG9uZWFyYWJpYyIsMTY0NSwiYXN0ZXJpc2thcmFiaWMiLDE2NDUsImFzdGVyaXNrbWF0aCIsODcyNywiYXN0ZXJpc2ttb25vc3BhY2UiLDY1MjkwLCJhc3Rlcmlza3NtYWxsIiw2NTEyMSwiYXN0ZXJpc20iLDgyNTgsImFzdXBlcmlvciIsNjMyMDksImFzeW1wdG90aWNhbGx5ZXF1YWwiLDg3NzEsImF0Iiw2NCwiYXRpbGRlIiwyMjcsImF0bW9ub3NwYWNlIiw2NTMxMiwiYXRzbWFsbCIsNjUxMzEsImF0dXJuZWQiLDU5MiwiYXViZW5nYWxpIiwyNDUyLCJhdWJvcG9tb2ZvIiwxMjU3NiwiYXVkZXZhIiwyMzI0LCJhdWd1amFyYXRpIiwyNzA4LCJhdWd1cm11a2hpIiwyNTgwLCJhdWxlbmd0aG1hcmtiZW5nYWxpIiwyNTE5LCJhdW1hdHJhZ3VybXVraGkiLDI2MzYsImF1dm93ZWxzaWduYmVuZ2FsaSIsMjUwOCwiYXV2b3dlbHNpZ25kZXZhIiwyMzgwLCJhdXZvd2Vsc2lnbmd1amFyYXRpIiwyNzY0LCJhdmFncmFoYWRldmEiLDIzNjUsImF5YmFybWVuaWFuIiwxMzc3LCJheWluIiwxNTA2LCJheWluYWx0b25laGVicmV3Iiw2NDI4OCwiYXlpbmhlYnJldyIsMTUwNiwiYiIsOTgsImJhYmVuZ2FsaSIsMjQ3NiwiYmFja3NsYXNoIiw5MiwiYmFja3NsYXNobW9ub3NwYWNlIiw2NTM0MCwiYmFkZXZhIiwyMzQ4LCJiYWd1amFyYXRpIiwyNzMyLCJiYWd1cm11a2hpIiwyNjA0LCJiYWhpcmFnYW5hIiwxMjQwMCwiYmFodHRoYWkiLDM2NDcsImJha2F0YWthbmEiLDEyNDk2LCJiYXIiLDEyNCwiYmFybW9ub3NwYWNlIiw2NTM3MiwiYmJvcG9tb2ZvIiwxMjU0OSwiYmNpcmNsZSIsOTQyNSwiYmRvdGFjY2VudCIsNzY4MywiYmRvdGJlbG93Iiw3Njg1LCJiZWFtZWRzaXh0ZWVudGhub3RlcyIsOTgzNiwiYmVjYXVzZSIsODc1NywiYmVjeXJpbGxpYyIsMTA3MywiYmVoYXJhYmljIiwxNTc2LCJiZWhmaW5hbGFyYWJpYyIsNjUxNjgsImJlaGluaXRpYWxhcmFiaWMiLDY1MTY5LCJiZWhpcmFnYW5hIiwxMjQwOSwiYmVobWVkaWFsYXJhYmljIiw2NTE3MCwiYmVobWVlbWluaXRpYWxhcmFiaWMiLDY0NjcxLCJiZWhtZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIwLCJiZWhub29uZmluYWxhcmFiaWMiLDY0NjIxLCJiZWthdGFrYW5hIiwxMjUwNSwiYmVuYXJtZW5pYW4iLDEzNzgsImJldCIsMTQ4OSwiYmV0YSIsOTQ2LCJiZXRhc3ltYm9sZ3JlZWsiLDk3NiwiYmV0ZGFnZXNoIiw2NDMwNSwiYmV0ZGFnZXNoaGVicmV3Iiw2NDMwNSwiYmV0aGVicmV3IiwxNDg5LCJiZXRyYWZlaGVicmV3Iiw2NDMzMiwiYmhhYmVuZ2FsaSIsMjQ3NywiYmhhZGV2YSIsMjM0OSwiYmhhZ3VqYXJhdGkiLDI3MzMsImJoYWd1cm11a2hpIiwyNjA1LCJiaG9vayIsNTk1LCJiaWhpcmFnYW5hIiwxMjQwMywiYmlrYXRha2FuYSIsMTI0OTksImJpbGFiaWFsY2xpY2siLDY2NCwiYmluZGlndXJtdWtoaSIsMjU2MiwiYmlydXNxdWFyZSIsMTMxMDUsImJsYWNrY2lyY2xlIiw5Njc5LCJibGFja2RpYW1vbmQiLDk2NzAsImJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUiLDk2NjAsImJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciIsOTY2OCwiYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSIsOTY2NCwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQiLDEyMzA0LCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4MywiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMwNSwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDg0LCJibGFja2xvd2VybGVmdHRyaWFuZ2xlIiw5Njk5LCJibGFja2xvd2VycmlnaHR0cmlhbmdsZSIsOTY5OCwiYmxhY2tyZWN0YW5nbGUiLDk2NDQsImJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXIiLDk2NTgsImJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlIiw5NjU0LCJibGFja3NtYWxsc3F1YXJlIiw5NjQyLCJibGFja3NtaWxpbmdmYWNlIiw5Nzg3LCJibGFja3NxdWFyZSIsOTYzMiwiYmxhY2tzdGFyIiw5NzMzLCJibGFja3VwcGVybGVmdHRyaWFuZ2xlIiw5NzAwLCJibGFja3VwcGVycmlnaHR0cmlhbmdsZSIsOTcwMSwiYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1MiwiYmxhY2t1cHBvaW50aW5ndHJpYW5nbGUiLDk2NTAsImJsYW5rIiw5MjUxLCJibGluZWJlbG93Iiw3Njg3LCJibG9jayIsOTYwOCwiYm1vbm9zcGFjZSIsNjUzNDYsImJvYmFpbWFpdGhhaSIsMzYxMCwiYm9oaXJhZ2FuYSIsMTI0MTIsImJva2F0YWthbmEiLDEyNTA4LCJicGFyZW4iLDkzNzMsImJxc3F1YXJlIiwxMzI1MSwiYnJhY2VleCIsNjM3MzIsImJyYWNlbGVmdCIsMTIzLCJicmFjZWxlZnRidCIsNjM3MzEsImJyYWNlbGVmdG1pZCIsNjM3MzAsImJyYWNlbGVmdG1vbm9zcGFjZSIsNjUzNzEsImJyYWNlbGVmdHNtYWxsIiw2NTExNSwiYnJhY2VsZWZ0dHAiLDYzNzI5LCJicmFjZWxlZnR2ZXJ0aWNhbCIsNjUwNzksImJyYWNlcmlnaHQiLDEyNSwiYnJhY2VyaWdodGJ0Iiw2Mzc0MiwiYnJhY2VyaWdodG1pZCIsNjM3NDEsImJyYWNlcmlnaHRtb25vc3BhY2UiLDY1MzczLCJicmFjZXJpZ2h0c21hbGwiLDY1MTE2LCJicmFjZXJpZ2h0dHAiLDYzNzQwLCJicmFjZXJpZ2h0dmVydGljYWwiLDY1MDgwLCJicmFja2V0bGVmdCIsOTEsImJyYWNrZXRsZWZ0YnQiLDYzNzI4LCJicmFja2V0bGVmdGV4Iiw2MzcyNywiYnJhY2tldGxlZnRtb25vc3BhY2UiLDY1MzM5LCJicmFja2V0bGVmdHRwIiw2MzcyNiwiYnJhY2tldHJpZ2h0Iiw5MywiYnJhY2tldHJpZ2h0YnQiLDYzNzM5LCJicmFja2V0cmlnaHRleCIsNjM3MzgsImJyYWNrZXRyaWdodG1vbm9zcGFjZSIsNjUzNDEsImJyYWNrZXRyaWdodHRwIiw2MzczNywiYnJldmUiLDcyOCwiYnJldmViZWxvd2NtYiIsODE0LCJicmV2ZWNtYiIsNzc0LCJicmV2ZWludmVydGVkYmVsb3djbWIiLDgxNSwiYnJldmVpbnZlcnRlZGNtYiIsNzg1LCJicmV2ZWludmVydGVkZG91YmxlY21iIiw4NjUsImJyaWRnZWJlbG93Y21iIiw4MTAsImJyaWRnZWludmVydGVkYmVsb3djbWIiLDgyNiwiYnJva2VuYmFyIiwxNjYsImJzdHJva2UiLDM4NCwiYnN1cGVyaW9yIiw2MzIxMCwiYnRvcGJhciIsMzg3LCJidWhpcmFnYW5hIiwxMjQwNiwiYnVrYXRha2FuYSIsMTI1MDIsImJ1bGxldCIsODIyNiwiYnVsbGV0aW52ZXJzZSIsOTY4OCwiYnVsbGV0b3BlcmF0b3IiLDg3MjksImJ1bGxzZXllIiw5Njc4LCJjIiw5OSwiY2Fhcm1lbmlhbiIsMTM5MCwiY2FiZW5nYWxpIiwyNDU4LCJjYWN1dGUiLDI2MywiY2FkZXZhIiwyMzMwLCJjYWd1amFyYXRpIiwyNzE0LCJjYWd1cm11a2hpIiwyNTg2LCJjYWxzcXVhcmUiLDEzMTkyLCJjYW5kcmFiaW5kdWJlbmdhbGkiLDI0MzMsImNhbmRyYWJpbmR1Y21iIiw3ODQsImNhbmRyYWJpbmR1ZGV2YSIsMjMwNSwiY2FuZHJhYmluZHVndWphcmF0aSIsMjY4OSwiY2Fwc2xvY2siLDg2ODIsImNhcmVvZiIsODQ1MywiY2Fyb24iLDcxMSwiY2Fyb25iZWxvd2NtYiIsODEyLCJjYXJvbmNtYiIsNzgwLCJjYXJyaWFnZXJldHVybiIsODYyOSwiY2JvcG9tb2ZvIiwxMjU2OCwiY2Nhcm9uIiwyNjksImNjZWRpbGxhIiwyMzEsImNjZWRpbGxhYWN1dGUiLDc2ODksImNjaXJjbGUiLDk0MjYsImNjaXJjdW1mbGV4IiwyNjUsImNjdXJsIiw1OTcsImNkb3QiLDI2NywiY2RvdGFjY2VudCIsMjY3LCJjZHNxdWFyZSIsMTMyNTMsImNlZGlsbGEiLDE4NCwiY2VkaWxsYWNtYiIsODA3LCJjZW50IiwxNjIsImNlbnRpZ3JhZGUiLDg0NTEsImNlbnRpbmZlcmlvciIsNjMxOTksImNlbnRtb25vc3BhY2UiLDY1NTA0LCJjZW50b2xkc3R5bGUiLDYzMzk0LCJjZW50c3VwZXJpb3IiLDYzMjAwLCJjaGFhcm1lbmlhbiIsMTQwMSwiY2hhYmVuZ2FsaSIsMjQ1OSwiY2hhZGV2YSIsMjMzMSwiY2hhZ3VqYXJhdGkiLDI3MTUsImNoYWd1cm11a2hpIiwyNTg3LCJjaGJvcG9tb2ZvIiwxMjU2NCwiY2hlYWJraGFzaWFuY3lyaWxsaWMiLDEyMTMsImNoZWNrbWFyayIsMTAwMDMsImNoZWN5cmlsbGljIiwxMDk1LCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyIsMTIxNSwiY2hlZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDcsImNoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNjksImNoZWhhcm1lbmlhbiIsMTM5NSwiY2hla2hha2Fzc2lhbmN5cmlsbGljIiwxMjI4LCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMjA5LCJjaGkiLDk2NywiY2hpZXVjaGFjaXJjbGVrb3JlYW4iLDEyOTE5LCJjaGlldWNoYXBhcmVua29yZWFuIiwxMjgyMywiY2hpZXVjaGNpcmNsZWtvcmVhbiIsMTI5MDUsImNoaWV1Y2hrb3JlYW4iLDEyNjE4LCJjaGlldWNocGFyZW5rb3JlYW4iLDEyODA5LCJjaG9jaGFuZ3RoYWkiLDM1OTQsImNob2NoYW50aGFpIiwzNTkyLCJjaG9jaGluZ3RoYWkiLDM1OTMsImNob2Nob2V0aGFpIiwzNTk2LCJjaG9vayIsMzkyLCJjaWV1Y2FjaXJjbGVrb3JlYW4iLDEyOTE4LCJjaWV1Y2FwYXJlbmtvcmVhbiIsMTI4MjIsImNpZXVjY2lyY2xla29yZWFuIiwxMjkwNCwiY2lldWNrb3JlYW4iLDEyNjE2LCJjaWV1Y3BhcmVua29yZWFuIiwxMjgwOCwiY2lldWN1cGFyZW5rb3JlYW4iLDEyODI4LCJjaXJjbGUiLDk2NzUsImNpcmNsZWNvcHlydCIsMTY5LCJjaXJjbGVtdWx0aXBseSIsODg1NSwiY2lyY2xlb3QiLDg4NTcsImNpcmNsZXBsdXMiLDg4NTMsImNpcmNsZXBvc3RhbG1hcmsiLDEyMzQyLCJjaXJjbGV3aXRobGVmdGhhbGZibGFjayIsOTY4MCwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrIiw5NjgxLCJjaXJjdW1mbGV4Iiw3MTAsImNpcmN1bWZsZXhiZWxvd2NtYiIsODEzLCJjaXJjdW1mbGV4Y21iIiw3NzAsImNsZWFyIiw4OTk5LCJjbGlja2FsdmVvbGFyIiw0NTAsImNsaWNrZGVudGFsIiw0NDgsImNsaWNrbGF0ZXJhbCIsNDQ5LCJjbGlja3JldHJvZmxleCIsNDUxLCJjbHViIiw5ODI3LCJjbHVic3VpdGJsYWNrIiw5ODI3LCJjbHVic3VpdHdoaXRlIiw5ODMxLCJjbWN1YmVkc3F1YXJlIiwxMzIyMCwiY21vbm9zcGFjZSIsNjUzNDcsImNtc3F1YXJlZHNxdWFyZSIsMTMyMTYsImNvYXJtZW5pYW4iLDE0MDksImNvbG9uIiw1OCwiY29sb25tb25ldGFyeSIsODM1MywiY29sb25tb25vc3BhY2UiLDY1MzA2LCJjb2xvbnNpZ24iLDgzNTMsImNvbG9uc21hbGwiLDY1MTA5LCJjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kIiw3MjEsImNvbG9udHJpYW5ndWxhcm1vZCIsNzIwLCJjb21tYSIsNDQsImNvbW1hYWJvdmVjbWIiLDc4NywiY29tbWFhYm92ZXJpZ2h0Y21iIiw3ODksImNvbW1hYWNjZW50Iiw2MzE3MSwiY29tbWFhcmFiaWMiLDE1NDgsImNvbW1hYXJtZW5pYW4iLDEzNzMsImNvbW1haW5mZXJpb3IiLDYzMjAxLCJjb21tYW1vbm9zcGFjZSIsNjUyOTIsImNvbW1hcmV2ZXJzZWRhYm92ZWNtYiIsNzg4LCJjb21tYXJldmVyc2VkbW9kIiw3MDEsImNvbW1hc21hbGwiLDY1MTA0LCJjb21tYXN1cGVyaW9yIiw2MzIwMiwiY29tbWF0dXJuZWRhYm92ZWNtYiIsNzg2LCJjb21tYXR1cm5lZG1vZCIsNjk5LCJjb21wYXNzIiw5Nzg4LCJjb25ncnVlbnQiLDg3NzMsImNvbnRvdXJpbnRlZ3JhbCIsODc1MCwiY29udHJvbCIsODk2MywiY29udHJvbEFDSyIsNiwiY29udHJvbEJFTCIsNywiY29udHJvbEJTIiw4LCJjb250cm9sQ0FOIiwyNCwiY29udHJvbENSIiwxMywiY29udHJvbERDMSIsMTcsImNvbnRyb2xEQzIiLDE4LCJjb250cm9sREMzIiwxOSwiY29udHJvbERDNCIsMjAsImNvbnRyb2xERUwiLDEyNywiY29udHJvbERMRSIsMTYsImNvbnRyb2xFTSIsMjUsImNvbnRyb2xFTlEiLDUsImNvbnRyb2xFT1QiLDQsImNvbnRyb2xFU0MiLDI3LCJjb250cm9sRVRCIiwyMywiY29udHJvbEVUWCIsMywiY29udHJvbEZGIiwxMiwiY29udHJvbEZTIiwyOCwiY29udHJvbEdTIiwyOSwiY29udHJvbEhUIiw5LCJjb250cm9sTEYiLDEwLCJjb250cm9sTkFLIiwyMSwiY29udHJvbE5VTEwiLDAsImNvbnRyb2xSUyIsMzAsImNvbnRyb2xTSSIsMTUsImNvbnRyb2xTTyIsMTQsImNvbnRyb2xTT1QiLDIsImNvbnRyb2xTVFgiLDEsImNvbnRyb2xTVUIiLDI2LCJjb250cm9sU1lOIiwyMiwiY29udHJvbFVTIiwzMSwiY29udHJvbFZUIiwxMSwiY29weXJpZ2h0IiwxNjksImNvcHlyaWdodHNhbnMiLDYzNzIxLCJjb3B5cmlnaHRzZXJpZiIsNjMxOTMsImNvcm5lcmJyYWNrZXRsZWZ0IiwxMjMwMCwiY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGgiLDY1Mzc4LCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4OSwiY29ybmVyYnJhY2tldHJpZ2h0IiwxMjMwMSwiY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoIiw2NTM3OSwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkwLCJjb3Jwb3JhdGlvbnNxdWFyZSIsMTMxODMsImNvc3F1YXJlIiwxMzI1NSwiY292ZXJrZ3NxdWFyZSIsMTMyNTQsImNwYXJlbiIsOTM3NCwiY3J1emVpcm8iLDgzNTQsImNzdHJldGNoZWQiLDY2MywiY3VybHlhbmQiLDg5MTEsImN1cmx5b3IiLDg5MTAsImN1cnJlbmN5IiwxNjQsImN5ckJyZXZlIiw2MzE4NSwiY3lyRmxleCIsNjMxODYsImN5cmJyZXZlIiw2MzE4OCwiY3lyZmxleCIsNjMxODksImQiLDEwMCwiZGFhcm1lbmlhbiIsMTM4MCwiZGFiZW5nYWxpIiwyNDcwLCJkYWRhcmFiaWMiLDE1OTAsImRhZGV2YSIsMjM0MiwiZGFkZmluYWxhcmFiaWMiLDY1MjE0LCJkYWRpbml0aWFsYXJhYmljIiw2NTIxNSwiZGFkbWVkaWFsYXJhYmljIiw2NTIxNiwiZGFnZXNoIiwxNDY4LCJkYWdlc2hoZWJyZXciLDE0NjgsImRhZ2dlciIsODIyNCwiZGFnZ2VyZGJsIiw4MjI1LCJkYWd1amFyYXRpIiwyNzI2LCJkYWd1cm11a2hpIiwyNTk4LCJkYWhpcmFnYW5hIiwxMjM4NCwiZGFrYXRha2FuYSIsMTI0ODAsImRhbGFyYWJpYyIsMTU4MywiZGFsZXQiLDE0OTEsImRhbGV0ZGFnZXNoIiw2NDMwNywiZGFsZXRkYWdlc2hoZWJyZXciLDY0MzA3LCJkYWxldGhlYnJldyIsMTQ5MSwiZGFsZmluYWxhcmFiaWMiLDY1MTk0LCJkYW1tYWFyYWJpYyIsMTYxNSwiZGFtbWFsb3dhcmFiaWMiLDE2MTUsImRhbW1hdGFuYWx0b25lYXJhYmljIiwxNjEyLCJkYW1tYXRhbmFyYWJpYyIsMTYxMiwiZGFuZGEiLDI0MDQsImRhcmdhaGVicmV3IiwxNDQ3LCJkYXJnYWxlZnRoZWJyZXciLDE0NDcsImRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1NywiZGJsR3JhdmUiLDYzMTg3LCJkYmxhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5OCwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NSwiZGJsYW5nbGVicmFja2V0cmlnaHQiLDEyMjk5LCJkYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4NiwiZGJsYXJjaGludmVydGVkYmVsb3djbWIiLDgxMSwiZGJsYXJyb3dsZWZ0Iiw4NjYwLCJkYmxhcnJvd3JpZ2h0Iiw4NjU4LCJkYmxkYW5kYSIsMjQwNSwiZGJsZ3JhdmUiLDYzMTkwLCJkYmxncmF2ZWNtYiIsNzgzLCJkYmxpbnRlZ3JhbCIsODc0OCwiZGJsbG93bGluZSIsODIxNSwiZGJsbG93bGluZWNtYiIsODE5LCJkYmxvdmVybGluZWNtYiIsODMxLCJkYmxwcmltZW1vZCIsNjk4LCJkYmx2ZXJ0aWNhbGJhciIsODIxNCwiZGJsdmVydGljYWxsaW5lYWJvdmVjbWIiLDc4MiwiZGJvcG9tb2ZvIiwxMjU1MywiZGJzcXVhcmUiLDEzMjU2LCJkY2Fyb24iLDI3MSwiZGNlZGlsbGEiLDc2OTcsImRjaXJjbGUiLDk0MjcsImRjaXJjdW1mbGV4YmVsb3ciLDc2OTksImRjcm9hdCIsMjczLCJkZGFiZW5nYWxpIiwyNDY1LCJkZGFkZXZhIiwyMzM3LCJkZGFndWphcmF0aSIsMjcyMSwiZGRhZ3VybXVraGkiLDI1OTMsImRkYWxhcmFiaWMiLDE2NzIsImRkYWxmaW5hbGFyYWJpYyIsNjQzOTMsImRkZGhhZGV2YSIsMjM5NiwiZGRoYWJlbmdhbGkiLDI0NjYsImRkaGFkZXZhIiwyMzM4LCJkZGhhZ3VqYXJhdGkiLDI3MjIsImRkaGFndXJtdWtoaSIsMjU5NCwiZGRvdGFjY2VudCIsNzY5MSwiZGRvdGJlbG93Iiw3NjkzLCJkZWNpbWFsc2VwYXJhdG9yYXJhYmljIiwxNjQzLCJkZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiIsMTY0MywiZGVjeXJpbGxpYyIsMTA3NiwiZGVncmVlIiwxNzYsImRlaGloZWJyZXciLDE0NTMsImRlaGlyYWdhbmEiLDEyMzkxLCJkZWljb3B0aWMiLDEwMDcsImRla2F0YWthbmEiLDEyNDg3LCJkZWxldGVsZWZ0Iiw5MDAzLCJkZWxldGVyaWdodCIsODk5OCwiZGVsdGEiLDk0OCwiZGVsdGF0dXJuZWQiLDM5NywiZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkiLDI1NTIsImRlemgiLDY3NiwiZGhhYmVuZ2FsaSIsMjQ3MSwiZGhhZGV2YSIsMjM0MywiZGhhZ3VqYXJhdGkiLDI3MjcsImRoYWd1cm11a2hpIiwyNTk5LCJkaG9vayIsNTk5LCJkaWFseXRpa2F0b25vcyIsOTAxLCJkaWFseXRpa2F0b25vc2NtYiIsODM2LCJkaWFtb25kIiw5ODMwLCJkaWFtb25kc3VpdHdoaXRlIiw5ODI2LCJkaWVyZXNpcyIsMTY4LCJkaWVyZXNpc2FjdXRlIiw2MzE5MSwiZGllcmVzaXNiZWxvd2NtYiIsODA0LCJkaWVyZXNpc2NtYiIsNzc2LCJkaWVyZXNpc2dyYXZlIiw2MzE5MiwiZGllcmVzaXN0b25vcyIsOTAxLCJkaWhpcmFnYW5hIiwxMjM4NiwiZGlrYXRha2FuYSIsMTI0ODIsImRpdHRvbWFyayIsMTIyOTEsImRpdmlkZSIsMjQ3LCJkaXZpZGVzIiw4NzM5LCJkaXZpc2lvbnNsYXNoIiw4NzI1LCJkamVjeXJpbGxpYyIsMTEwNiwiZGtzaGFkZSIsOTYxOSwiZGxpbmViZWxvdyIsNzY5NSwiZGxzcXVhcmUiLDEzMjA3LCJkbWFjcm9uIiwyNzMsImRtb25vc3BhY2UiLDY1MzQ4LCJkbmJsb2NrIiw5NjA0LCJkb2NoYWRhdGhhaSIsMzU5OCwiZG9kZWt0aGFpIiwzNjA0LCJkb2hpcmFnYW5hIiwxMjM5MywiZG9rYXRha2FuYSIsMTI0ODksImRvbGxhciIsMzYsImRvbGxhcmluZmVyaW9yIiw2MzIwMywiZG9sbGFybW9ub3NwYWNlIiw2NTI4NCwiZG9sbGFyb2xkc3R5bGUiLDYzMjY4LCJkb2xsYXJzbWFsbCIsNjUxMjksImRvbGxhcnN1cGVyaW9yIiw2MzIwNCwiZG9uZyIsODM2MywiZG9ydXNxdWFyZSIsMTMwOTQsImRvdGFjY2VudCIsNzI5LCJkb3RhY2NlbnRjbWIiLDc3NSwiZG90YmVsb3djbWIiLDgwMywiZG90YmVsb3djb21iIiw4MDMsImRvdGthdGFrYW5hIiwxMjUzOSwiZG90bGVzc2kiLDMwNSwiZG90bGVzc2oiLDYzMTY2LCJkb3RsZXNzanN0cm9rZWhvb2siLDY0NCwiZG90bWF0aCIsODkwMSwiZG90dGVkY2lyY2xlIiw5Njc2LCJkb3VibGV5b2RwYXRhaCIsNjQyODcsImRvdWJsZXlvZHBhdGFoaGVicmV3Iiw2NDI4NywiZG93bnRhY2tiZWxvd2NtYiIsNzk4LCJkb3dudGFja21vZCIsNzI1LCJkcGFyZW4iLDkzNzUsImRzdXBlcmlvciIsNjMyMTEsImR0YWlsIiw1OTgsImR0b3BiYXIiLDM5NiwiZHVoaXJhZ2FuYSIsMTIzODksImR1a2F0YWthbmEiLDEyNDg1LCJkeiIsNDk5LCJkemFsdG9uZSIsNjc1LCJkemNhcm9uIiw0NTQsImR6Y3VybCIsNjc3LCJkemVhYmtoYXNpYW5jeXJpbGxpYyIsMTI0OSwiZHplY3lyaWxsaWMiLDExMDksImR6aGVjeXJpbGxpYyIsMTExOSwiZSIsMTAxLCJlYWN1dGUiLDIzMywiZWFydGgiLDk3OTMsImViZW5nYWxpIiwyNDQ3LCJlYm9wb21vZm8iLDEyNTcyLCJlYnJldmUiLDI3NywiZWNhbmRyYWRldmEiLDIzMTcsImVjYW5kcmFndWphcmF0aSIsMjcwMSwiZWNhbmRyYXZvd2Vsc2lnbmRldmEiLDIzNzMsImVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSIsMjc1NywiZWNhcm9uIiwyODMsImVjZWRpbGxhYnJldmUiLDc3MDksImVjaGFybWVuaWFuIiwxMzgxLCJlY2h5aXduYXJtZW5pYW4iLDE0MTUsImVjaXJjbGUiLDk0MjgsImVjaXJjdW1mbGV4IiwyMzQsImVjaXJjdW1mbGV4YWN1dGUiLDc4NzEsImVjaXJjdW1mbGV4YmVsb3ciLDc3MDUsImVjaXJjdW1mbGV4ZG90YmVsb3ciLDc4NzksImVjaXJjdW1mbGV4Z3JhdmUiLDc4NzMsImVjaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODc1LCJlY2lyY3VtZmxleHRpbGRlIiw3ODc3LCJlY3lyaWxsaWMiLDExMDgsImVkYmxncmF2ZSIsNTE3LCJlZGV2YSIsMjMxOSwiZWRpZXJlc2lzIiwyMzUsImVkb3QiLDI3OSwiZWRvdGFjY2VudCIsMjc5LCJlZG90YmVsb3ciLDc4NjUsImVlZ3VybXVraGkiLDI1NzUsImVlbWF0cmFndXJtdWtoaSIsMjYzMSwiZWZjeXJpbGxpYyIsMTA5MiwiZWdyYXZlIiwyMzIsImVndWphcmF0aSIsMjcwMywiZWhhcm1lbmlhbiIsMTM4MywiZWhib3BvbW9mbyIsMTI1NzMsImVoaXJhZ2FuYSIsMTIzNjAsImVob29rYWJvdmUiLDc4NjcsImVpYm9wb21vZm8iLDEyNTc1LCJlaWdodCIsNTYsImVpZ2h0YXJhYmljIiwxNjQwLCJlaWdodGJlbmdhbGkiLDI1NDIsImVpZ2h0Y2lyY2xlIiw5MzE5LCJlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI5LCJlaWdodGRldmEiLDI0MTQsImVpZ2h0ZWVuY2lyY2xlIiw5MzI5LCJlaWdodGVlbnBhcmVuIiw5MzQ5LCJlaWdodGVlbnBlcmlvZCIsOTM2OSwiZWlnaHRndWphcmF0aSIsMjc5OCwiZWlnaHRndXJtdWtoaSIsMjY3MCwiZWlnaHRoYWNrYXJhYmljIiwxNjQwLCJlaWdodGhhbmd6aG91IiwxMjMyOCwiZWlnaHRobm90ZWJlYW1lZCIsOTgzNSwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOSwiZWlnaHRpbmZlcmlvciIsODMyOCwiZWlnaHRtb25vc3BhY2UiLDY1MzA0LCJlaWdodG9sZHN0eWxlIiw2MzI4OCwiZWlnaHRwYXJlbiIsOTMzOSwiZWlnaHRwZXJpb2QiLDkzNTksImVpZ2h0cGVyc2lhbiIsMTc4NCwiZWlnaHRyb21hbiIsODU2NywiZWlnaHRzdXBlcmlvciIsODMxMiwiZWlnaHR0aGFpIiwzNjcyLCJlaW52ZXJ0ZWRicmV2ZSIsNTE5LCJlaW90aWZpZWRjeXJpbGxpYyIsMTEyNSwiZWthdGFrYW5hIiwxMjQ1NiwiZWthdGFrYW5haGFsZndpZHRoIiw2NTM5NiwiZWtvbmthcmd1cm11a2hpIiwyNjc2LCJla29yZWFuIiwxMjYyOCwiZWxjeXJpbGxpYyIsMTA4MywiZWxlbWVudCIsODcxMiwiZWxldmVuY2lyY2xlIiw5MzIyLCJlbGV2ZW5wYXJlbiIsOTM0MiwiZWxldmVucGVyaW9kIiw5MzYyLCJlbGV2ZW5yb21hbiIsODU3MCwiZWxsaXBzaXMiLDgyMzAsImVsbGlwc2lzdmVydGljYWwiLDg5NDIsImVtYWNyb24iLDI3NSwiZW1hY3JvbmFjdXRlIiw3NzAzLCJlbWFjcm9uZ3JhdmUiLDc3MDEsImVtY3lyaWxsaWMiLDEwODQsImVtZGFzaCIsODIxMiwiZW1kYXNodmVydGljYWwiLDY1MDczLCJlbW9ub3NwYWNlIiw2NTM0OSwiZW1waGFzaXNtYXJrYXJtZW5pYW4iLDEzNzEsImVtcHR5c2V0Iiw4NzA5LCJlbmJvcG9tb2ZvIiwxMjU3OSwiZW5jeXJpbGxpYyIsMTA4NSwiZW5kYXNoIiw4MjExLCJlbmRhc2h2ZXJ0aWNhbCIsNjUwNzQsImVuZGVzY2VuZGVyY3lyaWxsaWMiLDExODcsImVuZyIsMzMxLCJlbmdib3BvbW9mbyIsMTI1ODEsImVuZ2hlY3lyaWxsaWMiLDExODksImVuaG9va2N5cmlsbGljIiwxMjI0LCJlbnNwYWNlIiw4MTk0LCJlb2dvbmVrIiwyODEsImVva29yZWFuIiwxMjYyNywiZW9wZW4iLDYwMywiZW9wZW5jbG9zZWQiLDY2NiwiZW9wZW5yZXZlcnNlZCIsNjA0LCJlb3BlbnJldmVyc2VkY2xvc2VkIiw2MDYsImVvcGVucmV2ZXJzZWRob29rIiw2MDUsImVwYXJlbiIsOTM3NiwiZXBzaWxvbiIsOTQ5LCJlcHNpbG9udG9ub3MiLDk0MSwiZXF1YWwiLDYxLCJlcXVhbG1vbm9zcGFjZSIsNjUzMDksImVxdWFsc21hbGwiLDY1MTI2LCJlcXVhbHN1cGVyaW9yIiw4MzE2LCJlcXVpdmFsZW5jZSIsODgwMSwiZXJib3BvbW9mbyIsMTI1ODIsImVyY3lyaWxsaWMiLDEwODgsImVyZXZlcnNlZCIsNjAwLCJlcmV2ZXJzZWRjeXJpbGxpYyIsMTEwMSwiZXNjeXJpbGxpYyIsMTA4OSwiZXNkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NSwiZXNoIiw2NDMsImVzaGN1cmwiLDY0NiwiZXNob3J0ZGV2YSIsMjMxOCwiZXNob3J0dm93ZWxzaWduZGV2YSIsMjM3NCwiZXNocmV2ZXJzZWRsb29wIiw0MjYsImVzaHNxdWF0cmV2ZXJzZWQiLDY0NSwiZXNtYWxsaGlyYWdhbmEiLDEyMzU5LCJlc21hbGxrYXRha2FuYSIsMTI0NTUsImVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NiwiZXN0aW1hdGVkIiw4NDk0LCJlc3VwZXJpb3IiLDYzMjEyLCJldGEiLDk1MSwiZXRhcm1lbmlhbiIsMTM4NCwiZXRhdG9ub3MiLDk0MiwiZXRoIiwyNDAsImV0aWxkZSIsNzg2OSwiZXRpbGRlYmVsb3ciLDc3MDcsImV0bmFodGFmb3VraGhlYnJldyIsMTQyNSwiZXRuYWh0YWZvdWtobGVmdGhlYnJldyIsMTQyNSwiZXRuYWh0YWhlYnJldyIsMTQyNSwiZXRuYWh0YWxlZnRoZWJyZXciLDE0MjUsImV0dXJuZWQiLDQ3NywiZXVrb3JlYW4iLDEyNjQxLCJldXJvIiw4MzY0LCJldm93ZWxzaWduYmVuZ2FsaSIsMjUwMywiZXZvd2Vsc2lnbmRldmEiLDIzNzUsImV2b3dlbHNpZ25ndWphcmF0aSIsMjc1OSwiZXhjbGFtIiwzMywiZXhjbGFtYXJtZW5pYW4iLDEzNzIsImV4Y2xhbWRibCIsODI1MiwiZXhjbGFtZG93biIsMTYxLCJleGNsYW1kb3duc21hbGwiLDYzMzkzLCJleGNsYW1tb25vc3BhY2UiLDY1MjgxLCJleGNsYW1zbWFsbCIsNjMyNjUsImV4aXN0ZW50aWFsIiw4NzA3LCJlemgiLDY1OCwiZXpoY2Fyb24iLDQ5NSwiZXpoY3VybCIsNjU5LCJlemhyZXZlcnNlZCIsNDQxLCJlemh0YWlsIiw0NDIsImYiLDEwMiwiZmFkZXZhIiwyMzk4LCJmYWd1cm11a2hpIiwyNjU0LCJmYWhyZW5oZWl0Iiw4NDU3LCJmYXRoYWFyYWJpYyIsMTYxNCwiZmF0aGFsb3dhcmFiaWMiLDE2MTQsImZhdGhhdGFuYXJhYmljIiwxNjExLCJmYm9wb21vZm8iLDEyNTUyLCJmY2lyY2xlIiw5NDI5LCJmZG90YWNjZW50Iiw3NzExLCJmZWhhcmFiaWMiLDE2MDEsImZlaGFybWVuaWFuIiwxNDE0LCJmZWhmaW5hbGFyYWJpYyIsNjUyMzQsImZlaGluaXRpYWxhcmFiaWMiLDY1MjM1LCJmZWhtZWRpYWxhcmFiaWMiLDY1MjM2LCJmZWljb3B0aWMiLDk5NywiZmVtYWxlIiw5NzkyLCJmZiIsNjQyNTYsImZfZiIsNjQyNTYsImZmaSIsNjQyNTksImZfZl9pIiw2NDI1OSwiZmZsIiw2NDI2MCwiZl9mX2wiLDY0MjYwLCJmaSIsNjQyNTcsImZfaSIsNjQyNTcsImZpZnRlZW5jaXJjbGUiLDkzMjYsImZpZnRlZW5wYXJlbiIsOTM0NiwiZmlmdGVlbnBlcmlvZCIsOTM2NiwiZmlndXJlZGFzaCIsODIxMCwiZmlsbGVkYm94Iiw5NjMyLCJmaWxsZWRyZWN0Iiw5NjQ0LCJmaW5hbGthZiIsMTQ5OCwiZmluYWxrYWZkYWdlc2giLDY0MzE0LCJmaW5hbGthZmRhZ2VzaGhlYnJldyIsNjQzMTQsImZpbmFsa2FmaGVicmV3IiwxNDk4LCJmaW5hbG1lbSIsMTUwMSwiZmluYWxtZW1oZWJyZXciLDE1MDEsImZpbmFsbnVuIiwxNTAzLCJmaW5hbG51bmhlYnJldyIsMTUwMywiZmluYWxwZSIsMTUwNywiZmluYWxwZWhlYnJldyIsMTUwNywiZmluYWx0c2FkaSIsMTUwOSwiZmluYWx0c2FkaWhlYnJldyIsMTUwOSwiZmlyc3R0b25lY2hpbmVzZSIsNzEzLCJmaXNoZXllIiw5NjczLCJmaXRhY3lyaWxsaWMiLDExMzksImZpdmUiLDUzLCJmaXZlYXJhYmljIiwxNjM3LCJmaXZlYmVuZ2FsaSIsMjUzOSwiZml2ZWNpcmNsZSIsOTMxNiwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI2LCJmaXZlZGV2YSIsMjQxMSwiZml2ZWVpZ2h0aHMiLDg1NDEsImZpdmVndWphcmF0aSIsMjc5NSwiZml2ZWd1cm11a2hpIiwyNjY3LCJmaXZlaGFja2FyYWJpYyIsMTYzNywiZml2ZWhhbmd6aG91IiwxMjMyNSwiZml2ZWlkZW9ncmFwaGljcGFyZW4iLDEyODM2LCJmaXZlaW5mZXJpb3IiLDgzMjUsImZpdmVtb25vc3BhY2UiLDY1MzAxLCJmaXZlb2xkc3R5bGUiLDYzMjg1LCJmaXZlcGFyZW4iLDkzMzYsImZpdmVwZXJpb2QiLDkzNTYsImZpdmVwZXJzaWFuIiwxNzgxLCJmaXZlcm9tYW4iLDg1NjQsImZpdmVzdXBlcmlvciIsODMwOSwiZml2ZXRoYWkiLDM2NjksImZsIiw2NDI1OCwiZl9sIiw2NDI1OCwiZmxvcmluIiw0MDIsImZtb25vc3BhY2UiLDY1MzUwLCJmbXNxdWFyZSIsMTMyMDksImZvZmFudGhhaSIsMzYxNSwiZm9mYXRoYWkiLDM2MTMsImZvbmdtYW50aGFpIiwzNjYzLCJmb3JhbGwiLDg3MDQsImZvdXIiLDUyLCJmb3VyYXJhYmljIiwxNjM2LCJmb3VyYmVuZ2FsaSIsMjUzOCwiZm91cmNpcmNsZSIsOTMxNSwiZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI1LCJmb3VyZGV2YSIsMjQxMCwiZm91cmd1amFyYXRpIiwyNzk0LCJmb3VyZ3VybXVraGkiLDI2NjYsImZvdXJoYWNrYXJhYmljIiwxNjM2LCJmb3VyaGFuZ3pob3UiLDEyMzI0LCJmb3VyaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzUsImZvdXJpbmZlcmlvciIsODMyNCwiZm91cm1vbm9zcGFjZSIsNjUzMDAsImZvdXJudW1lcmF0b3JiZW5nYWxpIiwyNTUxLCJmb3Vyb2xkc3R5bGUiLDYzMjg0LCJmb3VycGFyZW4iLDkzMzUsImZvdXJwZXJpb2QiLDkzNTUsImZvdXJwZXJzaWFuIiwxNzgwLCJmb3Vycm9tYW4iLDg1NjMsImZvdXJzdXBlcmlvciIsODMwOCwiZm91cnRlZW5jaXJjbGUiLDkzMjUsImZvdXJ0ZWVucGFyZW4iLDkzNDUsImZvdXJ0ZWVucGVyaW9kIiw5MzY1LCJmb3VydGhhaSIsMzY2OCwiZm91cnRodG9uZWNoaW5lc2UiLDcxNSwiZnBhcmVuIiw5Mzc3LCJmcmFjdGlvbiIsODI2MCwiZnJhbmMiLDgzNTUsImciLDEwMywiZ2FiZW5nYWxpIiwyNDU1LCJnYWN1dGUiLDUwMSwiZ2FkZXZhIiwyMzI3LCJnYWZhcmFiaWMiLDE3MTEsImdhZmZpbmFsYXJhYmljIiw2NDQwMywiZ2FmaW5pdGlhbGFyYWJpYyIsNjQ0MDQsImdhZm1lZGlhbGFyYWJpYyIsNjQ0MDUsImdhZ3VqYXJhdGkiLDI3MTEsImdhZ3VybXVraGkiLDI1ODMsImdhaGlyYWdhbmEiLDEyMzY0LCJnYWthdGFrYW5hIiwxMjQ2MCwiZ2FtbWEiLDk0NywiZ2FtbWFsYXRpbnNtYWxsIiw2MTEsImdhbW1hc3VwZXJpb3IiLDczNiwiZ2FuZ2lhY29wdGljIiwxMDAzLCJnYm9wb21vZm8iLDEyNTU3LCJnYnJldmUiLDI4NywiZ2Nhcm9uIiw0ODcsImdjZWRpbGxhIiwyOTEsImdjaXJjbGUiLDk0MzAsImdjaXJjdW1mbGV4IiwyODUsImdjb21tYWFjY2VudCIsMjkxLCJnZG90IiwyODksImdkb3RhY2NlbnQiLDI4OSwiZ2VjeXJpbGxpYyIsMTA3NSwiZ2VoaXJhZ2FuYSIsMTIzNzAsImdla2F0YWthbmEiLDEyNDY2LCJnZW9tZXRyaWNhbGx5ZXF1YWwiLDg3ODUsImdlcmVzaGFjY2VudGhlYnJldyIsMTQzNiwiZ2VyZXNoaGVicmV3IiwxNTIzLCJnZXJlc2htdXFkYW1oZWJyZXciLDE0MzcsImdlcm1hbmRibHMiLDIyMywiZ2Vyc2hheWltYWNjZW50aGVicmV3IiwxNDM4LCJnZXJzaGF5aW1oZWJyZXciLDE1MjQsImdldGFtYXJrIiwxMjMwNywiZ2hhYmVuZ2FsaSIsMjQ1NiwiZ2hhZGFybWVuaWFuIiwxMzk0LCJnaGFkZXZhIiwyMzI4LCJnaGFndWphcmF0aSIsMjcxMiwiZ2hhZ3VybXVraGkiLDI1ODQsImdoYWluYXJhYmljIiwxNTk0LCJnaGFpbmZpbmFsYXJhYmljIiw2NTIzMCwiZ2hhaW5pbml0aWFsYXJhYmljIiw2NTIzMSwiZ2hhaW5tZWRpYWxhcmFiaWMiLDY1MjMyLCJnaGVtaWRkbGVob29rY3lyaWxsaWMiLDExNzMsImdoZXN0cm9rZWN5cmlsbGljIiwxMTcxLCJnaGV1cHR1cm5jeXJpbGxpYyIsMTE2OSwiZ2hoYWRldmEiLDIzOTQsImdoaGFndXJtdWtoaSIsMjY1MCwiZ2hvb2siLDYwOCwiZ2h6c3F1YXJlIiwxMzIwMywiZ2loaXJhZ2FuYSIsMTIzNjYsImdpa2F0YWthbmEiLDEyNDYyLCJnaW1hcm1lbmlhbiIsMTM3OSwiZ2ltZWwiLDE0OTAsImdpbWVsZGFnZXNoIiw2NDMwNiwiZ2ltZWxkYWdlc2hoZWJyZXciLDY0MzA2LCJnaW1lbGhlYnJldyIsMTQ5MCwiZ2plY3lyaWxsaWMiLDExMDcsImdsb3R0YWxpbnZlcnRlZHN0cm9rZSIsNDQ2LCJnbG90dGFsc3RvcCIsNjYwLCJnbG90dGFsc3RvcGludmVydGVkIiw2NjIsImdsb3R0YWxzdG9wbW9kIiw3MDQsImdsb3R0YWxzdG9wcmV2ZXJzZWQiLDY2MSwiZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCIsNzA1LCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IiLDc0MCwiZ2xvdHRhbHN0b3BzdHJva2UiLDY3MywiZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCIsNjc0LCJnbWFjcm9uIiw3NzEzLCJnbW9ub3NwYWNlIiw2NTM1MSwiZ29oaXJhZ2FuYSIsMTIzNzIsImdva2F0YWthbmEiLDEyNDY4LCJncGFyZW4iLDkzNzgsImdwYXNxdWFyZSIsMTMyMjgsImdyYWRpZW50Iiw4NzExLCJncmF2ZSIsOTYsImdyYXZlYmVsb3djbWIiLDc5MCwiZ3JhdmVjbWIiLDc2OCwiZ3JhdmVjb21iIiw3NjgsImdyYXZlZGV2YSIsMjM4NywiZ3JhdmVsb3dtb2QiLDcxOCwiZ3JhdmVtb25vc3BhY2UiLDY1MzQ0LCJncmF2ZXRvbmVjbWIiLDgzMiwiZ3JlYXRlciIsNjIsImdyZWF0ZXJlcXVhbCIsODgwNSwiZ3JlYXRlcmVxdWFsb3JsZXNzIiw4OTIzLCJncmVhdGVybW9ub3NwYWNlIiw2NTMxMCwiZ3JlYXRlcm9yZXF1aXZhbGVudCIsODgxOSwiZ3JlYXRlcm9ybGVzcyIsODgyMywiZ3JlYXRlcm92ZXJlcXVhbCIsODgwNywiZ3JlYXRlcnNtYWxsIiw2NTEyNSwiZ3NjcmlwdCIsNjA5LCJnc3Ryb2tlIiw0ODUsImd1aGlyYWdhbmEiLDEyMzY4LCJndWlsbGVtb3RsZWZ0IiwxNzEsImd1aWxsZW1vdHJpZ2h0IiwxODcsImd1aWxzaW5nbGxlZnQiLDgyNDksImd1aWxzaW5nbHJpZ2h0Iiw4MjUwLCJndWthdGFrYW5hIiwxMjQ2NCwiZ3VyYW11c3F1YXJlIiwxMzA4MCwiZ3lzcXVhcmUiLDEzMjU3LCJoIiwxMDQsImhhYWJraGFzaWFuY3lyaWxsaWMiLDExOTMsImhhYWx0b25lYXJhYmljIiwxNzI5LCJoYWJlbmdhbGkiLDI0ODksImhhZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDMsImhhZGV2YSIsMjM2MSwiaGFndWphcmF0aSIsMjc0NSwiaGFndXJtdWtoaSIsMjYxNywiaGFoYXJhYmljIiwxNTgxLCJoYWhmaW5hbGFyYWJpYyIsNjUxODYsImhhaGluaXRpYWxhcmFiaWMiLDY1MTg3LCJoYWhpcmFnYW5hIiwxMjM5OSwiaGFobWVkaWFsYXJhYmljIiw2NTE4OCwiaGFpdHVzcXVhcmUiLDEzMDk4LCJoYWthdGFrYW5hIiwxMjQ5NSwiaGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTgsImhhbGFudGd1cm11a2hpIiwyNjM3LCJoYW16YWFyYWJpYyIsMTU2OSwiaGFtemFsb3dhcmFiaWMiLDE1NjksImhhbmd1bGZpbGxlciIsMTI2NDQsImhhcmRzaWduY3lyaWxsaWMiLDEwOTgsImhhcnBvb25sZWZ0YmFyYnVwIiw4NjM2LCJoYXJwb29ucmlnaHRiYXJidXAiLDg2NDAsImhhc3F1YXJlIiwxMzI1OCwiaGF0YWZwYXRhaCIsMTQ1OCwiaGF0YWZwYXRhaDE2IiwxNDU4LCJoYXRhZnBhdGFoMjMiLDE0NTgsImhhdGFmcGF0YWgyZiIsMTQ1OCwiaGF0YWZwYXRhaGhlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaG5hcnJvd2hlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NTgsImhhdGFmcGF0YWh3aWRlaGVicmV3IiwxNDU4LCJoYXRhZnFhbWF0cyIsMTQ1OSwiaGF0YWZxYW1hdHMxYiIsMTQ1OSwiaGF0YWZxYW1hdHMyOCIsMTQ1OSwiaGF0YWZxYW1hdHMzNCIsMTQ1OSwiaGF0YWZxYW1hdHNoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzbmFycm93aGVicmV3IiwxNDU5LCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzd2lkZWhlYnJldyIsMTQ1OSwiaGF0YWZzZWdvbCIsMTQ1NywiaGF0YWZzZWdvbDE3IiwxNDU3LCJoYXRhZnNlZ29sMjQiLDE0NTcsImhhdGFmc2Vnb2wzMCIsMTQ1NywiaGF0YWZzZWdvbGhlYnJldyIsMTQ1NywiaGF0YWZzZWdvbG5hcnJvd2hlYnJldyIsMTQ1NywiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXciLDE0NTcsImhhdGFmc2Vnb2x3aWRlaGVicmV3IiwxNDU3LCJoYmFyIiwyOTUsImhib3BvbW9mbyIsMTI1NTksImhicmV2ZWJlbG93Iiw3NzIzLCJoY2VkaWxsYSIsNzcyMSwiaGNpcmNsZSIsOTQzMSwiaGNpcmN1bWZsZXgiLDI5MywiaGRpZXJlc2lzIiw3NzE5LCJoZG90YWNjZW50Iiw3NzE1LCJoZG90YmVsb3ciLDc3MTcsImhlIiwxNDkyLCJoZWFydCIsOTgyOSwiaGVhcnRzdWl0YmxhY2siLDk4MjksImhlYXJ0c3VpdHdoaXRlIiw5ODI1LCJoZWRhZ2VzaCIsNjQzMDgsImhlZGFnZXNoaGVicmV3Iiw2NDMwOCwiaGVoYWx0b25lYXJhYmljIiwxNzI5LCJoZWhhcmFiaWMiLDE2MDcsImhlaGVicmV3IiwxNDkyLCJoZWhmaW5hbGFsdG9uZWFyYWJpYyIsNjQ0MjMsImhlaGZpbmFsYWx0dHdvYXJhYmljIiw2NTI1OCwiaGVoZmluYWxhcmFiaWMiLDY1MjU4LCJoZWhoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY0NDIxLCJoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMiLDY0NDIwLCJoZWhpbml0aWFsYWx0b25lYXJhYmljIiw2NDQyNCwiaGVoaW5pdGlhbGFyYWJpYyIsNjUyNTksImhlaGlyYWdhbmEiLDEyNDA4LCJoZWhtZWRpYWxhbHRvbmVhcmFiaWMiLDY0NDI1LCJoZWhtZWRpYWxhcmFiaWMiLDY1MjYwLCJoZWlzZWllcmFzcXVhcmUiLDEzMTc5LCJoZWthdGFrYW5hIiwxMjUwNCwiaGVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjEsImhla3V0YWFydXNxdWFyZSIsMTMxMTAsImhlbmdob29rIiw2MTUsImhlcnV0dXNxdWFyZSIsMTMxMTMsImhldCIsMTQ5NSwiaGV0aGVicmV3IiwxNDk1LCJoaG9vayIsNjE0LCJoaG9va3N1cGVyaW9yIiw2ODksImhpZXVoYWNpcmNsZWtvcmVhbiIsMTI5MjMsImhpZXVoYXBhcmVua29yZWFuIiwxMjgyNywiaGlldWhjaXJjbGVrb3JlYW4iLDEyOTA5LCJoaWV1aGtvcmVhbiIsMTI2MjIsImhpZXVocGFyZW5rb3JlYW4iLDEyODEzLCJoaWhpcmFnYW5hIiwxMjQwMiwiaGlrYXRha2FuYSIsMTI0OTgsImhpa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE5LCJoaXJpcSIsMTQ2MCwiaGlyaXExNCIsMTQ2MCwiaGlyaXEyMSIsMTQ2MCwiaGlyaXEyZCIsMTQ2MCwiaGlyaXFoZWJyZXciLDE0NjAsImhpcmlxbmFycm93aGVicmV3IiwxNDYwLCJoaXJpcXF1YXJ0ZXJoZWJyZXciLDE0NjAsImhpcmlxd2lkZWhlYnJldyIsMTQ2MCwiaGxpbmViZWxvdyIsNzgzMCwiaG1vbm9zcGFjZSIsNjUzNTIsImhvYXJtZW5pYW4iLDEzOTIsImhvaGlwdGhhaSIsMzYyNywiaG9oaXJhZ2FuYSIsMTI0MTEsImhva2F0YWthbmEiLDEyNTA3LCJob2thdGFrYW5haGFsZndpZHRoIiw2NTQyMiwiaG9sYW0iLDE0NjUsImhvbGFtMTkiLDE0NjUsImhvbGFtMjYiLDE0NjUsImhvbGFtMzIiLDE0NjUsImhvbGFtaGVicmV3IiwxNDY1LCJob2xhbW5hcnJvd2hlYnJldyIsMTQ2NSwiaG9sYW1xdWFydGVyaGVicmV3IiwxNDY1LCJob2xhbXdpZGVoZWJyZXciLDE0NjUsImhvbm9raHVrdGhhaSIsMzYzMCwiaG9va2Fib3ZlY29tYiIsNzc3LCJob29rY21iIiw3NzcsImhvb2twYWxhdGFsaXplZGJlbG93Y21iIiw4MDEsImhvb2tyZXRyb2ZsZXhiZWxvd2NtYiIsODAyLCJob29uc3F1YXJlIiwxMzEyMiwiaG9yaWNvcHRpYyIsMTAwMSwiaG9yaXpvbnRhbGJhciIsODIxMywiaG9ybmNtYiIsNzk1LCJob3RzcHJpbmdzIiw5ODMyLCJob3VzZSIsODk2MiwiaHBhcmVuIiw5Mzc5LCJoc3VwZXJpb3IiLDY4OCwiaHR1cm5lZCIsNjEzLCJodWhpcmFnYW5hIiwxMjQwNSwiaHVpaXRvc3F1YXJlIiwxMzEwNywiaHVrYXRha2FuYSIsMTI1MDEsImh1a2F0YWthbmFoYWxmd2lkdGgiLDY1NDIwLCJodW5nYXJ1bWxhdXQiLDczMywiaHVuZ2FydW1sYXV0Y21iIiw3NzksImh2Iiw0MDUsImh5cGhlbiIsNDUsImh5cGhlbmluZmVyaW9yIiw2MzIwNSwiaHlwaGVubW9ub3NwYWNlIiw2NTI5MywiaHlwaGVuc21hbGwiLDY1MTIzLCJoeXBoZW5zdXBlcmlvciIsNjMyMDYsImh5cGhlbnR3byIsODIwOCwiaSIsMTA1LCJpYWN1dGUiLDIzNywiaWFjeXJpbGxpYyIsMTEwMywiaWJlbmdhbGkiLDI0MzksImlib3BvbW9mbyIsMTI1ODMsImlicmV2ZSIsMzAxLCJpY2Fyb24iLDQ2NCwiaWNpcmNsZSIsOTQzMiwiaWNpcmN1bWZsZXgiLDIzOCwiaWN5cmlsbGljIiwxMTEwLCJpZGJsZ3JhdmUiLDUyMSwiaWRlb2dyYXBoZWFydGhjaXJjbGUiLDEyOTQzLCJpZGVvZ3JhcGhmaXJlY2lyY2xlIiwxMjkzOSwiaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuIiwxMjg2MywiaWRlb2dyYXBoaWNjYWxscGFyZW4iLDEyODU4LCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSIsMTI5NjUsImlkZW9ncmFwaGljY2xvc2UiLDEyMjk0LCJpZGVvZ3JhcGhpY2NvbW1hIiwxMjI4OSwiaWRlb2dyYXBoaWNjb21tYWxlZnQiLDY1MzgwLCJpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4iLDEyODU1LCJpZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUiLDEyOTYzLCJpZGVvZ3JhcGhpY2VhcnRocGFyZW4iLDEyODQ3LCJpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiIsMTI4NjEsImlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlIiwxMjk1NywiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuIiwxMjg2NCwiaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUiLDEyOTUwLCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuIiwxMjg1NCwiaWRlb2dyYXBoaWNmaXJlcGFyZW4iLDEyODQzLCJpZGVvZ3JhcGhpY2hhdmVwYXJlbiIsMTI4NTAsImlkZW9ncmFwaGljaGlnaGNpcmNsZSIsMTI5NjQsImlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayIsMTIyOTMsImlkZW9ncmFwaGljbGFib3JjaXJjbGUiLDEyOTUyLCJpZGVvZ3JhcGhpY2xhYm9ycGFyZW4iLDEyODU2LCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGUiLDEyOTY3LCJpZGVvZ3JhcGhpY2xvd2NpcmNsZSIsMTI5NjYsImlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUiLDEyOTY5LCJpZGVvZ3JhcGhpY21ldGFscGFyZW4iLDEyODQ2LCJpZGVvZ3JhcGhpY21vb25wYXJlbiIsMTI4NDIsImlkZW9ncmFwaGljbmFtZXBhcmVuIiwxMjg1MiwiaWRlb2dyYXBoaWNwZXJpb2QiLDEyMjkwLCJpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlIiwxMjk1OCwiaWRlb2dyYXBoaWNyZWFjaHBhcmVuIiwxMjg2NywiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiIsMTI4NTcsImlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiIsMTI4NjIsImlkZW9ncmFwaGljcmlnaHRjaXJjbGUiLDEyOTY4LCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSIsMTI5NTMsImlkZW9ncmFwaGljc2VsZnBhcmVuIiwxMjg2NiwiaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4iLDEyODUxLCJpZGVvZ3JhcGhpY3NwYWNlIiwxMjI4OCwiaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4iLDEyODUzLCJpZGVvZ3JhcGhpY3N0b2NrcGFyZW4iLDEyODQ5LCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW4iLDEyODU5LCJpZGVvZ3JhcGhpY3N1bnBhcmVuIiwxMjg0OCwiaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiIsMTI4NjAsImlkZW9ncmFwaGljd2F0ZXJwYXJlbiIsMTI4NDQsImlkZW9ncmFwaGljd29vZHBhcmVuIiwxMjg0NSwiaWRlb2dyYXBoaWN6ZXJvIiwxMjI5NSwiaWRlb2dyYXBobWV0YWxjaXJjbGUiLDEyOTQyLCJpZGVvZ3JhcGhtb29uY2lyY2xlIiwxMjkzOCwiaWRlb2dyYXBobmFtZWNpcmNsZSIsMTI5NDgsImlkZW9ncmFwaHN1bmNpcmNsZSIsMTI5NDQsImlkZW9ncmFwaHdhdGVyY2lyY2xlIiwxMjk0MCwiaWRlb2dyYXBod29vZGNpcmNsZSIsMTI5NDEsImlkZXZhIiwyMzExLCJpZGllcmVzaXMiLDIzOSwiaWRpZXJlc2lzYWN1dGUiLDc3MjcsImlkaWVyZXNpc2N5cmlsbGljIiwxMjUzLCJpZG90YmVsb3ciLDc4ODMsImllYnJldmVjeXJpbGxpYyIsMTIzOSwiaWVjeXJpbGxpYyIsMTA3NywiaWV1bmdhY2lyY2xla29yZWFuIiwxMjkxNywiaWV1bmdhcGFyZW5rb3JlYW4iLDEyODIxLCJpZXVuZ2NpcmNsZWtvcmVhbiIsMTI5MDMsImlldW5na29yZWFuIiwxMjYxNSwiaWV1bmdwYXJlbmtvcmVhbiIsMTI4MDcsImlncmF2ZSIsMjM2LCJpZ3VqYXJhdGkiLDI2OTUsImlndXJtdWtoaSIsMjU2NywiaWhpcmFnYW5hIiwxMjM1NiwiaWhvb2thYm92ZSIsNzg4MSwiaWliZW5nYWxpIiwyNDQwLCJpaWN5cmlsbGljIiwxMDgwLCJpaWRldmEiLDIzMTIsImlpZ3VqYXJhdGkiLDI2OTYsImlpZ3VybXVraGkiLDI1NjgsImlpbWF0cmFndXJtdWtoaSIsMjYyNCwiaWludmVydGVkYnJldmUiLDUyMywiaWlzaG9ydGN5cmlsbGljIiwxMDgxLCJpaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTYsImlpdm93ZWxzaWduZGV2YSIsMjM2OCwiaWl2b3dlbHNpZ25ndWphcmF0aSIsMjc1MiwiaWoiLDMwNywiaWthdGFrYW5hIiwxMjQ1MiwiaWthdGFrYW5haGFsZndpZHRoIiw2NTM5NCwiaWtvcmVhbiIsMTI2NDMsImlsZGUiLDczMiwiaWx1eWhlYnJldyIsMTQ1MiwiaW1hY3JvbiIsMjk5LCJpbWFjcm9uY3lyaWxsaWMiLDEyNTEsImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3ODcsImltYXRyYWd1cm11a2hpIiwyNjIzLCJpbW9ub3NwYWNlIiw2NTM1MywiaW5jcmVtZW50Iiw4NzEwLCJpbmZpbml0eSIsODczNCwiaW5pYXJtZW5pYW4iLDEzODcsImludGVncmFsIiw4NzQ3LCJpbnRlZ3JhbGJvdHRvbSIsODk5MywiaW50ZWdyYWxidCIsODk5MywiaW50ZWdyYWxleCIsNjM3MzMsImludGVncmFsdG9wIiw4OTkyLCJpbnRlZ3JhbHRwIiw4OTkyLCJpbnRlcnNlY3Rpb24iLDg3NDUsImludGlzcXVhcmUiLDEzMDYxLCJpbnZidWxsZXQiLDk2ODgsImludmNpcmNsZSIsOTY4OSwiaW52c21pbGVmYWNlIiw5Nzg3LCJpb2N5cmlsbGljIiwxMTA1LCJpb2dvbmVrIiwzMDMsImlvdGEiLDk1MywiaW90YWRpZXJlc2lzIiw5NzAsImlvdGFkaWVyZXNpc3Rvbm9zIiw5MTIsImlvdGFsYXRpbiIsNjE3LCJpb3RhdG9ub3MiLDk0MywiaXBhcmVuIiw5MzgwLCJpcmlndXJtdWtoaSIsMjY3NCwiaXNtYWxsaGlyYWdhbmEiLDEyMzU1LCJpc21hbGxrYXRha2FuYSIsMTI0NTEsImlzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NCwiaXNzaGFyYmVuZ2FsaSIsMjU1NCwiaXN0cm9rZSIsNjE2LCJpc3VwZXJpb3IiLDYzMjEzLCJpdGVyYXRpb25oaXJhZ2FuYSIsMTI0NDUsIml0ZXJhdGlvbmthdGFrYW5hIiwxMjU0MSwiaXRpbGRlIiwyOTcsIml0aWxkZWJlbG93Iiw3NzI1LCJpdWJvcG9tb2ZvIiwxMjU4NSwiaXVjeXJpbGxpYyIsMTEwMiwiaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTUsIml2b3dlbHNpZ25kZXZhIiwyMzY3LCJpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTEsIml6aGl0c2FjeXJpbGxpYyIsMTE0MSwiaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMiLDExNDMsImoiLDEwNiwiamFhcm1lbmlhbiIsMTM5MywiamFiZW5nYWxpIiwyNDYwLCJqYWRldmEiLDIzMzIsImphZ3VqYXJhdGkiLDI3MTYsImphZ3VybXVraGkiLDI1ODgsImpib3BvbW9mbyIsMTI1NjAsImpjYXJvbiIsNDk2LCJqY2lyY2xlIiw5NDMzLCJqY2lyY3VtZmxleCIsMzA5LCJqY3Jvc3NlZHRhaWwiLDY2OSwiamRvdGxlc3NzdHJva2UiLDYwNywiamVjeXJpbGxpYyIsMTExMiwiamVlbWFyYWJpYyIsMTU4MCwiamVlbWZpbmFsYXJhYmljIiw2NTE4MiwiamVlbWluaXRpYWxhcmFiaWMiLDY1MTgzLCJqZWVtbWVkaWFsYXJhYmljIiw2NTE4NCwiamVoYXJhYmljIiwxNjg4LCJqZWhmaW5hbGFyYWJpYyIsNjQzOTUsImpoYWJlbmdhbGkiLDI0NjEsImpoYWRldmEiLDIzMzMsImpoYWd1amFyYXRpIiwyNzE3LCJqaGFndXJtdWtoaSIsMjU4OSwiamhlaGFybWVuaWFuIiwxNDAzLCJqaXMiLDEyMjkyLCJqbW9ub3NwYWNlIiw2NTM1NCwianBhcmVuIiw5MzgxLCJqc3VwZXJpb3IiLDY5MCwiayIsMTA3LCJrYWJhc2hraXJjeXJpbGxpYyIsMTE4NSwia2FiZW5nYWxpIiwyNDUzLCJrYWN1dGUiLDc3MjksImthY3lyaWxsaWMiLDEwODIsImthZGVzY2VuZGVyY3lyaWxsaWMiLDExNzksImthZGV2YSIsMjMyNSwia2FmIiwxNDk5LCJrYWZhcmFiaWMiLDE2MDMsImthZmRhZ2VzaCIsNjQzMTUsImthZmRhZ2VzaGhlYnJldyIsNjQzMTUsImthZmZpbmFsYXJhYmljIiw2NTI0Miwia2FmaGVicmV3IiwxNDk5LCJrYWZpbml0aWFsYXJhYmljIiw2NTI0Mywia2FmbWVkaWFsYXJhYmljIiw2NTI0NCwia2FmcmFmZWhlYnJldyIsNjQzMzMsImthZ3VqYXJhdGkiLDI3MDksImthZ3VybXVraGkiLDI1ODEsImthaGlyYWdhbmEiLDEyMzYzLCJrYWhvb2tjeXJpbGxpYyIsMTIyMCwia2FrYXRha2FuYSIsMTI0NTksImtha2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk4LCJrYXBwYSIsOTU0LCJrYXBwYXN5bWJvbGdyZWVrIiwxMDA4LCJrYXB5ZW91bm1pZXVta29yZWFuIiwxMjY1Nywia2FweWVvdW5waGlldXBoa29yZWFuIiwxMjY3Niwia2FweWVvdW5waWV1cGtvcmVhbiIsMTI2NjQsImthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiIsMTI2NjUsImthcm9yaWlzcXVhcmUiLDEzMDY5LCJrYXNoaWRhYXV0b2FyYWJpYyIsMTYwMCwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljIiwxNjAwLCJrYXNtYWxsa2F0YWthbmEiLDEyNTMzLCJrYXNxdWFyZSIsMTMxODgsImthc3JhYXJhYmljIiwxNjE2LCJrYXNyYXRhbmFyYWJpYyIsMTYxMywia2FzdHJva2VjeXJpbGxpYyIsMTE4Mywia2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCIsNjUzOTIsImthdmVydGljYWxzdHJva2VjeXJpbGxpYyIsMTE4MSwia2JvcG9tb2ZvIiwxMjU1OCwia2NhbHNxdWFyZSIsMTMxOTMsImtjYXJvbiIsNDg5LCJrY2VkaWxsYSIsMzExLCJrY2lyY2xlIiw5NDM0LCJrY29tbWFhY2NlbnQiLDMxMSwia2RvdGJlbG93Iiw3NzMxLCJrZWhhcm1lbmlhbiIsMTQxMiwia2VoaXJhZ2FuYSIsMTIzNjksImtla2F0YWthbmEiLDEyNDY1LCJrZWthdGFrYW5haGFsZndpZHRoIiw2NTQwMSwia2VuYXJtZW5pYW4iLDEzOTEsImtlc21hbGxrYXRha2FuYSIsMTI1MzQsImtncmVlbmxhbmRpYyIsMzEyLCJraGFiZW5nYWxpIiwyNDU0LCJraGFjeXJpbGxpYyIsMTA5Mywia2hhZGV2YSIsMjMyNiwia2hhZ3VqYXJhdGkiLDI3MTAsImtoYWd1cm11a2hpIiwyNTgyLCJraGFoYXJhYmljIiwxNTgyLCJraGFoZmluYWxhcmFiaWMiLDY1MTkwLCJraGFoaW5pdGlhbGFyYWJpYyIsNjUxOTEsImtoYWhtZWRpYWxhcmFiaWMiLDY1MTkyLCJraGVpY29wdGljIiw5OTksImtoaGFkZXZhIiwyMzkzLCJraGhhZ3VybXVraGkiLDI2NDksImtoaWV1a2hhY2lyY2xla29yZWFuIiwxMjkyMCwia2hpZXVraGFwYXJlbmtvcmVhbiIsMTI4MjQsImtoaWV1a2hjaXJjbGVrb3JlYW4iLDEyOTA2LCJraGlldWtoa29yZWFuIiwxMjYxOSwia2hpZXVraHBhcmVua29yZWFuIiwxMjgxMCwia2hva2hhaXRoYWkiLDM1ODYsImtob2tob250aGFpIiwzNTg5LCJraG9raHVhdHRoYWkiLDM1ODcsImtob2tod2FpdGhhaSIsMzU4OCwia2hvbXV0dGhhaSIsMzY3NSwia2hvb2siLDQwOSwia2hvcmFraGFuZ3RoYWkiLDM1OTAsImtoenNxdWFyZSIsMTMyMDEsImtpaGlyYWdhbmEiLDEyMzY1LCJraWthdGFrYW5hIiwxMjQ2MSwia2lrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTksImtpcm9ndXJhbXVzcXVhcmUiLDEzMDc3LCJraXJvbWVldG9ydXNxdWFyZSIsMTMwNzgsImtpcm9zcXVhcmUiLDEzMDc2LCJraXllb2thY2lyY2xla29yZWFuIiwxMjkxMCwia2l5ZW9rYXBhcmVua29yZWFuIiwxMjgxNCwia2l5ZW9rY2lyY2xla29yZWFuIiwxMjg5Niwia2l5ZW9ra29yZWFuIiwxMjU5Mywia2l5ZW9rcGFyZW5rb3JlYW4iLDEyODAwLCJraXllb2tzaW9za29yZWFuIiwxMjU5NSwia2plY3lyaWxsaWMiLDExMTYsImtsaW5lYmVsb3ciLDc3MzMsImtsc3F1YXJlIiwxMzIwOCwia21jdWJlZHNxdWFyZSIsMTMyMjIsImttb25vc3BhY2UiLDY1MzU1LCJrbXNxdWFyZWRzcXVhcmUiLDEzMjE4LCJrb2hpcmFnYW5hIiwxMjM3MSwia29obXNxdWFyZSIsMTMyNDgsImtva2FpdGhhaSIsMzU4NSwia29rYXRha2FuYSIsMTI0NjcsImtva2F0YWthbmFoYWxmd2lkdGgiLDY1NDAyLCJrb29wb3NxdWFyZSIsMTMwODYsImtvcHBhY3lyaWxsaWMiLDExNTMsImtvcmVhbnN0YW5kYXJkc3ltYm9sIiwxMjkyNywia29yb25pc2NtYiIsODM1LCJrcGFyZW4iLDkzODIsImtwYXNxdWFyZSIsMTMyMjYsImtzaWN5cmlsbGljIiwxMTM1LCJrdHNxdWFyZSIsMTMyNjMsImt0dXJuZWQiLDY3MCwia3VoaXJhZ2FuYSIsMTIzNjcsImt1a2F0YWthbmEiLDEyNDYzLCJrdWthdGFrYW5haGFsZndpZHRoIiw2NTQwMCwia3ZzcXVhcmUiLDEzMjQwLCJrd3NxdWFyZSIsMTMyNDYsImwiLDEwOCwibGFiZW5nYWxpIiwyNDgyLCJsYWN1dGUiLDMxNCwibGFkZXZhIiwyMzU0LCJsYWd1amFyYXRpIiwyNzM4LCJsYWd1cm11a2hpIiwyNjEwLCJsYWtraGFuZ3lhb3RoYWkiLDM2NTMsImxhbWFsZWZmaW5hbGFyYWJpYyIsNjUyNzYsImxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MjcyLCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljIiw2NTI3MSwibGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUyNzQsImxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWMiLDY1MjczLCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWMiLDY1Mjc1LCJsYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTI3MCwibGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYyIsNjUyNjksImxhbWFyYWJpYyIsMTYwNCwibGFtYmRhIiw5NTUsImxhbWJkYXN0cm9rZSIsNDExLCJsYW1lZCIsMTUwMCwibGFtZWRkYWdlc2giLDY0MzE2LCJsYW1lZGRhZ2VzaGhlYnJldyIsNjQzMTYsImxhbWVkaGVicmV3IiwxNTAwLCJsYW1maW5hbGFyYWJpYyIsNjUyNDYsImxhbWhhaGluaXRpYWxhcmFiaWMiLDY0NzE0LCJsYW1pbml0aWFsYXJhYmljIiw2NTI0NywibGFtamVlbWluaXRpYWxhcmFiaWMiLDY0NzEzLCJsYW1raGFoaW5pdGlhbGFyYWJpYyIsNjQ3MTUsImxhbWxhbWhlaGlzb2xhdGVkYXJhYmljIiw2NTAxMCwibGFtbWVkaWFsYXJhYmljIiw2NTI0OCwibGFtbWVlbWhhaGluaXRpYWxhcmFiaWMiLDY0OTA0LCJsYW1tZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MTYsImxhcmdlY2lyY2xlIiw5NzExLCJsYmFyIiw0MTAsImxiZWx0Iiw2MjAsImxib3BvbW9mbyIsMTI1NTYsImxjYXJvbiIsMzE4LCJsY2VkaWxsYSIsMzE2LCJsY2lyY2xlIiw5NDM1LCJsY2lyY3VtZmxleGJlbG93Iiw3NzQxLCJsY29tbWFhY2NlbnQiLDMxNiwibGRvdCIsMzIwLCJsZG90YWNjZW50IiwzMjAsImxkb3RiZWxvdyIsNzczNSwibGRvdGJlbG93bWFjcm9uIiw3NzM3LCJsZWZ0YW5nbGVhYm92ZWNtYiIsNzk0LCJsZWZ0dGFja2JlbG93Y21iIiw3OTIsImxlc3MiLDYwLCJsZXNzZXF1YWwiLDg4MDQsImxlc3NlcXVhbG9yZ3JlYXRlciIsODkyMiwibGVzc21vbm9zcGFjZSIsNjUzMDgsImxlc3NvcmVxdWl2YWxlbnQiLDg4MTgsImxlc3NvcmdyZWF0ZXIiLDg4MjIsImxlc3NvdmVyZXF1YWwiLDg4MDYsImxlc3NzbWFsbCIsNjUxMjQsImxlemgiLDYyMiwibGZibG9jayIsOTYxMiwibGhvb2tyZXRyb2ZsZXgiLDYyMSwibGlyYSIsODM1NiwibGl3bmFybWVuaWFuIiwxMzg4LCJsaiIsNDU3LCJsamVjeXJpbGxpYyIsMTExMywibGwiLDYzMTY4LCJsbGFkZXZhIiwyMzU1LCJsbGFndWphcmF0aSIsMjczOSwibGxpbmViZWxvdyIsNzczOSwibGxsYWRldmEiLDIzNTYsImxsdm9jYWxpY2JlbmdhbGkiLDI1MjksImxsdm9jYWxpY2RldmEiLDI0MDEsImxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzEsImxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDI0MDMsImxtaWRkbGV0aWxkZSIsNjE5LCJsbW9ub3NwYWNlIiw2NTM1NiwibG1zcXVhcmUiLDEzMjY0LCJsb2NodWxhdGhhaSIsMzYyOCwibG9naWNhbGFuZCIsODc0MywibG9naWNhbG5vdCIsMTcyLCJsb2dpY2Fsbm90cmV2ZXJzZWQiLDg5NzYsImxvZ2ljYWxvciIsODc0NCwibG9saW5ndGhhaSIsMzYyMSwibG9uZ3MiLDM4MywibG93bGluZWNlbnRlcmxpbmUiLDY1MTAyLCJsb3dsaW5lY21iIiw4MTgsImxvd2xpbmVkYXNoZWQiLDY1MTAxLCJsb3plbmdlIiw5Njc0LCJscGFyZW4iLDkzODMsImxzbGFzaCIsMzIyLCJsc3F1YXJlIiw4NDY3LCJsc3VwZXJpb3IiLDYzMjE0LCJsdHNoYWRlIiw5NjE3LCJsdXRoYWkiLDM2MjIsImx2b2NhbGljYmVuZ2FsaSIsMjQ0NCwibHZvY2FsaWNkZXZhIiwyMzE2LCJsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzAsImx2b2NhbGljdm93ZWxzaWduZGV2YSIsMjQwMiwibHhzcXVhcmUiLDEzMjY3LCJtIiwxMDksIm1hYmVuZ2FsaSIsMjQ3OCwibWFjcm9uIiwxNzUsIm1hY3JvbmJlbG93Y21iIiw4MTcsIm1hY3JvbmNtYiIsNzcyLCJtYWNyb25sb3dtb2QiLDcxNywibWFjcm9ubW9ub3NwYWNlIiw2NTUwNywibWFjdXRlIiw3NzQzLCJtYWRldmEiLDIzNTAsIm1hZ3VqYXJhdGkiLDI3MzQsIm1hZ3VybXVraGkiLDI2MDYsIm1haGFwYWtoaGVicmV3IiwxNDQ0LCJtYWhhcGFraGxlZnRoZWJyZXciLDE0NDQsIm1haGlyYWdhbmEiLDEyNDE0LCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpIiw2MzYzNywibWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkiLDYzNjM2LCJtYWljaGF0dGF3YXRoYWkiLDM2NTksIm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSIsNjM2MzUsIm1haWVrbG93bGVmdHRoYWkiLDYzNjI4LCJtYWlla2xvd3JpZ2h0dGhhaSIsNjM2MjcsIm1haWVrdGhhaSIsMzY1NiwibWFpZWt1cHBlcmxlZnR0aGFpIiw2MzYyNiwibWFpaGFuYWthdGxlZnR0aGFpIiw2MzYyMCwibWFpaGFuYWthdHRoYWkiLDM2MzMsIm1haXRhaWtodWxlZnR0aGFpIiw2MzYyNSwibWFpdGFpa2h1dGhhaSIsMzY1NSwibWFpdGhvbG93bGVmdHRoYWkiLDYzNjMxLCJtYWl0aG9sb3dyaWdodHRoYWkiLDYzNjMwLCJtYWl0aG90aGFpIiwzNjU3LCJtYWl0aG91cHBlcmxlZnR0aGFpIiw2MzYyOSwibWFpdHJpbG93bGVmdHRoYWkiLDYzNjM0LCJtYWl0cmlsb3dyaWdodHRoYWkiLDYzNjMzLCJtYWl0cml0aGFpIiwzNjU4LCJtYWl0cml1cHBlcmxlZnR0aGFpIiw2MzYzMiwibWFpeWFtb2t0aGFpIiwzNjU0LCJtYWthdGFrYW5hIiwxMjUxMCwibWFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjMsIm1hbGUiLDk3OTQsIm1hbnN5b25zcXVhcmUiLDEzMTI3LCJtYXFhZmhlYnJldyIsMTQ3MCwibWFycyIsOTc5NCwibWFzb3JhY2lyY2xlaGVicmV3IiwxNDU1LCJtYXNxdWFyZSIsMTMxODcsIm1ib3BvbW9mbyIsMTI1NTEsIm1ic3F1YXJlIiwxMzI2OCwibWNpcmNsZSIsOTQzNiwibWN1YmVkc3F1YXJlIiwxMzIyMSwibWRvdGFjY2VudCIsNzc0NSwibWRvdGJlbG93Iiw3NzQ3LCJtZWVtYXJhYmljIiwxNjA1LCJtZWVtZmluYWxhcmFiaWMiLDY1MjUwLCJtZWVtaW5pdGlhbGFyYWJpYyIsNjUyNTEsIm1lZW1tZWRpYWxhcmFiaWMiLDY1MjUyLCJtZWVtbWVlbWluaXRpYWxhcmFiaWMiLDY0NzIxLCJtZWVtbWVlbWlzb2xhdGVkYXJhYmljIiw2NDU4NCwibWVldG9ydXNxdWFyZSIsMTMxMzMsIm1laGlyYWdhbmEiLDEyNDE3LCJtZWl6aWVyYXNxdWFyZSIsMTMxODIsIm1la2F0YWthbmEiLDEyNTEzLCJtZWthdGFrYW5haGFsZndpZHRoIiw2NTQyNiwibWVtIiwxNTAyLCJtZW1kYWdlc2giLDY0MzE4LCJtZW1kYWdlc2hoZWJyZXciLDY0MzE4LCJtZW1oZWJyZXciLDE1MDIsIm1lbmFybWVuaWFuIiwxMzk2LCJtZXJraGFoZWJyZXciLDE0NDUsIm1lcmtoYWtlZnVsYWhlYnJldyIsMTQ0NiwibWVya2hha2VmdWxhbGVmdGhlYnJldyIsMTQ0NiwibWVya2hhbGVmdGhlYnJldyIsMTQ0NSwibWhvb2siLDYyNSwibWh6c3F1YXJlIiwxMzIwMiwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGgiLDY1MzgxLCJtaWRkb3QiLDE4MywibWlldW1hY2lyY2xla29yZWFuIiwxMjkxNCwibWlldW1hcGFyZW5rb3JlYW4iLDEyODE4LCJtaWV1bWNpcmNsZWtvcmVhbiIsMTI5MDAsIm1pZXVta29yZWFuIiwxMjYwOSwibWlldW1wYW5zaW9za29yZWFuIiwxMjY1NiwibWlldW1wYXJlbmtvcmVhbiIsMTI4MDQsIm1pZXVtcGlldXBrb3JlYW4iLDEyNjU0LCJtaWV1bXNpb3Nrb3JlYW4iLDEyNjU1LCJtaWhpcmFnYW5hIiwxMjQxNSwibWlrYXRha2FuYSIsMTI1MTEsIm1pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDI0LCJtaW51cyIsODcyMiwibWludXNiZWxvd2NtYiIsODAwLCJtaW51c2NpcmNsZSIsODg1NCwibWludXNtb2QiLDcyNywibWludXNwbHVzIiw4NzIzLCJtaW51dGUiLDgyNDIsIm1pcmliYWFydXNxdWFyZSIsMTMxMzAsIm1pcmlzcXVhcmUiLDEzMTI5LCJtbG9uZ2xlZ3R1cm5lZCIsNjI0LCJtbHNxdWFyZSIsMTMyMDYsIm1tY3ViZWRzcXVhcmUiLDEzMjE5LCJtbW9ub3NwYWNlIiw2NTM1NywibW1zcXVhcmVkc3F1YXJlIiwxMzIxNSwibW9oaXJhZ2FuYSIsMTI0MTgsIm1vaG1zcXVhcmUiLDEzMjQ5LCJtb2thdGFrYW5hIiwxMjUxNCwibW9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjcsIm1vbHNxdWFyZSIsMTMyNzAsIm1vbWF0aGFpIiwzNjE3LCJtb3ZlcnNzcXVhcmUiLDEzMjIzLCJtb3ZlcnNzcXVhcmVkc3F1YXJlIiwxMzIyNCwibXBhcmVuIiw5Mzg0LCJtcGFzcXVhcmUiLDEzMjI3LCJtc3NxdWFyZSIsMTMyMzUsIm1zdXBlcmlvciIsNjMyMTUsIm10dXJuZWQiLDYyMywibXUiLDE4MSwibXUxIiwxODEsIm11YXNxdWFyZSIsMTMxODYsIm11Y2hncmVhdGVyIiw4ODExLCJtdWNobGVzcyIsODgxMCwibXVmc3F1YXJlIiwxMzE5NiwibXVncmVlayIsOTU2LCJtdWdzcXVhcmUiLDEzMTk3LCJtdWhpcmFnYW5hIiwxMjQxNiwibXVrYXRha2FuYSIsMTI1MTIsIm11a2F0YWthbmFoYWxmd2lkdGgiLDY1NDI1LCJtdWxzcXVhcmUiLDEzMjA1LCJtdWx0aXBseSIsMjE1LCJtdW1zcXVhcmUiLDEzMjExLCJtdW5haGhlYnJldyIsMTQ0MywibXVuYWhsZWZ0aGVicmV3IiwxNDQzLCJtdXNpY2Fsbm90ZSIsOTgzNCwibXVzaWNhbG5vdGVkYmwiLDk4MzUsIm11c2ljZmxhdHNpZ24iLDk4MzcsIm11c2ljc2hhcnBzaWduIiw5ODM5LCJtdXNzcXVhcmUiLDEzMjM0LCJtdXZzcXVhcmUiLDEzMjM4LCJtdXdzcXVhcmUiLDEzMjQ0LCJtdm1lZ2FzcXVhcmUiLDEzMjQxLCJtdnNxdWFyZSIsMTMyMzksIm13bWVnYXNxdWFyZSIsMTMyNDcsIm13c3F1YXJlIiwxMzI0NSwibiIsMTEwLCJuYWJlbmdhbGkiLDI0NzIsIm5hYmxhIiw4NzExLCJuYWN1dGUiLDMyNCwibmFkZXZhIiwyMzQ0LCJuYWd1amFyYXRpIiwyNzI4LCJuYWd1cm11a2hpIiwyNjAwLCJuYWhpcmFnYW5hIiwxMjM5NCwibmFrYXRha2FuYSIsMTI0OTAsIm5ha2F0YWthbmFoYWxmd2lkdGgiLDY1NDEzLCJuYXBvc3Ryb3BoZSIsMzI5LCJuYXNxdWFyZSIsMTMxODUsIm5ib3BvbW9mbyIsMTI1NTUsIm5ic3BhY2UiLDE2MCwibmNhcm9uIiwzMjgsIm5jZWRpbGxhIiwzMjYsIm5jaXJjbGUiLDk0MzcsIm5jaXJjdW1mbGV4YmVsb3ciLDc3NTUsIm5jb21tYWFjY2VudCIsMzI2LCJuZG90YWNjZW50Iiw3NzQ5LCJuZG90YmVsb3ciLDc3NTEsIm5laGlyYWdhbmEiLDEyMzk3LCJuZWthdGFrYW5hIiwxMjQ5MywibmVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTYsIm5ld3NoZXFlbHNpZ24iLDgzNjIsIm5mc3F1YXJlIiwxMzE5NSwibmdhYmVuZ2FsaSIsMjQ1NywibmdhZGV2YSIsMjMyOSwibmdhZ3VqYXJhdGkiLDI3MTMsIm5nYWd1cm11a2hpIiwyNTg1LCJuZ29uZ3V0aGFpIiwzNTkxLCJuaGlyYWdhbmEiLDEyNDM1LCJuaG9va2xlZnQiLDYyNiwibmhvb2tyZXRyb2ZsZXgiLDYyNywibmlldW5hY2lyY2xla29yZWFuIiwxMjkxMSwibmlldW5hcGFyZW5rb3JlYW4iLDEyODE1LCJuaWV1bmNpZXVja29yZWFuIiwxMjU5NywibmlldW5jaXJjbGVrb3JlYW4iLDEyODk3LCJuaWV1bmhpZXVoa29yZWFuIiwxMjU5OCwibmlldW5rb3JlYW4iLDEyNTk2LCJuaWV1bnBhbnNpb3Nrb3JlYW4iLDEyNjQ4LCJuaWV1bnBhcmVua29yZWFuIiwxMjgwMSwibmlldW5zaW9za29yZWFuIiwxMjY0NywibmlldW50aWtldXRrb3JlYW4iLDEyNjQ2LCJuaWhpcmFnYW5hIiwxMjM5NSwibmlrYXRha2FuYSIsMTI0OTEsIm5pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE0LCJuaWtoYWhpdGxlZnR0aGFpIiw2MzY0MSwibmlraGFoaXR0aGFpIiwzNjYxLCJuaW5lIiw1NywibmluZWFyYWJpYyIsMTY0MSwibmluZWJlbmdhbGkiLDI1NDMsIm5pbmVjaXJjbGUiLDkzMjAsIm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEzMCwibmluZWRldmEiLDI0MTUsIm5pbmVndWphcmF0aSIsMjc5OSwibmluZWd1cm11a2hpIiwyNjcxLCJuaW5laGFja2FyYWJpYyIsMTY0MSwibmluZWhhbmd6aG91IiwxMjMyOSwibmluZWlkZW9ncmFwaGljcGFyZW4iLDEyODQwLCJuaW5laW5mZXJpb3IiLDgzMjksIm5pbmVtb25vc3BhY2UiLDY1MzA1LCJuaW5lb2xkc3R5bGUiLDYzMjg5LCJuaW5lcGFyZW4iLDkzNDAsIm5pbmVwZXJpb2QiLDkzNjAsIm5pbmVwZXJzaWFuIiwxNzg1LCJuaW5lcm9tYW4iLDg1NjgsIm5pbmVzdXBlcmlvciIsODMxMywibmluZXRlZW5jaXJjbGUiLDkzMzAsIm5pbmV0ZWVucGFyZW4iLDkzNTAsIm5pbmV0ZWVucGVyaW9kIiw5MzcwLCJuaW5ldGhhaSIsMzY3MywibmoiLDQ2MCwibmplY3lyaWxsaWMiLDExMTQsIm5rYXRha2FuYSIsMTI1MzEsIm5rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzcsIm5sZWdyaWdodGxvbmciLDQxNCwibmxpbmViZWxvdyIsNzc1Mywibm1vbm9zcGFjZSIsNjUzNTgsIm5tc3F1YXJlIiwxMzIxMCwibm5hYmVuZ2FsaSIsMjQ2Nywibm5hZGV2YSIsMjMzOSwibm5hZ3VqYXJhdGkiLDI3MjMsIm5uYWd1cm11a2hpIiwyNTk1LCJubm5hZGV2YSIsMjM0NSwibm9oaXJhZ2FuYSIsMTIzOTgsIm5va2F0YWthbmEiLDEyNDk0LCJub2thdGFrYW5haGFsZndpZHRoIiw2NTQxNywibm9uYnJlYWtpbmdzcGFjZSIsMTYwLCJub25lbnRoYWkiLDM2MDMsIm5vbnV0aGFpIiwzNjA5LCJub29uYXJhYmljIiwxNjA2LCJub29uZmluYWxhcmFiaWMiLDY1MjU0LCJub29uZ2h1bm5hYXJhYmljIiwxNzIyLCJub29uZ2h1bm5hZmluYWxhcmFiaWMiLDY0NDE1LCJub29uaW5pdGlhbGFyYWJpYyIsNjUyNTUsIm5vb25qZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MjIsIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTg3LCJub29ubWVkaWFsYXJhYmljIiw2NTI1Niwibm9vbm1lZW1pbml0aWFsYXJhYmljIiw2NDcyNSwibm9vbm1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1OTAsIm5vb25ub29uZmluYWxhcmFiaWMiLDY0NjUzLCJub3Rjb250YWlucyIsODcxNiwibm90ZWxlbWVudCIsODcxMywibm90ZWxlbWVudG9mIiw4NzEzLCJub3RlcXVhbCIsODgwMCwibm90Z3JlYXRlciIsODgxNSwibm90Z3JlYXRlcm5vcmVxdWFsIiw4ODE3LCJub3RncmVhdGVybm9ybGVzcyIsODgyNSwibm90aWRlbnRpY2FsIiw4ODAyLCJub3RsZXNzIiw4ODE0LCJub3RsZXNzbm9yZXF1YWwiLDg4MTYsIm5vdHBhcmFsbGVsIiw4NzQyLCJub3RwcmVjZWRlcyIsODgzMiwibm90c3Vic2V0Iiw4ODM2LCJub3RzdWNjZWVkcyIsODgzMywibm90c3VwZXJzZXQiLDg4MzcsIm5vd2FybWVuaWFuIiwxMzk4LCJucGFyZW4iLDkzODUsIm5zc3F1YXJlIiwxMzIzMywibnN1cGVyaW9yIiw4MzE5LCJudGlsZGUiLDI0MSwibnUiLDk1NywibnVoaXJhZ2FuYSIsMTIzOTYsIm51a2F0YWthbmEiLDEyNDkyLCJudWthdGFrYW5haGFsZndpZHRoIiw2NTQxNSwibnVrdGFiZW5nYWxpIiwyNDkyLCJudWt0YWRldmEiLDIzNjQsIm51a3RhZ3VqYXJhdGkiLDI3NDgsIm51a3RhZ3VybXVraGkiLDI2MjAsIm51bWJlcnNpZ24iLDM1LCJudW1iZXJzaWdubW9ub3NwYWNlIiw2NTI4MywibnVtYmVyc2lnbnNtYWxsIiw2NTExOSwibnVtZXJhbHNpZ25ncmVlayIsODg0LCJudW1lcmFsc2lnbmxvd2VyZ3JlZWsiLDg4NSwibnVtZXJvIiw4NDcwLCJudW4iLDE1MDQsIm51bmRhZ2VzaCIsNjQzMjAsIm51bmRhZ2VzaGhlYnJldyIsNjQzMjAsIm51bmhlYnJldyIsMTUwNCwibnZzcXVhcmUiLDEzMjM3LCJud3NxdWFyZSIsMTMyNDMsIm55YWJlbmdhbGkiLDI0NjIsIm55YWRldmEiLDIzMzQsIm55YWd1amFyYXRpIiwyNzE4LCJueWFndXJtdWtoaSIsMjU5MCwibyIsMTExLCJvYWN1dGUiLDI0Mywib2FuZ3RoYWkiLDM2MjksIm9iYXJyZWQiLDYyOSwib2JhcnJlZGN5cmlsbGljIiwxMjU3LCJvYmFycmVkZGllcmVzaXNjeXJpbGxpYyIsMTI1OSwib2JlbmdhbGkiLDI0NTEsIm9ib3BvbW9mbyIsMTI1NzEsIm9icmV2ZSIsMzM1LCJvY2FuZHJhZGV2YSIsMjMyMSwib2NhbmRyYWd1amFyYXRpIiwyNzA1LCJvY2FuZHJhdm93ZWxzaWduZGV2YSIsMjM3Nywib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzYxLCJvY2Fyb24iLDQ2Niwib2NpcmNsZSIsOTQzOCwib2NpcmN1bWZsZXgiLDI0NCwib2NpcmN1bWZsZXhhY3V0ZSIsNzg4OSwib2NpcmN1bWZsZXhkb3RiZWxvdyIsNzg5Nywib2NpcmN1bWZsZXhncmF2ZSIsNzg5MSwib2NpcmN1bWZsZXhob29rYWJvdmUiLDc4OTMsIm9jaXJjdW1mbGV4dGlsZGUiLDc4OTUsIm9jeXJpbGxpYyIsMTA4Niwib2RibGFjdXRlIiwzMzcsIm9kYmxncmF2ZSIsNTI1LCJvZGV2YSIsMjMyMywib2RpZXJlc2lzIiwyNDYsIm9kaWVyZXNpc2N5cmlsbGljIiwxMjU1LCJvZG90YmVsb3ciLDc4ODUsIm9lIiwzMzksIm9la29yZWFuIiwxMjYzNCwib2dvbmVrIiw3MzEsIm9nb25la2NtYiIsODA4LCJvZ3JhdmUiLDI0Miwib2d1amFyYXRpIiwyNzA3LCJvaGFybWVuaWFuIiwxNDEzLCJvaGlyYWdhbmEiLDEyMzYyLCJvaG9va2Fib3ZlIiw3ODg3LCJvaG9ybiIsNDE3LCJvaG9ybmFjdXRlIiw3ODk5LCJvaG9ybmRvdGJlbG93Iiw3OTA3LCJvaG9ybmdyYXZlIiw3OTAxLCJvaG9ybmhvb2thYm92ZSIsNzkwMywib2hvcm50aWxkZSIsNzkwNSwib2h1bmdhcnVtbGF1dCIsMzM3LCJvaSIsNDE5LCJvaW52ZXJ0ZWRicmV2ZSIsNTI3LCJva2F0YWthbmEiLDEyNDU4LCJva2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk3LCJva29yZWFuIiwxMjYzMSwib2xlaGVicmV3IiwxNDUxLCJvbWFjcm9uIiwzMzMsIm9tYWNyb25hY3V0ZSIsNzc2Mywib21hY3JvbmdyYXZlIiw3NzYxLCJvbWRldmEiLDIzODQsIm9tZWdhIiw5NjksIm9tZWdhMSIsOTgyLCJvbWVnYWN5cmlsbGljIiwxMTIxLCJvbWVnYWxhdGluY2xvc2VkIiw2MzEsIm9tZWdhcm91bmRjeXJpbGxpYyIsMTE0Nywib21lZ2F0aXRsb2N5cmlsbGljIiwxMTQ5LCJvbWVnYXRvbm9zIiw5NzQsIm9tZ3VqYXJhdGkiLDI3NjgsIm9taWNyb24iLDk1OSwib21pY3JvbnRvbm9zIiw5NzIsIm9tb25vc3BhY2UiLDY1MzU5LCJvbmUiLDQ5LCJvbmVhcmFiaWMiLDE2MzMsIm9uZWJlbmdhbGkiLDI1MzUsIm9uZWNpcmNsZSIsOTMxMiwib25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiIsMTAxMjIsIm9uZWRldmEiLDI0MDcsIm9uZWRvdGVubGVhZGVyIiw4MjI4LCJvbmVlaWdodGgiLDg1MzksIm9uZWZpdHRlZCIsNjMxOTYsIm9uZWd1amFyYXRpIiwyNzkxLCJvbmVndXJtdWtoaSIsMjY2Mywib25laGFja2FyYWJpYyIsMTYzMywib25laGFsZiIsMTg5LCJvbmVoYW5nemhvdSIsMTIzMjEsIm9uZWlkZW9ncmFwaGljcGFyZW4iLDEyODMyLCJvbmVpbmZlcmlvciIsODMyMSwib25lbW9ub3NwYWNlIiw2NTI5Nywib25lbnVtZXJhdG9yYmVuZ2FsaSIsMjU0OCwib25lb2xkc3R5bGUiLDYzMjgxLCJvbmVwYXJlbiIsOTMzMiwib25lcGVyaW9kIiw5MzUyLCJvbmVwZXJzaWFuIiwxNzc3LCJvbmVxdWFydGVyIiwxODgsIm9uZXJvbWFuIiw4NTYwLCJvbmVzdXBlcmlvciIsMTg1LCJvbmV0aGFpIiwzNjY1LCJvbmV0aGlyZCIsODUzMSwib29nb25layIsNDkxLCJvb2dvbmVrbWFjcm9uIiw0OTMsIm9vZ3VybXVraGkiLDI1NzksIm9vbWF0cmFndXJtdWtoaSIsMjYzNSwib29wZW4iLDU5Niwib3BhcmVuIiw5Mzg2LCJvcGVuYnVsbGV0Iiw5NzAyLCJvcHRpb24iLDg5OTcsIm9yZGZlbWluaW5lIiwxNzAsIm9yZG1hc2N1bGluZSIsMTg2LCJvcnRob2dvbmFsIiw4NzM1LCJvc2hvcnRkZXZhIiwyMzIyLCJvc2hvcnR2b3dlbHNpZ25kZXZhIiwyMzc4LCJvc2xhc2giLDI0OCwib3NsYXNoYWN1dGUiLDUxMSwib3NtYWxsaGlyYWdhbmEiLDEyMzYxLCJvc21hbGxrYXRha2FuYSIsMTI0NTcsIm9zbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4Nywib3N0cm9rZWFjdXRlIiw1MTEsIm9zdXBlcmlvciIsNjMyMTYsIm90Y3lyaWxsaWMiLDExNTEsIm90aWxkZSIsMjQ1LCJvdGlsZGVhY3V0ZSIsNzc1Nywib3RpbGRlZGllcmVzaXMiLDc3NTksIm91Ym9wb21vZm8iLDEyNTc3LCJvdmVybGluZSIsODI1NCwib3ZlcmxpbmVjZW50ZXJsaW5lIiw2NTA5OCwib3ZlcmxpbmVjbWIiLDc3Mywib3ZlcmxpbmVkYXNoZWQiLDY1MDk3LCJvdmVybGluZWRibHdhdnkiLDY1MTAwLCJvdmVybGluZXdhdnkiLDY1MDk5LCJvdmVyc2NvcmUiLDE3NSwib3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MDcsIm92b3dlbHNpZ25kZXZhIiwyMzc5LCJvdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjMsInAiLDExMiwicGFhbXBzc3F1YXJlIiwxMzE4NCwicGFhc2VudG9zcXVhcmUiLDEzMDk5LCJwYWJlbmdhbGkiLDI0NzQsInBhY3V0ZSIsNzc2NSwicGFkZXZhIiwyMzQ2LCJwYWdlZG93biIsODY3MSwicGFnZXVwIiw4NjcwLCJwYWd1amFyYXRpIiwyNzMwLCJwYWd1cm11a2hpIiwyNjAyLCJwYWhpcmFnYW5hIiwxMjQwMSwicGFpeWFubm9pdGhhaSIsMzYzMSwicGFrYXRha2FuYSIsMTI0OTcsInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIiLDExNTYsInBhbG9jaGthY3lyaWxsaWMiLDEyMTYsInBhbnNpb3Nrb3JlYW4iLDEyNjcxLCJwYXJhZ3JhcGgiLDE4MiwicGFyYWxsZWwiLDg3NDEsInBhcmVubGVmdCIsNDAsInBhcmVubGVmdGFsdG9uZWFyYWJpYyIsNjQ4MzAsInBhcmVubGVmdGJ0Iiw2MzcyNSwicGFyZW5sZWZ0ZXgiLDYzNzI0LCJwYXJlbmxlZnRpbmZlcmlvciIsODMzMywicGFyZW5sZWZ0bW9ub3NwYWNlIiw2NTI4OCwicGFyZW5sZWZ0c21hbGwiLDY1MTEzLCJwYXJlbmxlZnRzdXBlcmlvciIsODMxNywicGFyZW5sZWZ0dHAiLDYzNzIzLCJwYXJlbmxlZnR2ZXJ0aWNhbCIsNjUwNzcsInBhcmVucmlnaHQiLDQxLCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljIiw2NDgzMSwicGFyZW5yaWdodGJ0Iiw2MzczNiwicGFyZW5yaWdodGV4Iiw2MzczNSwicGFyZW5yaWdodGluZmVyaW9yIiw4MzM0LCJwYXJlbnJpZ2h0bW9ub3NwYWNlIiw2NTI4OSwicGFyZW5yaWdodHNtYWxsIiw2NTExNCwicGFyZW5yaWdodHN1cGVyaW9yIiw4MzE4LCJwYXJlbnJpZ2h0dHAiLDYzNzM0LCJwYXJlbnJpZ2h0dmVydGljYWwiLDY1MDc4LCJwYXJ0aWFsZGlmZiIsODcwNiwicGFzZXFoZWJyZXciLDE0NzIsInBhc2h0YWhlYnJldyIsMTQzMywicGFzcXVhcmUiLDEzMjI1LCJwYXRhaCIsMTQ2MywicGF0YWgxMSIsMTQ2MywicGF0YWgxZCIsMTQ2MywicGF0YWgyYSIsMTQ2MywicGF0YWhoZWJyZXciLDE0NjMsInBhdGFobmFycm93aGVicmV3IiwxNDYzLCJwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NjMsInBhdGFod2lkZWhlYnJldyIsMTQ2MywicGF6ZXJoZWJyZXciLDE0NDEsInBib3BvbW9mbyIsMTI1NTAsInBjaXJjbGUiLDk0MzksInBkb3RhY2NlbnQiLDc3NjcsInBlIiwxNTA4LCJwZWN5cmlsbGljIiwxMDg3LCJwZWRhZ2VzaCIsNjQzMjQsInBlZGFnZXNoaGVicmV3Iiw2NDMyNCwicGVlemlzcXVhcmUiLDEzMTE1LCJwZWZpbmFsZGFnZXNoaGVicmV3Iiw2NDMyMywicGVoYXJhYmljIiwxNjYyLCJwZWhhcm1lbmlhbiIsMTQwMiwicGVoZWJyZXciLDE1MDgsInBlaGZpbmFsYXJhYmljIiw2NDM0MywicGVoaW5pdGlhbGFyYWJpYyIsNjQzNDQsInBlaGlyYWdhbmEiLDEyNDEwLCJwZWhtZWRpYWxhcmFiaWMiLDY0MzQ1LCJwZWthdGFrYW5hIiwxMjUwNiwicGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTEsInBlcmFmZWhlYnJldyIsNjQzMzQsInBlcmNlbnQiLDM3LCJwZXJjZW50YXJhYmljIiwxNjQyLCJwZXJjZW50bW9ub3NwYWNlIiw2NTI4NSwicGVyY2VudHNtYWxsIiw2NTEzMCwicGVyaW9kIiw0NiwicGVyaW9kYXJtZW5pYW4iLDE0MTcsInBlcmlvZGNlbnRlcmVkIiwxODMsInBlcmlvZGhhbGZ3aWR0aCIsNjUzNzcsInBlcmlvZGluZmVyaW9yIiw2MzIwNywicGVyaW9kbW9ub3NwYWNlIiw2NTI5NCwicGVyaW9kc21hbGwiLDY1MTA2LCJwZXJpb2RzdXBlcmlvciIsNjMyMDgsInBlcmlzcG9tZW5pZ3JlZWtjbWIiLDgzNCwicGVycGVuZGljdWxhciIsODg2OSwicGVydGhvdXNhbmQiLDgyNDAsInBlc2V0YSIsODM1OSwicGZzcXVhcmUiLDEzMTk0LCJwaGFiZW5nYWxpIiwyNDc1LCJwaGFkZXZhIiwyMzQ3LCJwaGFndWphcmF0aSIsMjczMSwicGhhZ3VybXVraGkiLDI2MDMsInBoaSIsOTY2LCJwaGkxIiw5ODEsInBoaWV1cGhhY2lyY2xla29yZWFuIiwxMjkyMiwicGhpZXVwaGFwYXJlbmtvcmVhbiIsMTI4MjYsInBoaWV1cGhjaXJjbGVrb3JlYW4iLDEyOTA4LCJwaGlldXBoa29yZWFuIiwxMjYyMSwicGhpZXVwaHBhcmVua29yZWFuIiwxMjgxMiwicGhpbGF0aW4iLDYzMiwicGhpbnRodXRoYWkiLDM2NDIsInBoaXN5bWJvbGdyZWVrIiw5ODEsInBob29rIiw0MjEsInBob3BoYW50aGFpIiwzNjE0LCJwaG9waHVuZ3RoYWkiLDM2MTIsInBob3NhbXBoYW90aGFpIiwzNjE2LCJwaSIsOTYwLCJwaWV1cGFjaXJjbGVrb3JlYW4iLDEyOTE1LCJwaWV1cGFwYXJlbmtvcmVhbiIsMTI4MTksInBpZXVwY2lldWNrb3JlYW4iLDEyNjYyLCJwaWV1cGNpcmNsZWtvcmVhbiIsMTI5MDEsInBpZXVwa2l5ZW9ra29yZWFuIiwxMjY1OCwicGlldXBrb3JlYW4iLDEyNjEwLCJwaWV1cHBhcmVua29yZWFuIiwxMjgwNSwicGlldXBzaW9za2l5ZW9ra29yZWFuIiwxMjY2MCwicGlldXBzaW9za29yZWFuIiwxMjYxMiwicGlldXBzaW9zdGlrZXV0a29yZWFuIiwxMjY2MSwicGlldXB0aGlldXRoa29yZWFuIiwxMjY2MywicGlldXB0aWtldXRrb3JlYW4iLDEyNjU5LCJwaWhpcmFnYW5hIiwxMjQwNCwicGlrYXRha2FuYSIsMTI1MDAsInBpc3ltYm9sZ3JlZWsiLDk4MiwicGl3cmFybWVuaWFuIiwxNDExLCJwbHVzIiw0MywicGx1c2JlbG93Y21iIiw3OTksInBsdXNjaXJjbGUiLDg4NTMsInBsdXNtaW51cyIsMTc3LCJwbHVzbW9kIiw3MjYsInBsdXNtb25vc3BhY2UiLDY1MjkxLCJwbHVzc21hbGwiLDY1MTIyLCJwbHVzc3VwZXJpb3IiLDgzMTQsInBtb25vc3BhY2UiLDY1MzYwLCJwbXNxdWFyZSIsMTMyNzIsInBvaGlyYWdhbmEiLDEyNDEzLCJwb2ludGluZ2luZGV4ZG93bndoaXRlIiw5NzU5LCJwb2ludGluZ2luZGV4bGVmdHdoaXRlIiw5NzU2LCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZSIsOTc1OCwicG9pbnRpbmdpbmRleHVwd2hpdGUiLDk3NTcsInBva2F0YWthbmEiLDEyNTA5LCJwb3BsYXRoYWkiLDM2MTEsInBvc3RhbG1hcmsiLDEyMzA2LCJwb3N0YWxtYXJrZmFjZSIsMTIzMjAsInBwYXJlbiIsOTM4NywicHJlY2VkZXMiLDg4MjYsInByZXNjcmlwdGlvbiIsODQ3OCwicHJpbWVtb2QiLDY5NywicHJpbWVyZXZlcnNlZCIsODI0NSwicHJvZHVjdCIsODcxOSwicHJvamVjdGl2ZSIsODk2NSwicHJvbG9uZ2Vka2FuYSIsMTI1NDAsInByb3BlbGxvciIsODk4NCwicHJvcGVyc3Vic2V0Iiw4ODM0LCJwcm9wZXJzdXBlcnNldCIsODgzNSwicHJvcG9ydGlvbiIsODc1OSwicHJvcG9ydGlvbmFsIiw4NzMzLCJwc2kiLDk2OCwicHNpY3lyaWxsaWMiLDExMzcsInBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1OCwicHNzcXVhcmUiLDEzMjMyLCJwdWhpcmFnYW5hIiwxMjQwNywicHVrYXRha2FuYSIsMTI1MDMsInB2c3F1YXJlIiwxMzIzNiwicHdzcXVhcmUiLDEzMjQyLCJxIiwxMTMsInFhZGV2YSIsMjM5MiwicWFkbWFoZWJyZXciLDE0NDgsInFhZmFyYWJpYyIsMTYwMiwicWFmZmluYWxhcmFiaWMiLDY1MjM4LCJxYWZpbml0aWFsYXJhYmljIiw2NTIzOSwicWFmbWVkaWFsYXJhYmljIiw2NTI0MCwicWFtYXRzIiwxNDY0LCJxYW1hdHMxMCIsMTQ2NCwicWFtYXRzMWEiLDE0NjQsInFhbWF0czFjIiwxNDY0LCJxYW1hdHMyNyIsMTQ2NCwicWFtYXRzMjkiLDE0NjQsInFhbWF0czMzIiwxNDY0LCJxYW1hdHNkZSIsMTQ2NCwicWFtYXRzaGVicmV3IiwxNDY0LCJxYW1hdHNuYXJyb3doZWJyZXciLDE0NjQsInFhbWF0c3FhdGFuaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJldyIsMTQ2NCwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbndpZGVoZWJyZXciLDE0NjQsInFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NjQsInFhbWF0c3dpZGVoZWJyZXciLDE0NjQsInFhcm5leXBhcmFoZWJyZXciLDE0MzksInFib3BvbW9mbyIsMTI1NjEsInFjaXJjbGUiLDk0NDAsInFob29rIiw2NzIsInFtb25vc3BhY2UiLDY1MzYxLCJxb2YiLDE1MTEsInFvZmRhZ2VzaCIsNjQzMjcsInFvZmRhZ2VzaGhlYnJldyIsNjQzMjcsInFvZmhlYnJldyIsMTUxMSwicXBhcmVuIiw5Mzg4LCJxdWFydGVybm90ZSIsOTgzMywicXVidXRzIiwxNDY3LCJxdWJ1dHMxOCIsMTQ2NywicXVidXRzMjUiLDE0NjcsInF1YnV0czMxIiwxNDY3LCJxdWJ1dHNoZWJyZXciLDE0NjcsInF1YnV0c25hcnJvd2hlYnJldyIsMTQ2NywicXVidXRzcXVhcnRlcmhlYnJldyIsMTQ2NywicXVidXRzd2lkZWhlYnJldyIsMTQ2NywicXVlc3Rpb24iLDYzLCJxdWVzdGlvbmFyYWJpYyIsMTU2NywicXVlc3Rpb25hcm1lbmlhbiIsMTM3NCwicXVlc3Rpb25kb3duIiwxOTEsInF1ZXN0aW9uZG93bnNtYWxsIiw2MzQyMywicXVlc3Rpb25ncmVlayIsODk0LCJxdWVzdGlvbm1vbm9zcGFjZSIsNjUzMTEsInF1ZXN0aW9uc21hbGwiLDYzMjk1LCJxdW90ZWRibCIsMzQsInF1b3RlZGJsYmFzZSIsODIyMiwicXVvdGVkYmxsZWZ0Iiw4MjIwLCJxdW90ZWRibG1vbm9zcGFjZSIsNjUyODIsInF1b3RlZGJscHJpbWUiLDEyMzE4LCJxdW90ZWRibHByaW1lcmV2ZXJzZWQiLDEyMzE3LCJxdW90ZWRibHJpZ2h0Iiw4MjIxLCJxdW90ZWxlZnQiLDgyMTYsInF1b3RlbGVmdHJldmVyc2VkIiw4MjE5LCJxdW90ZXJldmVyc2VkIiw4MjE5LCJxdW90ZXJpZ2h0Iiw4MjE3LCJxdW90ZXJpZ2h0biIsMzI5LCJxdW90ZXNpbmdsYmFzZSIsODIxOCwicXVvdGVzaW5nbGUiLDM5LCJxdW90ZXNpbmdsZW1vbm9zcGFjZSIsNjUyODcsInIiLDExNCwicmFhcm1lbmlhbiIsMTQwNCwicmFiZW5nYWxpIiwyNDgwLCJyYWN1dGUiLDM0MSwicmFkZXZhIiwyMzUyLCJyYWRpY2FsIiw4NzMwLCJyYWRpY2FsZXgiLDYzNzE3LCJyYWRvdmVyc3NxdWFyZSIsMTMyMzAsInJhZG92ZXJzc3F1YXJlZHNxdWFyZSIsMTMyMzEsInJhZHNxdWFyZSIsMTMyMjksInJhZmUiLDE0NzEsInJhZmVoZWJyZXciLDE0NzEsInJhZ3VqYXJhdGkiLDI3MzYsInJhZ3VybXVraGkiLDI2MDgsInJhaGlyYWdhbmEiLDEyNDI1LCJyYWthdGFrYW5hIiwxMjUyMSwicmFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzEsInJhbG93ZXJkaWFnb25hbGJlbmdhbGkiLDI1NDUsInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpIiwyNTQ0LCJyYW1zaG9ybiIsNjEyLCJyYXRpbyIsODc1OCwicmJvcG9tb2ZvIiwxMjU2NiwicmNhcm9uIiwzNDUsInJjZWRpbGxhIiwzNDMsInJjaXJjbGUiLDk0NDEsInJjb21tYWFjY2VudCIsMzQzLCJyZGJsZ3JhdmUiLDUyOSwicmRvdGFjY2VudCIsNzc2OSwicmRvdGJlbG93Iiw3NzcxLCJyZG90YmVsb3dtYWNyb24iLDc3NzMsInJlZmVyZW5jZW1hcmsiLDgyNTEsInJlZmxleHN1YnNldCIsODgzOCwicmVmbGV4c3VwZXJzZXQiLDg4MzksInJlZ2lzdGVyZWQiLDE3NCwicmVnaXN0ZXJzYW5zIiw2MzcyMCwicmVnaXN0ZXJzZXJpZiIsNjMxOTQsInJlaGFyYWJpYyIsMTU4NSwicmVoYXJtZW5pYW4iLDE0MDgsInJlaGZpbmFsYXJhYmljIiw2NTE5OCwicmVoaXJhZ2FuYSIsMTI0MjgsInJla2F0YWthbmEiLDEyNTI0LCJyZWthdGFrYW5haGFsZndpZHRoIiw2NTQzNCwicmVzaCIsMTUxMiwicmVzaGRhZ2VzaGhlYnJldyIsNjQzMjgsInJlc2hoZWJyZXciLDE1MTIsInJldmVyc2VkdGlsZGUiLDg3NjUsInJldmlhaGVicmV3IiwxNDMxLCJyZXZpYW11Z3Jhc2hoZWJyZXciLDE0MzEsInJldmxvZ2ljYWxub3QiLDg5NzYsInJmaXNoaG9vayIsNjM4LCJyZmlzaGhvb2tyZXZlcnNlZCIsNjM5LCJyaGFiZW5nYWxpIiwyNTI1LCJyaGFkZXZhIiwyMzk3LCJyaG8iLDk2MSwicmhvb2siLDYzNywicmhvb2t0dXJuZWQiLDYzNSwicmhvb2t0dXJuZWRzdXBlcmlvciIsNjkzLCJyaG9zeW1ib2xncmVlayIsMTAwOSwicmhvdGljaG9va21vZCIsNzM0LCJyaWV1bGFjaXJjbGVrb3JlYW4iLDEyOTEzLCJyaWV1bGFwYXJlbmtvcmVhbiIsMTI4MTcsInJpZXVsY2lyY2xla29yZWFuIiwxMjg5OSwicmlldWxoaWV1aGtvcmVhbiIsMTI2MDgsInJpZXVsa2l5ZW9ra29yZWFuIiwxMjYwMiwicmlldWxraXllb2tzaW9za29yZWFuIiwxMjY0OSwicmlldWxrb3JlYW4iLDEyNjAxLCJyaWV1bG1pZXVta29yZWFuIiwxMjYwMywicmlldWxwYW5zaW9za29yZWFuIiwxMjY1MiwicmlldWxwYXJlbmtvcmVhbiIsMTI4MDMsInJpZXVscGhpZXVwaGtvcmVhbiIsMTI2MDcsInJpZXVscGlldXBrb3JlYW4iLDEyNjA0LCJyaWV1bHBpZXVwc2lvc2tvcmVhbiIsMTI2NTEsInJpZXVsc2lvc2tvcmVhbiIsMTI2MDUsInJpZXVsdGhpZXV0aGtvcmVhbiIsMTI2MDYsInJpZXVsdGlrZXV0a29yZWFuIiwxMjY1MCwicmlldWx5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NTMsInJpZ2h0YW5nbGUiLDg3MzUsInJpZ2h0dGFja2JlbG93Y21iIiw3OTMsInJpZ2h0dHJpYW5nbGUiLDg4OTUsInJpaGlyYWdhbmEiLDEyNDI2LCJyaWthdGFrYW5hIiwxMjUyMiwicmlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzIsInJpbmciLDczMCwicmluZ2JlbG93Y21iIiw4MDUsInJpbmdjbWIiLDc3OCwicmluZ2hhbGZsZWZ0Iiw3MDMsInJpbmdoYWxmbGVmdGFybWVuaWFuIiwxMzY5LCJyaW5naGFsZmxlZnRiZWxvd2NtYiIsNzk2LCJyaW5naGFsZmxlZnRjZW50ZXJlZCIsNzIzLCJyaW5naGFsZnJpZ2h0Iiw3MDIsInJpbmdoYWxmcmlnaHRiZWxvd2NtYiIsODI1LCJyaW5naGFsZnJpZ2h0Y2VudGVyZWQiLDcyMiwicmludmVydGVkYnJldmUiLDUzMSwicml0dG9ydXNxdWFyZSIsMTMxMzcsInJsaW5lYmVsb3ciLDc3NzUsInJsb25nbGVnIiw2MzYsInJsb25nbGVndHVybmVkIiw2MzQsInJtb25vc3BhY2UiLDY1MzYyLCJyb2hpcmFnYW5hIiwxMjQyOSwicm9rYXRha2FuYSIsMTI1MjUsInJva2F0YWthbmFoYWxmd2lkdGgiLDY1NDM1LCJyb3J1YXRoYWkiLDM2MTksInJwYXJlbiIsOTM4OSwicnJhYmVuZ2FsaSIsMjUyNCwicnJhZGV2YSIsMjM1MywicnJhZ3VybXVraGkiLDI2NTIsInJyZWhhcmFiaWMiLDE2ODEsInJyZWhmaW5hbGFyYWJpYyIsNjQzOTcsInJydm9jYWxpY2JlbmdhbGkiLDI1MjgsInJydm9jYWxpY2RldmEiLDI0MDAsInJydm9jYWxpY2d1amFyYXRpIiwyNzg0LCJycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNTAwLCJycnZvY2FsaWN2b3dlbHNpZ25kZXZhIiwyMzcyLCJycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aSIsMjc1NiwicnN1cGVyaW9yIiw2MzIxNywicnRibG9jayIsOTYxNiwicnR1cm5lZCIsNjMzLCJydHVybmVkc3VwZXJpb3IiLDY5MiwicnVoaXJhZ2FuYSIsMTI0MjcsInJ1a2F0YWthbmEiLDEyNTIzLCJydWthdGFrYW5haGFsZndpZHRoIiw2NTQzMywicnVwZWVtYXJrYmVuZ2FsaSIsMjU0NiwicnVwZWVzaWduYmVuZ2FsaSIsMjU0NywicnVwaWFoIiw2MzE5NywicnV0aGFpIiwzNjIwLCJydm9jYWxpY2JlbmdhbGkiLDI0NDMsInJ2b2NhbGljZGV2YSIsMjMxNSwicnZvY2FsaWNndWphcmF0aSIsMjY5OSwicnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNDk5LCJydm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDIzNzEsInJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTUsInMiLDExNSwic2FiZW5nYWxpIiwyNDg4LCJzYWN1dGUiLDM0Nywic2FjdXRlZG90YWNjZW50Iiw3NzgxLCJzYWRhcmFiaWMiLDE1ODksInNhZGV2YSIsMjM2MCwic2FkZmluYWxhcmFiaWMiLDY1MjEwLCJzYWRpbml0aWFsYXJhYmljIiw2NTIxMSwic2FkbWVkaWFsYXJhYmljIiw2NTIxMiwic2FndWphcmF0aSIsMjc0NCwic2FndXJtdWtoaSIsMjYxNiwic2FoaXJhZ2FuYSIsMTIzNzMsInNha2F0YWthbmEiLDEyNDY5LCJzYWthdGFrYW5haGFsZndpZHRoIiw2NTQwMywic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyIsNjUwMTgsInNhbWVraCIsMTUwNSwic2FtZWtoZGFnZXNoIiw2NDMyMSwic2FtZWtoZGFnZXNoaGVicmV3Iiw2NDMyMSwic2FtZWtoaGVicmV3IiwxNTA1LCJzYXJhYWF0aGFpIiwzNjM0LCJzYXJhYWV0aGFpIiwzNjQ5LCJzYXJhYWltYWltYWxhaXRoYWkiLDM2NTIsInNhcmFhaW1haW11YW50aGFpIiwzNjUxLCJzYXJhYW10aGFpIiwzNjM1LCJzYXJhYXRoYWkiLDM2MzIsInNhcmFldGhhaSIsMzY0OCwic2FyYWlpbGVmdHRoYWkiLDYzNjIyLCJzYXJhaWl0aGFpIiwzNjM3LCJzYXJhaWxlZnR0aGFpIiw2MzYyMSwic2FyYWl0aGFpIiwzNjM2LCJzYXJhb3RoYWkiLDM2NTAsInNhcmF1ZWVsZWZ0dGhhaSIsNjM2MjQsInNhcmF1ZWV0aGFpIiwzNjM5LCJzYXJhdWVsZWZ0dGhhaSIsNjM2MjMsInNhcmF1ZXRoYWkiLDM2MzgsInNhcmF1dGhhaSIsMzY0MCwic2FyYXV1dGhhaSIsMzY0MSwic2JvcG9tb2ZvIiwxMjU2OSwic2Nhcm9uIiwzNTMsInNjYXJvbmRvdGFjY2VudCIsNzc4Mywic2NlZGlsbGEiLDM1MSwic2Nod2EiLDYwMSwic2Nod2FjeXJpbGxpYyIsMTI0MSwic2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQzLCJzY2h3YWhvb2siLDYwMiwic2NpcmNsZSIsOTQ0Miwic2NpcmN1bWZsZXgiLDM0OSwic2NvbW1hYWNjZW50Iiw1MzcsInNkb3RhY2NlbnQiLDc3NzcsInNkb3RiZWxvdyIsNzc3OSwic2RvdGJlbG93ZG90YWNjZW50Iiw3Nzg1LCJzZWFndWxsYmVsb3djbWIiLDgyOCwic2Vjb25kIiw4MjQzLCJzZWNvbmR0b25lY2hpbmVzZSIsNzE0LCJzZWN0aW9uIiwxNjcsInNlZW5hcmFiaWMiLDE1ODcsInNlZW5maW5hbGFyYWJpYyIsNjUyMDIsInNlZW5pbml0aWFsYXJhYmljIiw2NTIwMywic2Vlbm1lZGlhbGFyYWJpYyIsNjUyMDQsInNlZ29sIiwxNDYyLCJzZWdvbDEzIiwxNDYyLCJzZWdvbDFmIiwxNDYyLCJzZWdvbDJjIiwxNDYyLCJzZWdvbGhlYnJldyIsMTQ2Miwic2Vnb2xuYXJyb3doZWJyZXciLDE0NjIsInNlZ29scXVhcnRlcmhlYnJldyIsMTQ2Miwic2Vnb2x0YWhlYnJldyIsMTQyNiwic2Vnb2x3aWRlaGVicmV3IiwxNDYyLCJzZWhhcm1lbmlhbiIsMTQwNSwic2VoaXJhZ2FuYSIsMTIzNzksInNla2F0YWthbmEiLDEyNDc1LCJzZWthdGFrYW5haGFsZndpZHRoIiw2NTQwNiwic2VtaWNvbG9uIiw1OSwic2VtaWNvbG9uYXJhYmljIiwxNTYzLCJzZW1pY29sb25tb25vc3BhY2UiLDY1MzA3LCJzZW1pY29sb25zbWFsbCIsNjUxMDgsInNlbWl2b2ljZWRtYXJra2FuYSIsMTI0NDQsInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCIsNjU0MzksInNlbnRpc3F1YXJlIiwxMzA5MCwic2VudG9zcXVhcmUiLDEzMDkxLCJzZXZlbiIsNTUsInNldmVuYXJhYmljIiwxNjM5LCJzZXZlbmJlbmdhbGkiLDI1NDEsInNldmVuY2lyY2xlIiw5MzE4LCJzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI4LCJzZXZlbmRldmEiLDI0MTMsInNldmVuZWlnaHRocyIsODU0Miwic2V2ZW5ndWphcmF0aSIsMjc5Nywic2V2ZW5ndXJtdWtoaSIsMjY2OSwic2V2ZW5oYWNrYXJhYmljIiwxNjM5LCJzZXZlbmhhbmd6aG91IiwxMjMyNywic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOCwic2V2ZW5pbmZlcmlvciIsODMyNywic2V2ZW5tb25vc3BhY2UiLDY1MzAzLCJzZXZlbm9sZHN0eWxlIiw2MzI4Nywic2V2ZW5wYXJlbiIsOTMzOCwic2V2ZW5wZXJpb2QiLDkzNTgsInNldmVucGVyc2lhbiIsMTc4Mywic2V2ZW5yb21hbiIsODU2Niwic2V2ZW5zdXBlcmlvciIsODMxMSwic2V2ZW50ZWVuY2lyY2xlIiw5MzI4LCJzZXZlbnRlZW5wYXJlbiIsOTM0OCwic2V2ZW50ZWVucGVyaW9kIiw5MzY4LCJzZXZlbnRoYWkiLDM2NzEsInNmdGh5cGhlbiIsMTczLCJzaGFhcm1lbmlhbiIsMTM5OSwic2hhYmVuZ2FsaSIsMjQ4Niwic2hhY3lyaWxsaWMiLDEwOTYsInNoYWRkYWFyYWJpYyIsMTYxNywic2hhZGRhZGFtbWFhcmFiaWMiLDY0NjA5LCJzaGFkZGFkYW1tYXRhbmFyYWJpYyIsNjQ2MDYsInNoYWRkYWZhdGhhYXJhYmljIiw2NDYwOCwic2hhZGRha2FzcmFhcmFiaWMiLDY0NjEwLCJzaGFkZGFrYXNyYXRhbmFyYWJpYyIsNjQ2MDcsInNoYWRlIiw5NjE4LCJzaGFkZWRhcmsiLDk2MTksInNoYWRlbGlnaHQiLDk2MTcsInNoYWRlbWVkaXVtIiw5NjE4LCJzaGFkZXZhIiwyMzU4LCJzaGFndWphcmF0aSIsMjc0Miwic2hhZ3VybXVraGkiLDI2MTQsInNoYWxzaGVsZXRoZWJyZXciLDE0MjcsInNoYm9wb21vZm8iLDEyNTY1LCJzaGNoYWN5cmlsbGljIiwxMDk3LCJzaGVlbmFyYWJpYyIsMTU4OCwic2hlZW5maW5hbGFyYWJpYyIsNjUyMDYsInNoZWVuaW5pdGlhbGFyYWJpYyIsNjUyMDcsInNoZWVubWVkaWFsYXJhYmljIiw2NTIwOCwic2hlaWNvcHRpYyIsOTk1LCJzaGVxZWwiLDgzNjIsInNoZXFlbGhlYnJldyIsODM2Miwic2hldmEiLDE0NTYsInNoZXZhMTE1IiwxNDU2LCJzaGV2YTE1IiwxNDU2LCJzaGV2YTIyIiwxNDU2LCJzaGV2YTJlIiwxNDU2LCJzaGV2YWhlYnJldyIsMTQ1Niwic2hldmFuYXJyb3doZWJyZXciLDE0NTYsInNoZXZhcXVhcnRlcmhlYnJldyIsMTQ1Niwic2hldmF3aWRlaGVicmV3IiwxNDU2LCJzaGhhY3lyaWxsaWMiLDEyMTEsInNoaW1hY29wdGljIiwxMDA1LCJzaGluIiwxNTEzLCJzaGluZGFnZXNoIiw2NDMyOSwic2hpbmRhZ2VzaGhlYnJldyIsNjQzMjksInNoaW5kYWdlc2hzaGluZG90Iiw2NDMwMCwic2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXciLDY0MzAwLCJzaGluZGFnZXNoc2luZG90Iiw2NDMwMSwic2hpbmRhZ2VzaHNpbmRvdGhlYnJldyIsNjQzMDEsInNoaW5kb3RoZWJyZXciLDE0NzMsInNoaW5oZWJyZXciLDE1MTMsInNoaW5zaGluZG90Iiw2NDI5OCwic2hpbnNoaW5kb3RoZWJyZXciLDY0Mjk4LCJzaGluc2luZG90Iiw2NDI5OSwic2hpbnNpbmRvdGhlYnJldyIsNjQyOTksInNob29rIiw2NDIsInNpZ21hIiw5NjMsInNpZ21hMSIsOTYyLCJzaWdtYWZpbmFsIiw5NjIsInNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsiLDEwMTAsInNpaGlyYWdhbmEiLDEyMzc1LCJzaWthdGFrYW5hIiwxMjQ3MSwic2lrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDQsInNpbHVxaGVicmV3IiwxNDY5LCJzaWx1cWxlZnRoZWJyZXciLDE0NjksInNpbWlsYXIiLDg3NjQsInNpbmRvdGhlYnJldyIsMTQ3NCwic2lvc2FjaXJjbGVrb3JlYW4iLDEyOTE2LCJzaW9zYXBhcmVua29yZWFuIiwxMjgyMCwic2lvc2NpZXVja29yZWFuIiwxMjY3MCwic2lvc2NpcmNsZWtvcmVhbiIsMTI5MDIsInNpb3NraXllb2trb3JlYW4iLDEyNjY2LCJzaW9za29yZWFuIiwxMjYxMywic2lvc25pZXVua29yZWFuIiwxMjY2Nywic2lvc3BhcmVua29yZWFuIiwxMjgwNiwic2lvc3BpZXVwa29yZWFuIiwxMjY2OSwic2lvc3Rpa2V1dGtvcmVhbiIsMTI2NjgsInNpeCIsNTQsInNpeGFyYWJpYyIsMTYzOCwic2l4YmVuZ2FsaSIsMjU0MCwic2l4Y2lyY2xlIiw5MzE3LCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNywic2l4ZGV2YSIsMjQxMiwic2l4Z3VqYXJhdGkiLDI3OTYsInNpeGd1cm11a2hpIiwyNjY4LCJzaXhoYWNrYXJhYmljIiwxNjM4LCJzaXhoYW5nemhvdSIsMTIzMjYsInNpeGlkZW9ncmFwaGljcGFyZW4iLDEyODM3LCJzaXhpbmZlcmlvciIsODMyNiwic2l4bW9ub3NwYWNlIiw2NTMwMiwic2l4b2xkc3R5bGUiLDYzMjg2LCJzaXhwYXJlbiIsOTMzNywic2l4cGVyaW9kIiw5MzU3LCJzaXhwZXJzaWFuIiwxNzgyLCJzaXhyb21hbiIsODU2NSwic2l4c3VwZXJpb3IiLDgzMTAsInNpeHRlZW5jaXJjbGUiLDkzMjcsInNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSIsMjU1Mywic2l4dGVlbnBhcmVuIiw5MzQ3LCJzaXh0ZWVucGVyaW9kIiw5MzY3LCJzaXh0aGFpIiwzNjcwLCJzbGFzaCIsNDcsInNsYXNobW9ub3NwYWNlIiw2NTI5NSwic2xvbmciLDM4Mywic2xvbmdkb3RhY2NlbnQiLDc4MzUsInNtaWxlZmFjZSIsOTc4Niwic21vbm9zcGFjZSIsNjUzNjMsInNvZnBhc3VxaGVicmV3IiwxNDc1LCJzb2Z0aHlwaGVuIiwxNzMsInNvZnRzaWduY3lyaWxsaWMiLDExMDAsInNvaGlyYWdhbmEiLDEyMzgxLCJzb2thdGFrYW5hIiwxMjQ3Nywic29rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDcsInNvbGlkdXNsb25nb3ZlcmxheWNtYiIsODI0LCJzb2xpZHVzc2hvcnRvdmVybGF5Y21iIiw4MjMsInNvcnVzaXRoYWkiLDM2MjUsInNvc2FsYXRoYWkiLDM2MjQsInNvc290aGFpIiwzNTk1LCJzb3N1YXRoYWkiLDM2MjYsInNwYWNlIiwzMiwic3BhY2VoYWNrYXJhYmljIiwzMiwic3BhZGUiLDk4MjQsInNwYWRlc3VpdGJsYWNrIiw5ODI0LCJzcGFkZXN1aXR3aGl0ZSIsOTgyOCwic3BhcmVuIiw5MzkwLCJzcXVhcmViZWxvd2NtYiIsODI3LCJzcXVhcmVjYyIsMTMyNTIsInNxdWFyZWNtIiwxMzIxMywic3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTY0MSwic3F1YXJlaG9yaXpvbnRhbGZpbGwiLDk2MzYsInNxdWFyZWtnIiwxMzE5OSwic3F1YXJla20iLDEzMjE0LCJzcXVhcmVrbWNhcGl0YWwiLDEzMjYyLCJzcXVhcmVsbiIsMTMyNjUsInNxdWFyZWxvZyIsMTMyNjYsInNxdWFyZW1nIiwxMzE5OCwic3F1YXJlbWlsIiwxMzI2OSwic3F1YXJlbW0iLDEzMjEyLCJzcXVhcmVtc3F1YXJlZCIsMTMyMTcsInNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTYzOCwic3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCIsOTYzOSwic3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCIsOTY0MCwic3F1YXJldmVydGljYWxmaWxsIiw5NjM3LCJzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrIiw5NjM1LCJzcnNxdWFyZSIsMTMyNzUsInNzYWJlbmdhbGkiLDI0ODcsInNzYWRldmEiLDIzNTksInNzYWd1amFyYXRpIiwyNzQzLCJzc2FuZ2NpZXVja29yZWFuIiwxMjYxNywic3NhbmdoaWV1aGtvcmVhbiIsMTI2NzcsInNzYW5naWV1bmdrb3JlYW4iLDEyNjcyLCJzc2FuZ2tpeWVva2tvcmVhbiIsMTI1OTQsInNzYW5nbmlldW5rb3JlYW4iLDEyNjQ1LCJzc2FuZ3BpZXVwa29yZWFuIiwxMjYxMSwic3NhbmdzaW9za29yZWFuIiwxMjYxNCwic3Nhbmd0aWtldXRrb3JlYW4iLDEyNjAwLCJzc3VwZXJpb3IiLDYzMjE4LCJzdGVybGluZyIsMTYzLCJzdGVybGluZ21vbm9zcGFjZSIsNjU1MDUsInN0cm9rZWxvbmdvdmVybGF5Y21iIiw4MjIsInN0cm9rZXNob3J0b3ZlcmxheWNtYiIsODIxLCJzdWJzZXQiLDg4MzQsInN1YnNldG5vdGVxdWFsIiw4ODQyLCJzdWJzZXRvcmVxdWFsIiw4ODM4LCJzdWNjZWVkcyIsODgyNywic3VjaHRoYXQiLDg3MTUsInN1aGlyYWdhbmEiLDEyMzc3LCJzdWthdGFrYW5hIiwxMjQ3Mywic3VrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDUsInN1a3VuYXJhYmljIiwxNjE4LCJzdW1tYXRpb24iLDg3MjEsInN1biIsOTc4OCwic3VwZXJzZXQiLDg4MzUsInN1cGVyc2V0bm90ZXF1YWwiLDg4NDMsInN1cGVyc2V0b3JlcXVhbCIsODgzOSwic3ZzcXVhcmUiLDEzMjc2LCJzeW91d2FlcmFzcXVhcmUiLDEzMTgwLCJ0IiwxMTYsInRhYmVuZ2FsaSIsMjQ2OCwidGFja2Rvd24iLDg4NjgsInRhY2tsZWZ0Iiw4ODY3LCJ0YWRldmEiLDIzNDAsInRhZ3VqYXJhdGkiLDI3MjQsInRhZ3VybXVraGkiLDI1OTYsInRhaGFyYWJpYyIsMTU5MSwidGFoZmluYWxhcmFiaWMiLDY1MjE4LCJ0YWhpbml0aWFsYXJhYmljIiw2NTIxOSwidGFoaXJhZ2FuYSIsMTIzODMsInRhaG1lZGlhbGFyYWJpYyIsNjUyMjAsInRhaXN5b3VlcmFzcXVhcmUiLDEzMTgxLCJ0YWthdGFrYW5hIiwxMjQ3OSwidGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDgsInRhdHdlZWxhcmFiaWMiLDE2MDAsInRhdSIsOTY0LCJ0YXYiLDE1MTQsInRhdmRhZ2VzIiw2NDMzMCwidGF2ZGFnZXNoIiw2NDMzMCwidGF2ZGFnZXNoaGVicmV3Iiw2NDMzMCwidGF2aGVicmV3IiwxNTE0LCJ0YmFyIiwzNTksInRib3BvbW9mbyIsMTI1NTQsInRjYXJvbiIsMzU3LCJ0Y2N1cmwiLDY4MCwidGNlZGlsbGEiLDM1NSwidGNoZWhhcmFiaWMiLDE2NzAsInRjaGVoZmluYWxhcmFiaWMiLDY0Mzc5LCJ0Y2hlaGluaXRpYWxhcmFiaWMiLDY0MzgwLCJ0Y2hlaG1lZGlhbGFyYWJpYyIsNjQzODEsInRjaXJjbGUiLDk0NDMsInRjaXJjdW1mbGV4YmVsb3ciLDc3OTMsInRjb21tYWFjY2VudCIsMzU1LCJ0ZGllcmVzaXMiLDc4MzEsInRkb3RhY2NlbnQiLDc3ODcsInRkb3RiZWxvdyIsNzc4OSwidGVjeXJpbGxpYyIsMTA5MCwidGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NywidGVoYXJhYmljIiwxNTc4LCJ0ZWhmaW5hbGFyYWJpYyIsNjUxNzQsInRlaGhhaGluaXRpYWxhcmFiaWMiLDY0Njc0LCJ0ZWhoYWhpc29sYXRlZGFyYWJpYyIsNjQ1MjQsInRlaGluaXRpYWxhcmFiaWMiLDY1MTc1LCJ0ZWhpcmFnYW5hIiwxMjM5MCwidGVoamVlbWluaXRpYWxhcmFiaWMiLDY0NjczLCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIzLCJ0ZWhtYXJidXRhYXJhYmljIiwxNTc3LCJ0ZWhtYXJidXRhZmluYWxhcmFiaWMiLDY1MTcyLCJ0ZWhtZWRpYWxhcmFiaWMiLDY1MTc2LCJ0ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ2NzYsInRlaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1MjYsInRlaG5vb25maW5hbGFyYWJpYyIsNjQ2MjcsInRla2F0YWthbmEiLDEyNDg2LCJ0ZWthdGFrYW5haGFsZndpZHRoIiw2NTQxMSwidGVsZXBob25lIiw4NDgxLCJ0ZWxlcGhvbmVibGFjayIsOTc0MiwidGVsaXNoYWdlZG9sYWhlYnJldyIsMTQ0MCwidGVsaXNoYXFldGFuYWhlYnJldyIsMTQ0OSwidGVuY2lyY2xlIiw5MzIxLCJ0ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjg0MSwidGVucGFyZW4iLDkzNDEsInRlbnBlcmlvZCIsOTM2MSwidGVucm9tYW4iLDg1NjksInRlc2giLDY3OSwidGV0IiwxNDk2LCJ0ZXRkYWdlc2giLDY0MzEyLCJ0ZXRkYWdlc2hoZWJyZXciLDY0MzEyLCJ0ZXRoZWJyZXciLDE0OTYsInRldHNlY3lyaWxsaWMiLDEyMDUsInRldmlyaGVicmV3IiwxNDM1LCJ0ZXZpcmxlZnRoZWJyZXciLDE0MzUsInRoYWJlbmdhbGkiLDI0NjksInRoYWRldmEiLDIzNDEsInRoYWd1amFyYXRpIiwyNzI1LCJ0aGFndXJtdWtoaSIsMjU5NywidGhhbGFyYWJpYyIsMTU4NCwidGhhbGZpbmFsYXJhYmljIiw2NTE5NiwidGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSIsNjM2NDAsInRoYW50aGFraGF0bG93cmlnaHR0aGFpIiw2MzYzOSwidGhhbnRoYWtoYXR0aGFpIiwzNjYwLCJ0aGFudGhha2hhdHVwcGVybGVmdHRoYWkiLDYzNjM4LCJ0aGVoYXJhYmljIiwxNTc5LCJ0aGVoZmluYWxhcmFiaWMiLDY1MTc4LCJ0aGVoaW5pdGlhbGFyYWJpYyIsNjUxNzksInRoZWhtZWRpYWxhcmFiaWMiLDY1MTgwLCJ0aGVyZWV4aXN0cyIsODcwNywidGhlcmVmb3JlIiw4NzU2LCJ0aGV0YSIsOTUyLCJ0aGV0YTEiLDk3NywidGhldGFzeW1ib2xncmVlayIsOTc3LCJ0aGlldXRoYWNpcmNsZWtvcmVhbiIsMTI5MjEsInRoaWV1dGhhcGFyZW5rb3JlYW4iLDEyODI1LCJ0aGlldXRoY2lyY2xla29yZWFuIiwxMjkwNywidGhpZXV0aGtvcmVhbiIsMTI2MjAsInRoaWV1dGhwYXJlbmtvcmVhbiIsMTI4MTEsInRoaXJ0ZWVuY2lyY2xlIiw5MzI0LCJ0aGlydGVlbnBhcmVuIiw5MzQ0LCJ0aGlydGVlbnBlcmlvZCIsOTM2NCwidGhvbmFuZ21vbnRob3RoYWkiLDM2MDEsInRob29rIiw0MjksInRob3BodXRoYW90aGFpIiwzNjAyLCJ0aG9ybiIsMjU0LCJ0aG90aGFoYW50aGFpIiwzNjA3LCJ0aG90aGFudGhhaSIsMzYwMCwidGhvdGhvbmd0aGFpIiwzNjA4LCJ0aG90aHVuZ3RoYWkiLDM2MDYsInRob3VzYW5kY3lyaWxsaWMiLDExNTQsInRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyIsMTY0NCwidGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiIsMTY0NCwidGhyZWUiLDUxLCJ0aHJlZWFyYWJpYyIsMTYzNSwidGhyZWViZW5nYWxpIiwyNTM3LCJ0aHJlZWNpcmNsZSIsOTMxNCwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNCwidGhyZWVkZXZhIiwyNDA5LCJ0aHJlZWVpZ2h0aHMiLDg1NDAsInRocmVlZ3VqYXJhdGkiLDI3OTMsInRocmVlZ3VybXVraGkiLDI2NjUsInRocmVlaGFja2FyYWJpYyIsMTYzNSwidGhyZWVoYW5nemhvdSIsMTIzMjMsInRocmVlaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzQsInRocmVlaW5mZXJpb3IiLDgzMjMsInRocmVlbW9ub3NwYWNlIiw2NTI5OSwidGhyZWVudW1lcmF0b3JiZW5nYWxpIiwyNTUwLCJ0aHJlZW9sZHN0eWxlIiw2MzI4MywidGhyZWVwYXJlbiIsOTMzNCwidGhyZWVwZXJpb2QiLDkzNTQsInRocmVlcGVyc2lhbiIsMTc3OSwidGhyZWVxdWFydGVycyIsMTkwLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiw2MzE5OCwidGhyZWVyb21hbiIsODU2MiwidGhyZWVzdXBlcmlvciIsMTc5LCJ0aHJlZXRoYWkiLDM2NjcsInRoenNxdWFyZSIsMTMyMDQsInRpaGlyYWdhbmEiLDEyMzg1LCJ0aWthdGFrYW5hIiwxMjQ4MSwidGlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDksInRpa2V1dGFjaXJjbGVrb3JlYW4iLDEyOTEyLCJ0aWtldXRhcGFyZW5rb3JlYW4iLDEyODE2LCJ0aWtldXRjaXJjbGVrb3JlYW4iLDEyODk4LCJ0aWtldXRrb3JlYW4iLDEyNTk5LCJ0aWtldXRwYXJlbmtvcmVhbiIsMTI4MDIsInRpbGRlIiw3MzIsInRpbGRlYmVsb3djbWIiLDgxNiwidGlsZGVjbWIiLDc3MSwidGlsZGVjb21iIiw3NzEsInRpbGRlZG91YmxlY21iIiw4NjQsInRpbGRlb3BlcmF0b3IiLDg3NjQsInRpbGRlb3ZlcmxheWNtYiIsODIwLCJ0aWxkZXZlcnRpY2FsY21iIiw4MzAsInRpbWVzY2lyY2xlIiw4ODU1LCJ0aXBlaGFoZWJyZXciLDE0MzAsInRpcGVoYWxlZnRoZWJyZXciLDE0MzAsInRpcHBpZ3VybXVraGkiLDI2NzIsInRpdGxvY3lyaWxsaWNjbWIiLDExNTUsInRpd25hcm1lbmlhbiIsMTQwNywidGxpbmViZWxvdyIsNzc5MSwidG1vbm9zcGFjZSIsNjUzNjQsInRvYXJtZW5pYW4iLDEzODUsInRvaGlyYWdhbmEiLDEyMzkyLCJ0b2thdGFrYW5hIiwxMjQ4OCwidG9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTIsInRvbmViYXJleHRyYWhpZ2htb2QiLDc0MSwidG9uZWJhcmV4dHJhbG93bW9kIiw3NDUsInRvbmViYXJoaWdobW9kIiw3NDIsInRvbmViYXJsb3dtb2QiLDc0NCwidG9uZWJhcm1pZG1vZCIsNzQzLCJ0b25lZml2ZSIsNDQ1LCJ0b25lc2l4IiwzODksInRvbmV0d28iLDQyNCwidG9ub3MiLDkwMCwidG9uc3F1YXJlIiwxMzA5NSwidG9wYXRha3RoYWkiLDM1OTksInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMDgsInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsIiw2NTExNywidG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDgxLCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0IiwxMjMwOSwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsIiw2NTExOCwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4MiwidG90YW90aGFpIiwzNjA1LCJ0cGFsYXRhbGhvb2siLDQyNywidHBhcmVuIiw5MzkxLCJ0cmFkZW1hcmsiLDg0ODIsInRyYWRlbWFya3NhbnMiLDYzNzIyLCJ0cmFkZW1hcmtzZXJpZiIsNjMxOTUsInRyZXRyb2ZsZXhob29rIiw2NDgsInRyaWFnZG4iLDk2NjAsInRyaWFnbGYiLDk2NjgsInRyaWFncnQiLDk2NTgsInRyaWFndXAiLDk2NTAsInRzIiw2NzgsInRzYWRpIiwxNTEwLCJ0c2FkaWRhZ2VzaCIsNjQzMjYsInRzYWRpZGFnZXNoaGVicmV3Iiw2NDMyNiwidHNhZGloZWJyZXciLDE1MTAsInRzZWN5cmlsbGljIiwxMDk0LCJ0c2VyZSIsMTQ2MSwidHNlcmUxMiIsMTQ2MSwidHNlcmUxZSIsMTQ2MSwidHNlcmUyYiIsMTQ2MSwidHNlcmVoZWJyZXciLDE0NjEsInRzZXJlbmFycm93aGVicmV3IiwxNDYxLCJ0c2VyZXF1YXJ0ZXJoZWJyZXciLDE0NjEsInRzZXJld2lkZWhlYnJldyIsMTQ2MSwidHNoZWN5cmlsbGljIiwxMTE1LCJ0c3VwZXJpb3IiLDYzMjE5LCJ0dGFiZW5nYWxpIiwyNDYzLCJ0dGFkZXZhIiwyMzM1LCJ0dGFndWphcmF0aSIsMjcxOSwidHRhZ3VybXVraGkiLDI1OTEsInR0ZWhhcmFiaWMiLDE2NTcsInR0ZWhmaW5hbGFyYWJpYyIsNjQzNTksInR0ZWhpbml0aWFsYXJhYmljIiw2NDM2MCwidHRlaG1lZGlhbGFyYWJpYyIsNjQzNjEsInR0aGFiZW5nYWxpIiwyNDY0LCJ0dGhhZGV2YSIsMjMzNiwidHRoYWd1amFyYXRpIiwyNzIwLCJ0dGhhZ3VybXVraGkiLDI1OTIsInR0dXJuZWQiLDY0NywidHVoaXJhZ2FuYSIsMTIzODgsInR1a2F0YWthbmEiLDEyNDg0LCJ0dWthdGFrYW5haGFsZndpZHRoIiw2NTQxMCwidHVzbWFsbGhpcmFnYW5hIiwxMjM4NywidHVzbWFsbGthdGFrYW5hIiwxMjQ4MywidHVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM5MSwidHdlbHZlY2lyY2xlIiw5MzIzLCJ0d2VsdmVwYXJlbiIsOTM0MywidHdlbHZlcGVyaW9kIiw5MzYzLCJ0d2VsdmVyb21hbiIsODU3MSwidHdlbnR5Y2lyY2xlIiw5MzMxLCJ0d2VudHloYW5nemhvdSIsMjEzMTYsInR3ZW50eXBhcmVuIiw5MzUxLCJ0d2VudHlwZXJpb2QiLDkzNzEsInR3byIsNTAsInR3b2FyYWJpYyIsMTYzNCwidHdvYmVuZ2FsaSIsMjUzNiwidHdvY2lyY2xlIiw5MzEzLCJ0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyMywidHdvZGV2YSIsMjQwOCwidHdvZG90ZW5sZWFkZXIiLDgyMjksInR3b2RvdGxlYWRlciIsODIyOSwidHdvZG90bGVhZGVydmVydGljYWwiLDY1MDcyLCJ0d29ndWphcmF0aSIsMjc5MiwidHdvZ3VybXVraGkiLDI2NjQsInR3b2hhY2thcmFiaWMiLDE2MzQsInR3b2hhbmd6aG91IiwxMjMyMiwidHdvaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzMsInR3b2luZmVyaW9yIiw4MzIyLCJ0d29tb25vc3BhY2UiLDY1Mjk4LCJ0d29udW1lcmF0b3JiZW5nYWxpIiwyNTQ5LCJ0d29vbGRzdHlsZSIsNjMyODIsInR3b3BhcmVuIiw5MzMzLCJ0d29wZXJpb2QiLDkzNTMsInR3b3BlcnNpYW4iLDE3NzgsInR3b3JvbWFuIiw4NTYxLCJ0d29zdHJva2UiLDQ0MywidHdvc3VwZXJpb3IiLDE3OCwidHdvdGhhaSIsMzY2NiwidHdvdGhpcmRzIiw4NTMyLCJ1IiwxMTcsInVhY3V0ZSIsMjUwLCJ1YmFyIiw2NDksInViZW5nYWxpIiwyNDQxLCJ1Ym9wb21vZm8iLDEyNTg0LCJ1YnJldmUiLDM2NSwidWNhcm9uIiw0NjgsInVjaXJjbGUiLDk0NDQsInVjaXJjdW1mbGV4IiwyNTEsInVjaXJjdW1mbGV4YmVsb3ciLDc3OTksInVjeXJpbGxpYyIsMTA5MSwidWRhdHRhZGV2YSIsMjM4NSwidWRibGFjdXRlIiwzNjksInVkYmxncmF2ZSIsNTMzLCJ1ZGV2YSIsMjMxMywidWRpZXJlc2lzIiwyNTIsInVkaWVyZXNpc2FjdXRlIiw0NzIsInVkaWVyZXNpc2JlbG93Iiw3Nzk1LCJ1ZGllcmVzaXNjYXJvbiIsNDc0LCJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI2NSwidWRpZXJlc2lzZ3JhdmUiLDQ3NiwidWRpZXJlc2lzbWFjcm9uIiw0NzAsInVkb3RiZWxvdyIsNzkwOSwidWdyYXZlIiwyNDksInVndWphcmF0aSIsMjY5NywidWd1cm11a2hpIiwyNTY5LCJ1aGlyYWdhbmEiLDEyMzU4LCJ1aG9va2Fib3ZlIiw3OTExLCJ1aG9ybiIsNDMyLCJ1aG9ybmFjdXRlIiw3OTEzLCJ1aG9ybmRvdGJlbG93Iiw3OTIxLCJ1aG9ybmdyYXZlIiw3OTE1LCJ1aG9ybmhvb2thYm92ZSIsNzkxNywidWhvcm50aWxkZSIsNzkxOSwidWh1bmdhcnVtbGF1dCIsMzY5LCJ1aHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjcsInVpbnZlcnRlZGJyZXZlIiw1MzUsInVrYXRha2FuYSIsMTI0NTQsInVrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTUsInVrY3lyaWxsaWMiLDExNDUsInVrb3JlYW4iLDEyNjM2LCJ1bWFjcm9uIiwzNjMsInVtYWNyb25jeXJpbGxpYyIsMTI2MywidW1hY3JvbmRpZXJlc2lzIiw3ODAzLCJ1bWF0cmFndXJtdWtoaSIsMjYyNSwidW1vbm9zcGFjZSIsNjUzNjUsInVuZGVyc2NvcmUiLDk1LCJ1bmRlcnNjb3JlZGJsIiw4MjE1LCJ1bmRlcnNjb3JlbW9ub3NwYWNlIiw2NTM0MywidW5kZXJzY29yZXZlcnRpY2FsIiw2NTA3NSwidW5kZXJzY29yZXdhdnkiLDY1MTAzLCJ1bmlvbiIsODc0NiwidW5pdmVyc2FsIiw4NzA0LCJ1b2dvbmVrIiwzNzEsInVwYXJlbiIsOTM5MiwidXBibG9jayIsOTYwMCwidXBwZXJkb3RoZWJyZXciLDE0NzYsInVwc2lsb24iLDk2NSwidXBzaWxvbmRpZXJlc2lzIiw5NzEsInVwc2lsb25kaWVyZXNpc3Rvbm9zIiw5NDQsInVwc2lsb25sYXRpbiIsNjUwLCJ1cHNpbG9udG9ub3MiLDk3MywidXB0YWNrYmVsb3djbWIiLDc5NywidXB0YWNrbW9kIiw3MjQsInVyYWd1cm11a2hpIiwyNjc1LCJ1cmluZyIsMzY3LCJ1c2hvcnRjeXJpbGxpYyIsMTExOCwidXNtYWxsaGlyYWdhbmEiLDEyMzU3LCJ1c21hbGxrYXRha2FuYSIsMTI0NTMsInVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NSwidXN0cmFpZ2h0Y3lyaWxsaWMiLDExOTksInVzdHJhaWdodHN0cm9rZWN5cmlsbGljIiwxMjAxLCJ1dGlsZGUiLDM2MSwidXRpbGRlYWN1dGUiLDc4MDEsInV0aWxkZWJlbG93Iiw3Nzk3LCJ1dWJlbmdhbGkiLDI0NDIsInV1ZGV2YSIsMjMxNCwidXVndWphcmF0aSIsMjY5OCwidXVndXJtdWtoaSIsMjU3MCwidXVtYXRyYWd1cm11a2hpIiwyNjI2LCJ1dXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTgsInV1dm93ZWxzaWduZGV2YSIsMjM3MCwidXV2b3dlbHNpZ25ndWphcmF0aSIsMjc1NCwidXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTcsInV2b3dlbHNpZ25kZXZhIiwyMzY5LCJ1dm93ZWxzaWduZ3VqYXJhdGkiLDI3NTMsInYiLDExOCwidmFkZXZhIiwyMzU3LCJ2YWd1amFyYXRpIiwyNzQxLCJ2YWd1cm11a2hpIiwyNjEzLCJ2YWthdGFrYW5hIiwxMjUzNSwidmF2IiwxNDkzLCJ2YXZkYWdlc2giLDY0MzA5LCJ2YXZkYWdlc2g2NSIsNjQzMDksInZhdmRhZ2VzaGhlYnJldyIsNjQzMDksInZhdmhlYnJldyIsMTQ5MywidmF2aG9sYW0iLDY0MzMxLCJ2YXZob2xhbWhlYnJldyIsNjQzMzEsInZhdnZhdmhlYnJldyIsMTUyMCwidmF2eW9kaGVicmV3IiwxNTIxLCJ2Y2lyY2xlIiw5NDQ1LCJ2ZG90YmVsb3ciLDc4MDcsInZlY3lyaWxsaWMiLDEwNzQsInZlaGFyYWJpYyIsMTcwMCwidmVoZmluYWxhcmFiaWMiLDY0MzYzLCJ2ZWhpbml0aWFsYXJhYmljIiw2NDM2NCwidmVobWVkaWFsYXJhYmljIiw2NDM2NSwidmVrYXRha2FuYSIsMTI1MzcsInZlbnVzIiw5NzkyLCJ2ZXJ0aWNhbGJhciIsMTI0LCJ2ZXJ0aWNhbGxpbmVhYm92ZWNtYiIsNzgxLCJ2ZXJ0aWNhbGxpbmViZWxvd2NtYiIsODA5LCJ2ZXJ0aWNhbGxpbmVsb3dtb2QiLDcxNiwidmVydGljYWxsaW5lbW9kIiw3MTIsInZld2FybWVuaWFuIiwxNDA2LCJ2aG9vayIsNjUxLCJ2aWthdGFrYW5hIiwxMjUzNiwidmlyYW1hYmVuZ2FsaSIsMjUwOSwidmlyYW1hZGV2YSIsMjM4MSwidmlyYW1hZ3VqYXJhdGkiLDI3NjUsInZpc2FyZ2FiZW5nYWxpIiwyNDM1LCJ2aXNhcmdhZGV2YSIsMjMwNywidmlzYXJnYWd1amFyYXRpIiwyNjkxLCJ2bW9ub3NwYWNlIiw2NTM2Niwidm9hcm1lbmlhbiIsMTQwMCwidm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEiLDEyNDQ2LCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYSIsMTI1NDIsInZvaWNlZG1hcmtrYW5hIiwxMjQ0Mywidm9pY2VkbWFya2thbmFoYWxmd2lkdGgiLDY1NDM4LCJ2b2thdGFrYW5hIiwxMjUzOCwidnBhcmVuIiw5MzkzLCJ2dGlsZGUiLDc4MDUsInZ0dXJuZWQiLDY1MiwidnVoaXJhZ2FuYSIsMTI0MzYsInZ1a2F0YWthbmEiLDEyNTMyLCJ3IiwxMTksIndhY3V0ZSIsNzgxMSwid2Fla29yZWFuIiwxMjYzMywid2FoaXJhZ2FuYSIsMTI0MzEsIndha2F0YWthbmEiLDEyNTI3LCJ3YWthdGFrYW5haGFsZndpZHRoIiw2NTQzNiwid2Frb3JlYW4iLDEyNjMyLCJ3YXNtYWxsaGlyYWdhbmEiLDEyNDMwLCJ3YXNtYWxsa2F0YWthbmEiLDEyNTI2LCJ3YXR0b3NxdWFyZSIsMTMxNDMsIndhdmVkYXNoIiwxMjMxNiwid2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbCIsNjUwNzYsIndhd2FyYWJpYyIsMTYwOCwid2F3ZmluYWxhcmFiaWMiLDY1MjYyLCJ3YXdoYW16YWFib3ZlYXJhYmljIiwxNTcyLCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU4LCJ3YnNxdWFyZSIsMTMyNzcsIndjaXJjbGUiLDk0NDYsIndjaXJjdW1mbGV4IiwzNzMsIndkaWVyZXNpcyIsNzgxMywid2RvdGFjY2VudCIsNzgxNSwid2RvdGJlbG93Iiw3ODE3LCJ3ZWhpcmFnYW5hIiwxMjQzMywid2VpZXJzdHJhc3MiLDg0NzIsIndla2F0YWthbmEiLDEyNTI5LCJ3ZWtvcmVhbiIsMTI2MzgsIndlb2tvcmVhbiIsMTI2MzcsIndncmF2ZSIsNzgwOSwid2hpdGVidWxsZXQiLDk3MDIsIndoaXRlY2lyY2xlIiw5Njc1LCJ3aGl0ZWNpcmNsZWludmVyc2UiLDk2ODksIndoaXRlY29ybmVyYnJhY2tldGxlZnQiLDEyMzAyLCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDkxLCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCIsMTIzMDMsIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkyLCJ3aGl0ZWRpYW1vbmQiLDk2NzEsIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCIsOTY3Miwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlIiw5NjYzLCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlIiw5NjYxLCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NjcsIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUiLDk2NjUsIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0IiwxMjMxMCwid2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMxMSwid2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1Nywid2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUiLDk2NTUsIndoaXRlc21hbGxzcXVhcmUiLDk2NDMsIndoaXRlc21pbGluZ2ZhY2UiLDk3ODYsIndoaXRlc3F1YXJlIiw5NjMzLCJ3aGl0ZXN0YXIiLDk3MzQsIndoaXRldGVsZXBob25lIiw5NzQzLCJ3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMTIsIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCIsMTIzMTMsIndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NTMsIndoaXRldXBwb2ludGluZ3RyaWFuZ2xlIiw5NjUxLCJ3aWhpcmFnYW5hIiwxMjQzMiwid2lrYXRha2FuYSIsMTI1MjgsIndpa29yZWFuIiwxMjYzOSwid21vbm9zcGFjZSIsNjUzNjcsIndvaGlyYWdhbmEiLDEyNDM0LCJ3b2thdGFrYW5hIiwxMjUzMCwid29rYXRha2FuYWhhbGZ3aWR0aCIsNjUzODIsIndvbiIsODM2MSwid29ubW9ub3NwYWNlIiw2NTUxMCwid293YWVudGhhaSIsMzYyMywid3BhcmVuIiw5Mzk0LCJ3cmluZyIsNzgzMiwid3N1cGVyaW9yIiw2OTUsInd0dXJuZWQiLDY1Mywid3lubiIsNDQ3LCJ4IiwxMjAsInhhYm92ZWNtYiIsODI5LCJ4Ym9wb21vZm8iLDEyNTYyLCJ4Y2lyY2xlIiw5NDQ3LCJ4ZGllcmVzaXMiLDc4MjEsInhkb3RhY2NlbnQiLDc4MTksInhlaGFybWVuaWFuIiwxMzg5LCJ4aSIsOTU4LCJ4bW9ub3NwYWNlIiw2NTM2OCwieHBhcmVuIiw5Mzk1LCJ4c3VwZXJpb3IiLDczOSwieSIsMTIxLCJ5YWFkb3NxdWFyZSIsMTMxMzQsInlhYmVuZ2FsaSIsMjQ3OSwieWFjdXRlIiwyNTMsInlhZGV2YSIsMjM1MSwieWFla29yZWFuIiwxMjYyNiwieWFndWphcmF0aSIsMjczNSwieWFndXJtdWtoaSIsMjYwNywieWFoaXJhZ2FuYSIsMTI0MjAsInlha2F0YWthbmEiLDEyNTE2LCJ5YWthdGFrYW5haGFsZndpZHRoIiw2NTQyOCwieWFrb3JlYW4iLDEyNjI1LCJ5YW1ha2thbnRoYWkiLDM2NjIsInlhc21hbGxoaXJhZ2FuYSIsMTI0MTksInlhc21hbGxrYXRha2FuYSIsMTI1MTUsInlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aCIsNjUzODgsInlhdGN5cmlsbGljIiwxMTIzLCJ5Y2lyY2xlIiw5NDQ4LCJ5Y2lyY3VtZmxleCIsMzc1LCJ5ZGllcmVzaXMiLDI1NSwieWRvdGFjY2VudCIsNzgyMywieWRvdGJlbG93Iiw3OTI1LCJ5ZWhhcmFiaWMiLDE2MTAsInllaGJhcnJlZWFyYWJpYyIsMTc0NiwieWVoYmFycmVlZmluYWxhcmFiaWMiLDY0NDMxLCJ5ZWhmaW5hbGFyYWJpYyIsNjUyNjYsInllaGhhbXphYWJvdmVhcmFiaWMiLDE1NzQsInllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyIsNjUxNjIsInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljIiw2NTE2MywieWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyIsNjUxNjQsInllaGluaXRpYWxhcmFiaWMiLDY1MjY3LCJ5ZWhtZWRpYWxhcmFiaWMiLDY1MjY4LCJ5ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MzMsInllaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ2MDAsInllaG5vb25maW5hbGFyYWJpYyIsNjQ2NjAsInllaHRocmVlZG90c2JlbG93YXJhYmljIiwxNzQ1LCJ5ZWtvcmVhbiIsMTI2MzAsInllbiIsMTY1LCJ5ZW5tb25vc3BhY2UiLDY1NTA5LCJ5ZW9rb3JlYW4iLDEyNjI5LCJ5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NzgsInllcmFoYmVueW9tb2hlYnJldyIsMTQ1MCwieWVyYWhiZW55b21vbGVmdGhlYnJldyIsMTQ1MCwieWVyaWN5cmlsbGljIiwxMDk5LCJ5ZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MywieWVzaWV1bmdrb3JlYW4iLDEyNjczLCJ5ZXNpZXVuZ3BhbnNpb3Nrb3JlYW4iLDEyNjc1LCJ5ZXNpZXVuZ3Npb3Nrb3JlYW4iLDEyNjc0LCJ5ZXRpdmhlYnJldyIsMTQzNCwieWdyYXZlIiw3OTIzLCJ5aG9vayIsNDM2LCJ5aG9va2Fib3ZlIiw3OTI3LCJ5aWFybWVuaWFuIiwxMzk3LCJ5aWN5cmlsbGljIiwxMTExLCJ5aWtvcmVhbiIsMTI2NDIsInlpbnlhbmciLDk3NzUsInlpd25hcm1lbmlhbiIsMTQxMCwieW1vbm9zcGFjZSIsNjUzNjksInlvZCIsMTQ5NywieW9kZGFnZXNoIiw2NDMxMywieW9kZGFnZXNoaGVicmV3Iiw2NDMxMywieW9kaGVicmV3IiwxNDk3LCJ5b2R5b2RoZWJyZXciLDE1MjIsInlvZHlvZHBhdGFoaGVicmV3Iiw2NDI4NywieW9oaXJhZ2FuYSIsMTI0MjQsInlvaWtvcmVhbiIsMTI2ODEsInlva2F0YWthbmEiLDEyNTIwLCJ5b2thdGFrYW5haGFsZndpZHRoIiw2NTQzMCwieW9rb3JlYW4iLDEyNjM1LCJ5b3NtYWxsaGlyYWdhbmEiLDEyNDIzLCJ5b3NtYWxsa2F0YWthbmEiLDEyNTE5LCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1MzkwLCJ5b3RncmVlayIsMTAxMSwieW95YWVrb3JlYW4iLDEyNjgwLCJ5b3lha29yZWFuIiwxMjY3OSwieW95YWt0aGFpIiwzNjE4LCJ5b3lpbmd0aGFpIiwzNTk3LCJ5cGFyZW4iLDkzOTYsInlwb2dlZ3JhbW1lbmkiLDg5MCwieXBvZ2VncmFtbWVuaWdyZWVrY21iIiw4MzcsInlyIiw0MjIsInlyaW5nIiw3ODMzLCJ5c3VwZXJpb3IiLDY5NiwieXRpbGRlIiw3OTI5LCJ5dHVybmVkIiw2NTQsInl1aGlyYWdhbmEiLDEyNDIyLCJ5dWlrb3JlYW4iLDEyNjg0LCJ5dWthdGFrYW5hIiwxMjUxOCwieXVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjksInl1a29yZWFuIiwxMjY0MCwieXVzYmlnY3lyaWxsaWMiLDExMzEsInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMiLDExMzMsInl1c2xpdHRsZWN5cmlsbGljIiwxMTI3LCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljIiwxMTI5LCJ5dXNtYWxsaGlyYWdhbmEiLDEyNDIxLCJ5dXNtYWxsa2F0YWthbmEiLDEyNTE3LCJ5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1Mzg5LCJ5dXlla29yZWFuIiwxMjY4MywieXV5ZW9rb3JlYW4iLDEyNjgyLCJ5eWFiZW5nYWxpIiwyNTI3LCJ5eWFkZXZhIiwyMzk5LCJ6IiwxMjIsInphYXJtZW5pYW4iLDEzODIsInphY3V0ZSIsMzc4LCJ6YWRldmEiLDIzOTUsInphZ3VybXVraGkiLDI2NTEsInphaGFyYWJpYyIsMTU5MiwiemFoZmluYWxhcmFiaWMiLDY1MjIyLCJ6YWhpbml0aWFsYXJhYmljIiw2NTIyMywiemFoaXJhZ2FuYSIsMTIzNzQsInphaG1lZGlhbGFyYWJpYyIsNjUyMjQsInphaW5hcmFiaWMiLDE1ODYsInphaW5maW5hbGFyYWJpYyIsNjUyMDAsInpha2F0YWthbmEiLDEyNDcwLCJ6YXFlZmdhZG9saGVicmV3IiwxNDI5LCJ6YXFlZnFhdGFuaGVicmV3IiwxNDI4LCJ6YXJxYWhlYnJldyIsMTQzMiwiemF5aW4iLDE0OTQsInpheWluZGFnZXNoIiw2NDMxMCwiemF5aW5kYWdlc2hoZWJyZXciLDY0MzEwLCJ6YXlpbmhlYnJldyIsMTQ5NCwiemJvcG9tb2ZvIiwxMjU2NywiemNhcm9uIiwzODIsInpjaXJjbGUiLDk0NDksInpjaXJjdW1mbGV4Iiw3ODI1LCJ6Y3VybCIsNjU3LCJ6ZG90IiwzODAsInpkb3RhY2NlbnQiLDM4MCwiemRvdGJlbG93Iiw3ODI3LCJ6ZWN5cmlsbGljIiwxMDc5LCJ6ZWRlc2NlbmRlcmN5cmlsbGljIiwxMTc3LCJ6ZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDcsInplaGlyYWdhbmEiLDEyMzgwLCJ6ZWthdGFrYW5hIiwxMjQ3NiwiemVybyIsNDgsInplcm9hcmFiaWMiLDE2MzIsInplcm9iZW5nYWxpIiwyNTM0LCJ6ZXJvZGV2YSIsMjQwNiwiemVyb2d1amFyYXRpIiwyNzkwLCJ6ZXJvZ3VybXVraGkiLDI2NjIsInplcm9oYWNrYXJhYmljIiwxNjMyLCJ6ZXJvaW5mZXJpb3IiLDgzMjAsInplcm9tb25vc3BhY2UiLDY1Mjk2LCJ6ZXJvb2xkc3R5bGUiLDYzMjgwLCJ6ZXJvcGVyc2lhbiIsMTc3NiwiemVyb3N1cGVyaW9yIiw4MzA0LCJ6ZXJvdGhhaSIsMzY2NCwiemVyb3dpZHRoam9pbmVyIiw2NTI3OSwiemVyb3dpZHRobm9uam9pbmVyIiw4MjA0LCJ6ZXJvd2lkdGhzcGFjZSIsODIwMywiemV0YSIsOTUwLCJ6aGJvcG9tb2ZvIiwxMjU2MywiemhlYXJtZW5pYW4iLDEzODYsInpoZWJyZXZlY3lyaWxsaWMiLDEyMTgsInpoZWN5cmlsbGljIiwxMDc4LCJ6aGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NSwiemhlZGllcmVzaXNjeXJpbGxpYyIsMTI0NSwiemloaXJhZ2FuYSIsMTIzNzYsInppa2F0YWthbmEiLDEyNDcyLCJ6aW5vcmhlYnJldyIsMTQ1NCwiemxpbmViZWxvdyIsNzgyOSwiem1vbm9zcGFjZSIsNjUzNzAsInpvaGlyYWdhbmEiLDEyMzgyLCJ6b2thdGFrYW5hIiwxMjQ3OCwienBhcmVuIiw5Mzk3LCJ6cmV0cm9mbGV4aG9vayIsNjU2LCJ6c3Ryb2tlIiw0MzgsInp1aGlyYWdhbmEiLDEyMzc4LCJ6dWthdGFrYW5hIiwxMjQ3NCwiLm5vdGRlZiIsMCwiYW5nYnJhY2tldGxlZnRiaWciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnIiw5MDAxLCJhbmdicmFja2V0bGVmdGJpZ2ciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnZyIsOTAwMSwiYW5nYnJhY2tldHJpZ2h0QmlnIiw5MDAyLCJhbmdicmFja2V0cmlnaHRiaWciLDkwMDIsImFuZ2JyYWNrZXRyaWdodEJpZ2ciLDkwMDIsImFuZ2JyYWNrZXRyaWdodGJpZ2ciLDkwMDIsImFycm93aG9va2xlZnQiLDg2MTgsImFycm93aG9va3JpZ2h0Iiw4NjE3LCJhcnJvd2xlZnR0b3BoYWxmIiw4NjM2LCJhcnJvd2xlZnRib3RoYWxmIiw4NjM3LCJhcnJvd25vcnRoZWFzdCIsODU5OSwiYXJyb3dub3J0aHdlc3QiLDg1OTgsImFycm93cmlnaHR0b3BoYWxmIiw4NjQwLCJhcnJvd3JpZ2h0Ym90aGFsZiIsODY0MSwiYXJyb3dzb3V0aGVhc3QiLDg2MDAsImFycm93c291dGh3ZXN0Iiw4NjAxLCJiYWNrc2xhc2hiaWciLDg3MjYsImJhY2tzbGFzaEJpZyIsODcyNiwiYmFja3NsYXNoQmlnZyIsODcyNiwiYmFja3NsYXNoYmlnZyIsODcyNiwiYmFyZGJsIiw4MjE0LCJicmFjZWh0aXBkb3dubGVmdCIsNjUwNzksImJyYWNlaHRpcGRvd25yaWdodCIsNjUwNzksImJyYWNlaHRpcHVwbGVmdCIsNjUwODAsImJyYWNlaHRpcHVwcmlnaHQiLDY1MDgwLCJicmFjZWxlZnRCaWciLDEyMywiYnJhY2VsZWZ0YmlnIiwxMjMsImJyYWNlbGVmdGJpZ2ciLDEyMywiYnJhY2VsZWZ0QmlnZyIsMTIzLCJicmFjZXJpZ2h0QmlnIiwxMjUsImJyYWNlcmlnaHRiaWciLDEyNSwiYnJhY2VyaWdodGJpZ2ciLDEyNSwiYnJhY2VyaWdodEJpZ2ciLDEyNSwiYnJhY2tldGxlZnRiaWciLDkxLCJicmFja2V0bGVmdEJpZyIsOTEsImJyYWNrZXRsZWZ0YmlnZyIsOTEsImJyYWNrZXRsZWZ0QmlnZyIsOTEsImJyYWNrZXRyaWdodEJpZyIsOTMsImJyYWNrZXRyaWdodGJpZyIsOTMsImJyYWNrZXRyaWdodGJpZ2ciLDkzLCJicmFja2V0cmlnaHRCaWdnIiw5MywiY2VpbGluZ2xlZnRiaWciLDg5NjgsImNlaWxpbmdsZWZ0QmlnIiw4OTY4LCJjZWlsaW5nbGVmdEJpZ2ciLDg5NjgsImNlaWxpbmdsZWZ0YmlnZyIsODk2OCwiY2VpbGluZ3JpZ2h0YmlnIiw4OTY5LCJjZWlsaW5ncmlnaHRCaWciLDg5NjksImNlaWxpbmdyaWdodGJpZ2ciLDg5NjksImNlaWxpbmdyaWdodEJpZ2ciLDg5NjksImNpcmNsZWRvdGRpc3BsYXkiLDg4NTcsImNpcmNsZWRvdHRleHQiLDg4NTcsImNpcmNsZW11bHRpcGx5ZGlzcGxheSIsODg1NSwiY2lyY2xlbXVsdGlwbHl0ZXh0Iiw4ODU1LCJjaXJjbGVwbHVzZGlzcGxheSIsODg1MywiY2lyY2xlcGx1c3RleHQiLDg4NTMsImNvbnRpbnRlZ3JhbGRpc3BsYXkiLDg3NTAsImNvbnRpbnRlZ3JhbHRleHQiLDg3NTAsImNvcHJvZHVjdGRpc3BsYXkiLDg3MjAsImNvcHJvZHVjdHRleHQiLDg3MjAsImZsb29ybGVmdEJpZyIsODk3MCwiZmxvb3JsZWZ0YmlnIiw4OTcwLCJmbG9vcmxlZnRiaWdnIiw4OTcwLCJmbG9vcmxlZnRCaWdnIiw4OTcwLCJmbG9vcnJpZ2h0YmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnZyIsODk3MSwiZmxvb3JyaWdodGJpZ2ciLDg5NzEsImhhdHdpZGUiLDc3MCwiaGF0d2lkZXIiLDc3MCwiaGF0d2lkZXN0Iiw3NzAsImludGVyY2FsIiw3NDg4LCJpbnRlZ3JhbGRpc3BsYXkiLDg3NDcsImludGVncmFsdGV4dCIsODc0NywiaW50ZXJzZWN0aW9uZGlzcGxheSIsODg5OCwiaW50ZXJzZWN0aW9udGV4dCIsODg5OCwibG9naWNhbGFuZGRpc3BsYXkiLDg3NDMsImxvZ2ljYWxhbmR0ZXh0Iiw4NzQzLCJsb2dpY2Fsb3JkaXNwbGF5Iiw4NzQ0LCJsb2dpY2Fsb3J0ZXh0Iiw4NzQ0LCJwYXJlbmxlZnRCaWciLDQwLCJwYXJlbmxlZnRiaWciLDQwLCJwYXJlbmxlZnRCaWdnIiw0MCwicGFyZW5sZWZ0YmlnZyIsNDAsInBhcmVucmlnaHRCaWciLDQxLCJwYXJlbnJpZ2h0YmlnIiw0MSwicGFyZW5yaWdodEJpZ2ciLDQxLCJwYXJlbnJpZ2h0YmlnZyIsNDEsInByaW1lIiw4MjQyLCJwcm9kdWN0ZGlzcGxheSIsODcxOSwicHJvZHVjdHRleHQiLDg3MTksInJhZGljYWxiaWciLDg3MzAsInJhZGljYWxCaWciLDg3MzAsInJhZGljYWxCaWdnIiw4NzMwLCJyYWRpY2FsYmlnZyIsODczMCwicmFkaWNhbGJ0Iiw4NzMwLCJyYWRpY2FsdHAiLDg3MzAsInJhZGljYWx2ZXJ0ZXgiLDg3MzAsInNsYXNoYmlnIiw0Nywic2xhc2hCaWciLDQ3LCJzbGFzaEJpZ2ciLDQ3LCJzbGFzaGJpZ2ciLDQ3LCJzdW1tYXRpb25kaXNwbGF5Iiw4NzIxLCJzdW1tYXRpb250ZXh0Iiw4NzIxLCJ0aWxkZXdpZGUiLDczMiwidGlsZGV3aWRlciIsNzMyLCJ0aWxkZXdpZGVzdCIsNzMyLCJ1bmlvbmRpc3BsYXkiLDg4OTksInVuaW9ubXVsdGlkaXNwbGF5Iiw4ODQ2LCJ1bmlvbm11bHRpdGV4dCIsODg0NiwidW5pb25zcWRpc3BsYXkiLDg4NTIsInVuaW9uc3F0ZXh0Iiw4ODUyLCJ1bmlvbnRleHQiLDg4OTksInZleHRlbmRkb3VibGUiLDg3NDEsInZleHRlbmRzaW5nbGUiLDg3MzldfSkpLGk9KDAsbi5nZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKCl7cmV0dXJuWyJzcGFjZSIsMzIsImExIiw5OTg1LCJhMiIsOTk4NiwiYTIwMiIsOTk4NywiYTMiLDk5ODgsImE0Iiw5NzQyLCJhNSIsOTk5MCwiYTExOSIsOTk5MSwiYTExOCIsOTk5MiwiYTExNyIsOTk5MywiYTExIiw5NzU1LCJhMTIiLDk3NTgsImExMyIsOTk5NiwiYTE0Iiw5OTk3LCJhMTUiLDk5OTgsImExNiIsOTk5OSwiYTEwNSIsMWU0LCJhMTciLDEwMDAxLCJhMTgiLDEwMDAyLCJhMTkiLDEwMDAzLCJhMjAiLDEwMDA0LCJhMjEiLDEwMDA1LCJhMjIiLDEwMDA2LCJhMjMiLDEwMDA3LCJhMjQiLDEwMDA4LCJhMjUiLDEwMDA5LCJhMjYiLDEwMDEwLCJhMjciLDEwMDExLCJhMjgiLDEwMDEyLCJhNiIsMTAwMTMsImE3IiwxMDAxNCwiYTgiLDEwMDE1LCJhOSIsMTAwMTYsImExMCIsMTAwMTcsImEyOSIsMTAwMTgsImEzMCIsMTAwMTksImEzMSIsMTAwMjAsImEzMiIsMTAwMjEsImEzMyIsMTAwMjIsImEzNCIsMTAwMjMsImEzNSIsOTczMywiYTM2IiwxMDAyNSwiYTM3IiwxMDAyNiwiYTM4IiwxMDAyNywiYTM5IiwxMDAyOCwiYTQwIiwxMDAyOSwiYTQxIiwxMDAzMCwiYTQyIiwxMDAzMSwiYTQzIiwxMDAzMiwiYTQ0IiwxMDAzMywiYTQ1IiwxMDAzNCwiYTQ2IiwxMDAzNSwiYTQ3IiwxMDAzNiwiYTQ4IiwxMDAzNywiYTQ5IiwxMDAzOCwiYTUwIiwxMDAzOSwiYTUxIiwxMDA0MCwiYTUyIiwxMDA0MSwiYTUzIiwxMDA0MiwiYTU0IiwxMDA0MywiYTU1IiwxMDA0NCwiYTU2IiwxMDA0NSwiYTU3IiwxMDA0NiwiYTU4IiwxMDA0NywiYTU5IiwxMDA0OCwiYTYwIiwxMDA0OSwiYTYxIiwxMDA1MCwiYTYyIiwxMDA1MSwiYTYzIiwxMDA1MiwiYTY0IiwxMDA1MywiYTY1IiwxMDA1NCwiYTY2IiwxMDA1NSwiYTY3IiwxMDA1NiwiYTY4IiwxMDA1NywiYTY5IiwxMDA1OCwiYTcwIiwxMDA1OSwiYTcxIiw5Njc5LCJhNzIiLDEwMDYxLCJhNzMiLDk2MzIsImE3NCIsMTAwNjMsImEyMDMiLDEwMDY0LCJhNzUiLDEwMDY1LCJhMjA0IiwxMDA2NiwiYTc2Iiw5NjUwLCJhNzciLDk2NjAsImE3OCIsOTY3MCwiYTc5IiwxMDA3MCwiYTgxIiw5Njg3LCJhODIiLDEwMDcyLCJhODMiLDEwMDczLCJhODQiLDEwMDc0LCJhOTciLDEwMDc1LCJhOTgiLDEwMDc2LCJhOTkiLDEwMDc3LCJhMTAwIiwxMDA3OCwiYTEwMSIsMTAwODEsImExMDIiLDEwMDgyLCJhMTAzIiwxMDA4MywiYTEwNCIsMTAwODQsImExMDYiLDEwMDg1LCJhMTA3IiwxMDA4NiwiYTEwOCIsMTAwODcsImExMTIiLDk4MjcsImExMTEiLDk4MzAsImExMTAiLDk4MjksImExMDkiLDk4MjQsImExMjAiLDkzMTIsImExMjEiLDkzMTMsImExMjIiLDkzMTQsImExMjMiLDkzMTUsImExMjQiLDkzMTYsImExMjUiLDkzMTcsImExMjYiLDkzMTgsImExMjciLDkzMTksImExMjgiLDkzMjAsImExMjkiLDkzMjEsImExMzAiLDEwMTAyLCJhMTMxIiwxMDEwMywiYTEzMiIsMTAxMDQsImExMzMiLDEwMTA1LCJhMTM0IiwxMDEwNiwiYTEzNSIsMTAxMDcsImExMzYiLDEwMTA4LCJhMTM3IiwxMDEwOSwiYTEzOCIsMTAxMTAsImExMzkiLDEwMTExLCJhMTQwIiwxMDExMiwiYTE0MSIsMTAxMTMsImExNDIiLDEwMTE0LCJhMTQzIiwxMDExNSwiYTE0NCIsMTAxMTYsImExNDUiLDEwMTE3LCJhMTQ2IiwxMDExOCwiYTE0NyIsMTAxMTksImExNDgiLDEwMTIwLCJhMTQ5IiwxMDEyMSwiYTE1MCIsMTAxMjIsImExNTEiLDEwMTIzLCJhMTUyIiwxMDEyNCwiYTE1MyIsMTAxMjUsImExNTQiLDEwMTI2LCJhMTU1IiwxMDEyNywiYTE1NiIsMTAxMjgsImExNTciLDEwMTI5LCJhMTU4IiwxMDEzMCwiYTE1OSIsMTAxMzEsImExNjAiLDEwMTMyLCJhMTYxIiw4NTk0LCJhMTYzIiw4NTk2LCJhMTY0Iiw4NTk3LCJhMTk2IiwxMDEzNiwiYTE2NSIsMTAxMzcsImExOTIiLDEwMTM4LCJhMTY2IiwxMDEzOSwiYTE2NyIsMTAxNDAsImExNjgiLDEwMTQxLCJhMTY5IiwxMDE0MiwiYTE3MCIsMTAxNDMsImExNzEiLDEwMTQ0LCJhMTcyIiwxMDE0NSwiYTE3MyIsMTAxNDYsImExNjIiLDEwMTQ3LCJhMTc0IiwxMDE0OCwiYTE3NSIsMTAxNDksImExNzYiLDEwMTUwLCJhMTc3IiwxMDE1MSwiYTE3OCIsMTAxNTIsImExNzkiLDEwMTUzLCJhMTkzIiwxMDE1NCwiYTE4MCIsMTAxNTUsImExOTkiLDEwMTU2LCJhMTgxIiwxMDE1NywiYTIwMCIsMTAxNTgsImExODIiLDEwMTU5LCJhMjAxIiwxMDE2MSwiYTE4MyIsMTAxNjIsImExODQiLDEwMTYzLCJhMTk3IiwxMDE2NCwiYTE4NSIsMTAxNjUsImExOTQiLDEwMTY2LCJhMTk4IiwxMDE2NywiYTE4NiIsMTAxNjgsImExOTUiLDEwMTY5LCJhMTg3IiwxMDE3MCwiYTE4OCIsMTAxNzEsImExODkiLDEwMTcyLCJhMTkwIiwxMDE3MywiYTE5MSIsMTAxNzQsImE4OSIsMTAwODgsImE5MCIsMTAwODksImE5MyIsMTAwOTAsImE5NCIsMTAwOTEsImE5MSIsMTAwOTIsImE5MiIsMTAwOTMsImEyMDUiLDEwMDk0LCJhODUiLDEwMDk1LCJhMjA2IiwxMDA5NiwiYTg2IiwxMDA5NywiYTg3IiwxMDA5OCwiYTg4IiwxMDA5OSwiYTk1IiwxMDEwMCwiYTk2IiwxMDEwMSwiLm5vdGRlZiIsMF19KSl9LChlLHQscik9PntyLnIodCksci5kKHQse2NsZWFyVW5pY29kZUNhY2hlczooKT0+cCxnZXRDaGFyVW5pY29kZUNhdGVnb3J5OigpPT5kLGdldE5vcm1hbGl6ZWRVbmljb2RlczooKT0+dSxnZXRVbmljb2RlRm9yR2x5cGg6KCk9Pm8sZ2V0VW5pY29kZVJhbmdlRm9yOigpPT5jLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5pLHJldmVyc2VJZlJ0bDooKT0+bH0pO3ZhciBuPXIoMTM1KTtjb25zdCBhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5LGVbNjMxOTNdPTE2OSxlWzYzNzIwXT0xNzQsZVs2MzE5NF09MTc0LGVbNjM3MjJdPTg0ODIsZVs2MzE5NV09ODQ4MixlWzYzNzI5XT05MTI3LGVbNjM3MzBdPTkxMjgsZVs2MzczMV09OTEyOSxlWzYzNzQwXT05MTMxLGVbNjM3NDFdPTkxMzIsZVs2Mzc0Ml09OTEzMyxlWzYzNzI2XT05MTIxLGVbNjM3MjddPTkxMjIsZVs2MzcyOF09OTEyMyxlWzYzNzM3XT05MTI0LGVbNjM3MzhdPTkxMjUsZVs2MzczOV09OTEyNixlWzYzNzIzXT05MTE1LGVbNjM3MjRdPTkxMTYsZVs2MzcyNV09OTExNyxlWzYzNzM0XT05MTE4LGVbNjM3MzVdPTkxMTksZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlPj02NTUyMCYmZTw9NjU1MzU/MDplPj02Mjk3NiYmZTw9NjM3NDM/YSgpW2VdfHxlOjE3Mz09PWU/NDU6ZX1mdW5jdGlvbiBvKGUsdCl7bGV0IHI9dFtlXTtpZih2b2lkIDAhPT1yKXJldHVybiByO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pbj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7bj1lLnN1YnN0cmluZygxKX1pZihuPT09bi50b1VwcGVyQ2FzZSgpJiYocj1wYXJzZUludChuLDE2KSxyPj0wKSlyZXR1cm4gcn1yZXR1cm4tMX1jb25zdCBzPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XTtmdW5jdGlvbiBjKGUpe2ZvcihsZXQgdD0wLHI9cy5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1zW3RdO2lmKGU+PXIuYmVnaW4mJmU8ci5lbmQpcmV0dXJuIHR9cmV0dXJuLTF9Y29uc3QgdT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIsKoIiwiIMyIIiwiwq8iLCIgzIQiLCLCtCIsIiDMgSIsIsK1IiwizrwiLCLCuCIsIiDMpyIsIsSyIiwiSUoiLCLEsyIsImlqIiwixL8iLCJMwrciLCLFgCIsImzCtyIsIsWJIiwiyrxuIiwixb8iLCJzIiwix4QiLCJExb0iLCLHhSIsIkTFviIsIseGIiwiZMW+Iiwix4ciLCJMSiIsIseIIiwiTGoiLCLHiSIsImxqIiwix4oiLCJOSiIsIseLIiwiTmoiLCLHjCIsIm5qIiwix7EiLCJEWiIsIseyIiwiRHoiLCLHsyIsImR6Iiwiy5giLCIgzIYiLCLLmSIsIiDMhyIsIsuaIiwiIMyKIiwiy5siLCIgzKgiLCLLnCIsIiDMgyIsIsudIiwiIMyLIiwizboiLCIgzYUiLCLOhCIsIiDMgSIsIs+QIiwizrIiLCLPkSIsIs64Iiwiz5IiLCLOpSIsIs+VIiwiz4YiLCLPliIsIs+AIiwiz7AiLCLOuiIsIs+xIiwiz4EiLCLPsiIsIs+CIiwiz7QiLCLOmCIsIs+1IiwizrUiLCLPuSIsIs6jIiwi1ociLCLVpdaCIiwi2bUiLCLYp9m0Iiwi2bYiLCLZiNm0Iiwi2bciLCLbh9m0Iiwi2bgiLCLZitm0Iiwi4LizIiwi4LmN4LiyIiwi4LqzIiwi4LuN4LqyIiwi4LucIiwi4Lqr4LqZIiwi4LudIiwi4Lqr4LqhIiwi4L23Iiwi4L6y4L6BIiwi4L25Iiwi4L6z4L6BIiwi4bqaIiwiYcq+Iiwi4b69IiwiIMyTIiwi4b6/IiwiIMyTIiwi4b+AIiwiIM2CIiwi4b++IiwiIMyUIiwi4oCCIiwiICIsIuKAgyIsIiAiLCLigIQiLCIgIiwi4oCFIiwiICIsIuKAhiIsIiAiLCLigIgiLCIgIiwi4oCJIiwiICIsIuKAiiIsIiAiLCLigJciLCIgzLMiLCLigKQiLCIuIiwi4oClIiwiLi4iLCLigKYiLCIuLi4iLCLigLMiLCLigLLigLIiLCLigLQiLCLigLLigLLigLIiLCLigLYiLCLigLXigLUiLCLigLciLCLigLXigLXigLUiLCLigLwiLCIhISIsIuKAviIsIiDMhSIsIuKBhyIsIj8/Iiwi4oGIIiwiPyEiLCLigYkiLCIhPyIsIuKBlyIsIuKAsuKAsuKAsuKAsiIsIuKBnyIsIiAiLCLigqgiLCJScyIsIuKEgCIsImEvYyIsIuKEgSIsImEvcyIsIuKEgyIsIsKwQyIsIuKEhSIsImMvbyIsIuKEhiIsImMvdSIsIuKEhyIsIsaQIiwi4oSJIiwiwrBGIiwi4oSWIiwiTm8iLCLihKEiLCJURUwiLCLihLUiLCLXkCIsIuKEtiIsIteRIiwi4oS3Iiwi15IiLCLihLgiLCLXkyIsIuKEuyIsIkZBWCIsIuKFoCIsIkkiLCLihaEiLCJJSSIsIuKFoiIsIklJSSIsIuKFoyIsIklWIiwi4oWkIiwiViIsIuKFpSIsIlZJIiwi4oWmIiwiVklJIiwi4oWnIiwiVklJSSIsIuKFqCIsIklYIiwi4oWpIiwiWCIsIuKFqiIsIlhJIiwi4oWrIiwiWElJIiwi4oWsIiwiTCIsIuKFrSIsIkMiLCLiha4iLCJEIiwi4oWvIiwiTSIsIuKFsCIsImkiLCLihbEiLCJpaSIsIuKFsiIsImlpaSIsIuKFsyIsIml2Iiwi4oW0IiwidiIsIuKFtSIsInZpIiwi4oW2IiwidmlpIiwi4oW3IiwidmlpaSIsIuKFuCIsIml4Iiwi4oW5IiwieCIsIuKFuiIsInhpIiwi4oW7IiwieGlpIiwi4oW8IiwibCIsIuKFvSIsImMiLCLihb4iLCJkIiwi4oW/IiwibSIsIuKIrCIsIuKIq+KIqyIsIuKIrSIsIuKIq+KIq+KIqyIsIuKIryIsIuKIruKIriIsIuKIsCIsIuKIruKIruKIriIsIuKRtCIsIigxKSIsIuKRtSIsIigyKSIsIuKRtiIsIigzKSIsIuKRtyIsIig0KSIsIuKRuCIsIig1KSIsIuKRuSIsIig2KSIsIuKRuiIsIig3KSIsIuKRuyIsIig4KSIsIuKRvCIsIig5KSIsIuKRvSIsIigxMCkiLCLikb4iLCIoMTEpIiwi4pG/IiwiKDEyKSIsIuKSgCIsIigxMykiLCLikoEiLCIoMTQpIiwi4pKCIiwiKDE1KSIsIuKSgyIsIigxNikiLCLikoQiLCIoMTcpIiwi4pKFIiwiKDE4KSIsIuKShiIsIigxOSkiLCLikociLCIoMjApIiwi4pKIIiwiMS4iLCLikokiLCIyLiIsIuKSiiIsIjMuIiwi4pKLIiwiNC4iLCLikowiLCI1LiIsIuKSjSIsIjYuIiwi4pKOIiwiNy4iLCLiko8iLCI4LiIsIuKSkCIsIjkuIiwi4pKRIiwiMTAuIiwi4pKSIiwiMTEuIiwi4pKTIiwiMTIuIiwi4pKUIiwiMTMuIiwi4pKVIiwiMTQuIiwi4pKWIiwiMTUuIiwi4pKXIiwiMTYuIiwi4pKYIiwiMTcuIiwi4pKZIiwiMTguIiwi4pKaIiwiMTkuIiwi4pKbIiwiMjAuIiwi4pKcIiwiKGEpIiwi4pKdIiwiKGIpIiwi4pKeIiwiKGMpIiwi4pKfIiwiKGQpIiwi4pKgIiwiKGUpIiwi4pKhIiwiKGYpIiwi4pKiIiwiKGcpIiwi4pKjIiwiKGgpIiwi4pKkIiwiKGkpIiwi4pKlIiwiKGopIiwi4pKmIiwiKGspIiwi4pKnIiwiKGwpIiwi4pKoIiwiKG0pIiwi4pKpIiwiKG4pIiwi4pKqIiwiKG8pIiwi4pKrIiwiKHApIiwi4pKsIiwiKHEpIiwi4pKtIiwiKHIpIiwi4pKuIiwiKHMpIiwi4pKvIiwiKHQpIiwi4pKwIiwiKHUpIiwi4pKxIiwiKHYpIiwi4pKyIiwiKHcpIiwi4pKzIiwiKHgpIiwi4pK0IiwiKHkpIiwi4pK1IiwiKHopIiwi4qiMIiwi4oir4oir4oir4oirIiwi4qm0IiwiOjo9Iiwi4qm1IiwiPT0iLCLiqbYiLCI9PT0iLCLiup8iLCLmr40iLCLiu7MiLCLpvp8iLCLivIAiLCLkuIAiLCLivIEiLCLkuKgiLCLivIIiLCLkuLYiLCLivIMiLCLkuL8iLCLivIQiLCLkuZkiLCLivIUiLCLkuoUiLCLivIYiLCLkuowiLCLivIciLCLkuqAiLCLivIgiLCLkuroiLCLivIkiLCLlhL8iLCLivIoiLCLlhaUiLCLivIsiLCLlhasiLCLivIwiLCLlhoIiLCLivI0iLCLlhpYiLCLivI4iLCLlhqsiLCLivI8iLCLlh6AiLCLivJAiLCLlh7UiLCLivJEiLCLliIAiLCLivJIiLCLlipsiLCLivJMiLCLli7kiLCLivJQiLCLljJUiLCLivJUiLCLljJoiLCLivJYiLCLljLgiLCLivJciLCLljYEiLCLivJgiLCLljZwiLCLivJkiLCLljakiLCLivJoiLCLljoIiLCLivJsiLCLljrYiLCLivJwiLCLlj4giLCLivJ0iLCLlj6MiLCLivJ4iLCLlm5ciLCLivJ8iLCLlnJ8iLCLivKAiLCLlo6siLCLivKEiLCLlpIIiLCLivKIiLCLlpIoiLCLivKMiLCLlpJUiLCLivKQiLCLlpKciLCLivKUiLCLlpbMiLCLivKYiLCLlrZAiLCLivKciLCLlroAiLCLivKgiLCLlr7giLCLivKkiLCLlsI8iLCLivKoiLCLlsKIiLCLivKsiLCLlsLgiLCLivKwiLCLlsa4iLCLivK0iLCLlsbEiLCLivK4iLCLlt5siLCLivK8iLCLlt6UiLCLivLAiLCLlt7EiLCLivLEiLCLlt74iLCLivLIiLCLlubIiLCLivLMiLCLluboiLCLivLQiLCLlub8iLCLivLUiLCLlu7QiLCLivLYiLCLlu74iLCLivLciLCLlvIsiLCLivLgiLCLlvJMiLCLivLkiLCLlvZAiLCLivLoiLCLlvaEiLCLivLsiLCLlvbMiLCLivLwiLCLlv4MiLCLivL0iLCLmiIgiLCLivL4iLCLmiLYiLCLivL8iLCLmiYsiLCLivYAiLCLmlK8iLCLivYEiLCLmlLQiLCLivYIiLCLmlociLCLivYMiLCLmlpciLCLivYQiLCLmlqQiLCLivYUiLCLmlrkiLCLivYYiLCLml6AiLCLivYciLCLml6UiLCLivYgiLCLmm7AiLCLivYkiLCLmnIgiLCLivYoiLCLmnKgiLCLivYsiLCLmrKAiLCLivYwiLCLmraIiLCLivY0iLCLmrbkiLCLivY4iLCLmrrMiLCLivY8iLCLmr4siLCLivZAiLCLmr5QiLCLivZEiLCLmr5siLCLivZIiLCLmsI8iLCLivZMiLCLmsJQiLCLivZQiLCLmsLQiLCLivZUiLCLngasiLCLivZYiLCLniKoiLCLivZciLCLniLYiLCLivZgiLCLniLsiLCLivZkiLCLniL8iLCLivZoiLCLniYciLCLivZsiLCLniZkiLCLivZwiLCLniZsiLCLivZ0iLCLniqwiLCLivZ4iLCLnjoQiLCLivZ8iLCLnjokiLCLivaAiLCLnk5wiLCLivaEiLCLnk6YiLCLivaIiLCLnlJgiLCLivaMiLCLnlJ8iLCLivaQiLCLnlKgiLCLivaUiLCLnlLAiLCLivaYiLCLnlosiLCLivaciLCLnlpIiLCLivagiLCLnmbYiLCLivakiLCLnmb0iLCLivaoiLCLnmq4iLCLivasiLCLnmr8iLCLivawiLCLnm64iLCLiva0iLCLnn5siLCLiva4iLCLnn6IiLCLiva8iLCLnn7MiLCLivbAiLCLnpLoiLCLivbEiLCLnprgiLCLivbIiLCLnpr4iLCLivbMiLCLnqbQiLCLivbQiLCLnq4siLCLivbUiLCLnq7kiLCLivbYiLCLnsbMiLCLivbciLCLns7giLCLivbgiLCLnvLYiLCLivbkiLCLnvZEiLCLivboiLCLnvooiLCLivbsiLCLnvr0iLCLivbwiLCLogIEiLCLivb0iLCLogIwiLCLivb4iLCLogJIiLCLivb8iLCLogLMiLCLivoAiLCLogb8iLCLivoEiLCLogokiLCLivoIiLCLoh6MiLCLivoMiLCLoh6oiLCLivoQiLCLoh7MiLCLivoUiLCLoh7wiLCLivoYiLCLoiIwiLCLivociLCLoiJsiLCLivogiLCLoiJ8iLCLivokiLCLoia4iLCLivooiLCLoibIiLCLivosiLCLoibgiLCLivowiLCLomY0iLCLivo0iLCLomasiLCLivo4iLCLooYAiLCLivo8iLCLooYwiLCLivpAiLCLooaMiLCLivpEiLCLopb4iLCLivpIiLCLoposiLCLivpMiLCLop5IiLCLivpQiLCLoqIAiLCLivpUiLCLosLciLCLivpYiLCLosYYiLCLivpciLCLosZUiLCLivpgiLCLosbgiLCLivpkiLCLosp0iLCLivpoiLCLotaQiLCLivpsiLCLotbAiLCLivpwiLCLotrMiLCLivp0iLCLouqsiLCLivp4iLCLou4oiLCLivp8iLCLovpsiLCLivqAiLCLovrAiLCLivqEiLCLovrUiLCLivqIiLCLpgpEiLCLivqMiLCLphYkiLCLivqQiLCLph4YiLCLivqUiLCLph4wiLCLivqYiLCLph5EiLCLivqciLCLplbciLCLivqgiLCLploAiLCLivqkiLCLpmJwiLCLivqoiLCLpmrYiLCLivqsiLCLpmrkiLCLivqwiLCLpm6giLCLivq0iLCLpnZEiLCLivq4iLCLpnZ4iLCLivq8iLCLpnaIiLCLivrAiLCLpnakiLCLivrEiLCLpn4siLCLivrIiLCLpn60iLCLivrMiLCLpn7MiLCLivrQiLCLpoIEiLCLivrUiLCLpoqgiLCLivrYiLCLpo5siLCLivrciLCLpo58iLCLivrgiLCLpppYiLCLivrkiLCLpppkiLCLivroiLCLppqwiLCLivrsiLCLpqqgiLCLivrwiLCLpq5giLCLivr0iLCLpq58iLCLivr4iLCLprKUiLCLivr8iLCLprK8iLCLiv4AiLCLprLIiLCLiv4EiLCLprLwiLCLiv4IiLCLprZoiLCLiv4MiLCLps6UiLCLiv4QiLCLpubUiLCLiv4UiLCLpub8iLCLiv4YiLCLpuqUiLCLiv4ciLCLpursiLCLiv4giLCLpu4MiLCLiv4kiLCLpu40iLCLiv4oiLCLpu5EiLCLiv4siLCLpu7kiLCLiv4wiLCLpu70iLCLiv40iLCLpvI4iLCLiv44iLCLpvJMiLCLiv48iLCLpvKAiLCLiv5AiLCLpvLsiLCLiv5EiLCLpvYoiLCLiv5IiLCLpvZIiLCLiv5MiLCLpvo0iLCLiv5QiLCLpvpwiLCLiv5UiLCLpvqAiLCLjgLYiLCLjgJIiLCLjgLgiLCLljYEiLCLjgLkiLCLljYQiLCLjgLoiLCLljYUiLCLjgpsiLCIg44KZIiwi44KcIiwiIOOCmiIsIuOEsSIsIuGEgCIsIuOEsiIsIuGEgSIsIuOEsyIsIuGGqiIsIuOEtCIsIuGEgiIsIuOEtSIsIuGGrCIsIuOEtiIsIuGGrSIsIuOEtyIsIuGEgyIsIuOEuCIsIuGEhCIsIuOEuSIsIuGEhSIsIuOEuiIsIuGGsCIsIuOEuyIsIuGGsSIsIuOEvCIsIuGGsiIsIuOEvSIsIuGGsyIsIuOEviIsIuGGtCIsIuOEvyIsIuGGtSIsIuOFgCIsIuGEmiIsIuOFgSIsIuGEhiIsIuOFgiIsIuGEhyIsIuOFgyIsIuGEiCIsIuOFhCIsIuGEoSIsIuOFhSIsIuGEiSIsIuOFhiIsIuGEiiIsIuOFhyIsIuGEiyIsIuOFiCIsIuGEjCIsIuOFiSIsIuGEjSIsIuOFiiIsIuGEjiIsIuOFiyIsIuGEjyIsIuOFjCIsIuGEkCIsIuOFjSIsIuGEkSIsIuOFjiIsIuGEkiIsIuOFjyIsIuGFoSIsIuOFkCIsIuGFoiIsIuOFkSIsIuGFoyIsIuOFkiIsIuGFpCIsIuOFkyIsIuGFpSIsIuOFlCIsIuGFpiIsIuOFlSIsIuGFpyIsIuOFliIsIuGFqCIsIuOFlyIsIuGFqSIsIuOFmCIsIuGFqiIsIuOFmSIsIuGFqyIsIuOFmiIsIuGFrCIsIuOFmyIsIuGFrSIsIuOFnCIsIuGFriIsIuOFnSIsIuGFryIsIuOFniIsIuGFsCIsIuOFnyIsIuGFsSIsIuOFoCIsIuGFsiIsIuOFoSIsIuGFsyIsIuOFoiIsIuGFtCIsIuOFoyIsIuGFtSIsIuOFpCIsIuGFoCIsIuOFpSIsIuGElCIsIuOFpiIsIuGElSIsIuOFpyIsIuGHhyIsIuOFqCIsIuGHiCIsIuOFqSIsIuGHjCIsIuOFqiIsIuGHjiIsIuOFqyIsIuGHkyIsIuOFrCIsIuGHlyIsIuOFrSIsIuGHmSIsIuOFriIsIuGEnCIsIuOFryIsIuGHnSIsIuOFsCIsIuGHnyIsIuOFsSIsIuGEnSIsIuOFsiIsIuGEniIsIuOFsyIsIuGEoCIsIuOFtCIsIuGEoiIsIuOFtSIsIuGEoyIsIuOFtiIsIuGEpyIsIuOFtyIsIuGEqSIsIuOFuCIsIuGEqyIsIuOFuSIsIuGErCIsIuOFuiIsIuGErSIsIuOFuyIsIuGEriIsIuOFvCIsIuGEryIsIuOFvSIsIuGEsiIsIuOFviIsIuGEtiIsIuOFvyIsIuGFgCIsIuOGgCIsIuGFhyIsIuOGgSIsIuGFjCIsIuOGgiIsIuGHsSIsIuOGgyIsIuGHsiIsIuOGhCIsIuGFlyIsIuOGhSIsIuGFmCIsIuOGhiIsIuGFmSIsIuOGhyIsIuGGhCIsIuOGiCIsIuGGhSIsIuOGiSIsIuGGiCIsIuOGiiIsIuGGkSIsIuOGiyIsIuGGkiIsIuOGjCIsIuGGlCIsIuOGjSIsIuGGniIsIuOGjiIsIuGGoSIsIuOIgCIsIijhhIApIiwi44iBIiwiKOGEgikiLCLjiIIiLCIo4YSDKSIsIuOIgyIsIijhhIUpIiwi44iEIiwiKOGEhikiLCLjiIUiLCIo4YSHKSIsIuOIhiIsIijhhIkpIiwi44iHIiwiKOGEiykiLCLjiIgiLCIo4YSMKSIsIuOIiSIsIijhhI4pIiwi44iKIiwiKOGEjykiLCLjiIsiLCIo4YSQKSIsIuOIjCIsIijhhJEpIiwi44iNIiwiKOGEkikiLCLjiI4iLCIo4YSA4YWhKSIsIuOIjyIsIijhhILhhaEpIiwi44iQIiwiKOGEg+GFoSkiLCLjiJEiLCIo4YSF4YWhKSIsIuOIkiIsIijhhIbhhaEpIiwi44iTIiwiKOGEh+GFoSkiLCLjiJQiLCIo4YSJ4YWhKSIsIuOIlSIsIijhhIvhhaEpIiwi44iWIiwiKOGEjOGFoSkiLCLjiJciLCIo4YSO4YWhKSIsIuOImCIsIijhhI/hhaEpIiwi44iZIiwiKOGEkOGFoSkiLCLjiJoiLCIo4YSR4YWhKSIsIuOImyIsIijhhJLhhaEpIiwi44icIiwiKOGEjOGFrikiLCLjiJ0iLCIo4YSL4YWp4YSM4YWl4YarKSIsIuOIniIsIijhhIvhhanhhJLhha4pIiwi44igIiwiKOS4gCkiLCLjiKEiLCIo5LqMKSIsIuOIoiIsIijkuIkpIiwi44ijIiwiKOWbmykiLCLjiKQiLCIo5LqUKSIsIuOIpSIsIijlha0pIiwi44imIiwiKOS4gykiLCLjiKciLCIo5YWrKSIsIuOIqCIsIijkuZ0pIiwi44ipIiwiKOWNgSkiLCLjiKoiLCIo5pyIKSIsIuOIqyIsIijngaspIiwi44isIiwiKOawtCkiLCLjiK0iLCIo5pyoKSIsIuOIriIsIijph5EpIiwi44ivIiwiKOWcnykiLCLjiLAiLCIo5pelKSIsIuOIsSIsIijmoKopIiwi44iyIiwiKOaciSkiLCLjiLMiLCIo56S+KSIsIuOItCIsIijlkI0pIiwi44i1IiwiKOeJuSkiLCLjiLYiLCIo6LKhKSIsIuOItyIsIijnpZ0pIiwi44i4IiwiKOWKtCkiLCLjiLkiLCIo5LujKSIsIuOIuiIsIijlkbwpIiwi44i7IiwiKOWtpikiLCLjiLwiLCIo55ujKSIsIuOIvSIsIijkvIEpIiwi44i+IiwiKOizhykiLCLjiL8iLCIo5Y2UKSIsIuOJgCIsIijnpa0pIiwi44mBIiwiKOS8kSkiLCLjiYIiLCIo6IeqKSIsIuOJgyIsIijoh7MpIiwi44uAIiwiMeaciCIsIuOLgSIsIjLmnIgiLCLji4IiLCIz5pyIIiwi44uDIiwiNOaciCIsIuOLhCIsIjXmnIgiLCLji4UiLCI25pyIIiwi44uGIiwiN+aciCIsIuOLhyIsIjjmnIgiLCLji4giLCI55pyIIiwi44uJIiwiMTDmnIgiLCLji4oiLCIxMeaciCIsIuOLiyIsIjEy5pyIIiwi442YIiwiMOeCuSIsIuONmSIsIjHngrkiLCLjjZoiLCIy54K5Iiwi442bIiwiM+eCuSIsIuONnCIsIjTngrkiLCLjjZ0iLCI154K5Iiwi442eIiwiNueCuSIsIuONnyIsIjfngrkiLCLjjaAiLCI454K5Iiwi442hIiwiOeeCuSIsIuONoiIsIjEw54K5Iiwi442jIiwiMTHngrkiLCLjjaQiLCIxMueCuSIsIuONpSIsIjEz54K5Iiwi442mIiwiMTTngrkiLCLjjaciLCIxNeeCuSIsIuONqCIsIjE254K5Iiwi442pIiwiMTfngrkiLCLjjaoiLCIxOOeCuSIsIuONqyIsIjE554K5Iiwi442sIiwiMjDngrkiLCLjja0iLCIyMeeCuSIsIuONriIsIjIy54K5Iiwi442vIiwiMjPngrkiLCLjjbAiLCIyNOeCuSIsIuOPoCIsIjHml6UiLCLjj6EiLCIy5pelIiwi44+iIiwiM+aXpSIsIuOPoyIsIjTml6UiLCLjj6QiLCI15pelIiwi44+lIiwiNuaXpSIsIuOPpiIsIjfml6UiLCLjj6ciLCI45pelIiwi44+oIiwiOeaXpSIsIuOPqSIsIjEw5pelIiwi44+qIiwiMTHml6UiLCLjj6siLCIxMuaXpSIsIuOPrCIsIjEz5pelIiwi44+tIiwiMTTml6UiLCLjj64iLCIxNeaXpSIsIuOPryIsIjE25pelIiwi44+wIiwiMTfml6UiLCLjj7EiLCIxOOaXpSIsIuOPsiIsIjE55pelIiwi44+zIiwiMjDml6UiLCLjj7QiLCIyMeaXpSIsIuOPtSIsIjIy5pelIiwi44+2IiwiMjPml6UiLCLjj7ciLCIyNOaXpSIsIuOPuCIsIjI15pelIiwi44+5IiwiMjbml6UiLCLjj7oiLCIyN+aXpSIsIuOPuyIsIjI45pelIiwi44+8IiwiMjnml6UiLCLjj70iLCIzMOaXpSIsIuOPviIsIjMx5pelIiwi76yAIiwiZmYiLCLvrIEiLCJmaSIsIu+sgiIsImZsIiwi76yDIiwiZmZpIiwi76yEIiwiZmZsIiwi76yFIiwixb90Iiwi76yGIiwic3QiLCLvrJMiLCLVtNW2Iiwi76yUIiwi1bTVpSIsIu+slSIsItW01asiLCLvrJYiLCLVvtW2Iiwi76yXIiwi1bTVrSIsIu+tjyIsIteQ15wiLCLvrZAiLCLZsSIsIu+tkSIsItmxIiwi762SIiwi2bsiLCLvrZMiLCLZuyIsIu+tlCIsItm7Iiwi762VIiwi2bsiLCLvrZYiLCLZviIsIu+tlyIsItm+Iiwi762YIiwi2b4iLCLvrZkiLCLZviIsIu+tmiIsItqAIiwi762bIiwi2oAiLCLvrZwiLCLagCIsIu+tnSIsItqAIiwi762eIiwi2boiLCLvrZ8iLCLZuiIsIu+toCIsItm6Iiwi762hIiwi2boiLCLvraIiLCLZvyIsIu+toyIsItm/Iiwi762kIiwi2b8iLCLvraUiLCLZvyIsIu+tpiIsItm5Iiwi762nIiwi2bkiLCLvragiLCLZuSIsIu+tqSIsItm5Iiwi762qIiwi2qQiLCLvrasiLCLapCIsIu+trCIsItqkIiwi762tIiwi2qQiLCLvra4iLCLapiIsIu+tryIsItqmIiwi762wIiwi2qYiLCLvrbEiLCLapiIsIu+tsiIsItqEIiwi762zIiwi2oQiLCLvrbQiLCLahCIsIu+ttSIsItqEIiwi7622Iiwi2oMiLCLvrbciLCLagyIsIu+tuCIsItqDIiwi7625Iiwi2oMiLCLvrboiLCLahiIsIu+tuyIsItqGIiwi7628Iiwi2oYiLCLvrb0iLCLahiIsIu+tviIsItqHIiwi762/Iiwi2ociLCLvroAiLCLahyIsIu+ugSIsItqHIiwi766CIiwi2o0iLCLvroMiLCLajSIsIu+uhCIsItqMIiwi766FIiwi2owiLCLvroYiLCLajiIsIu+uhyIsItqOIiwi766IIiwi2ogiLCLvrokiLCLaiCIsIu+uiiIsItqYIiwi766LIiwi2pgiLCLvrowiLCLakSIsIu+ujSIsItqRIiwi766OIiwi2qkiLCLvro8iLCLaqSIsIu+ukCIsItqpIiwi766RIiwi2qkiLCLvrpIiLCLaryIsIu+ukyIsItqvIiwi766UIiwi2q8iLCLvrpUiLCLaryIsIu+uliIsItqzIiwi766XIiwi2rMiLCLvrpgiLCLasyIsIu+umSIsItqzIiwi766aIiwi2rEiLCLvrpsiLCLasSIsIu+unCIsItqxIiwi766dIiwi2rEiLCLvrp4iLCLauiIsIu+unyIsItq6Iiwi766gIiwi2rsiLCLvrqEiLCLauyIsIu+uoiIsItq7Iiwi766jIiwi2rsiLCLvrqQiLCLbgCIsIu+upSIsItuAIiwi766mIiwi24EiLCLvrqciLCLbgSIsIu+uqCIsItuBIiwi766pIiwi24EiLCLvrqoiLCLaviIsIu+uqyIsItq+Iiwi766sIiwi2r4iLCLvrq0iLCLaviIsIu+uriIsItuSIiwi766vIiwi25IiLCLvrrAiLCLbkyIsIu+usSIsItuTIiwi76+TIiwi2q0iLCLvr5QiLCLarSIsIu+vlSIsItqtIiwi76+WIiwi2q0iLCLvr5ciLCLbhyIsIu+vmCIsItuHIiwi76+ZIiwi24YiLCLvr5oiLCLbhiIsIu+vmyIsItuIIiwi76+cIiwi24giLCLvr50iLCLZtyIsIu+vniIsItuLIiwi76+fIiwi24siLCLvr6AiLCLbhSIsIu+voSIsItuFIiwi76+iIiwi24kiLCLvr6MiLCLbiSIsIu+vpCIsItuQIiwi76+lIiwi25AiLCLvr6YiLCLbkCIsIu+vpyIsItuQIiwi76+oIiwi2YkiLCLvr6kiLCLZiSIsIu+vqiIsItim2KciLCLvr6siLCLYptinIiwi76+sIiwi2KbblSIsIu+vrSIsItim25UiLCLvr64iLCLYptmIIiwi76+vIiwi2KbZiCIsIu+vsCIsItim24ciLCLvr7EiLCLYptuHIiwi76+yIiwi2KbbhiIsIu+vsyIsItim24YiLCLvr7QiLCLYptuIIiwi76+1Iiwi2KbbiCIsIu+vtiIsItim25AiLCLvr7ciLCLYptuQIiwi76+4Iiwi2KbbkCIsIu+vuSIsItim2YkiLCLvr7oiLCLYptmJIiwi76+7Iiwi2KbZiSIsIu+vvCIsItuMIiwi76+9Iiwi24wiLCLvr74iLCLbjCIsIu+vvyIsItuMIiwi77CAIiwi2KbYrCIsIu+wgSIsItim2K0iLCLvsIIiLCLYptmFIiwi77CDIiwi2KbZiSIsIu+whCIsItim2YoiLCLvsIUiLCLYqNisIiwi77CGIiwi2KjYrSIsIu+whyIsItio2K4iLCLvsIgiLCLYqNmFIiwi77CJIiwi2KjZiSIsIu+wiiIsItio2YoiLCLvsIsiLCLYqtisIiwi77CMIiwi2KrYrSIsIu+wjSIsItiq2K4iLCLvsI4iLCLYqtmFIiwi77CPIiwi2KrZiSIsIu+wkCIsItiq2YoiLCLvsJEiLCLYq9isIiwi77CSIiwi2KvZhSIsIu+wkyIsItir2YkiLCLvsJQiLCLYq9mKIiwi77CVIiwi2KzYrSIsIu+wliIsItis2YUiLCLvsJciLCLYrdisIiwi77CYIiwi2K3ZhSIsIu+wmSIsItiu2KwiLCLvsJoiLCLYrtitIiwi77CbIiwi2K7ZhSIsIu+wnCIsItiz2KwiLCLvsJ0iLCLYs9itIiwi77CeIiwi2LPYriIsIu+wnyIsItiz2YUiLCLvsKAiLCLYtditIiwi77ChIiwi2LXZhSIsIu+woiIsIti22KwiLCLvsKMiLCLYttitIiwi77CkIiwi2LbYriIsIu+wpSIsIti22YUiLCLvsKYiLCLYt9itIiwi77CnIiwi2LfZhSIsIu+wqCIsIti42YUiLCLvsKkiLCLYudisIiwi77CqIiwi2LnZhSIsIu+wqyIsIti62KwiLCLvsKwiLCLYutmFIiwi77CtIiwi2YHYrCIsIu+wriIsItmB2K0iLCLvsK8iLCLZgdiuIiwi77CwIiwi2YHZhSIsIu+wsSIsItmB2YkiLCLvsLIiLCLZgdmKIiwi77CzIiwi2YLYrSIsIu+wtCIsItmC2YUiLCLvsLUiLCLZgtmJIiwi77C2Iiwi2YLZiiIsIu+wtyIsItmD2KciLCLvsLgiLCLZg9isIiwi77C5Iiwi2YPYrSIsIu+wuiIsItmD2K4iLCLvsLsiLCLZg9mEIiwi77C8Iiwi2YPZhSIsIu+wvSIsItmD2YkiLCLvsL4iLCLZg9mKIiwi77C/Iiwi2YTYrCIsIu+xgCIsItmE2K0iLCLvsYEiLCLZhNiuIiwi77GCIiwi2YTZhSIsIu+xgyIsItmE2YkiLCLvsYQiLCLZhNmKIiwi77GFIiwi2YXYrCIsIu+xhiIsItmF2K0iLCLvsYciLCLZhdiuIiwi77GIIiwi2YXZhSIsIu+xiSIsItmF2YkiLCLvsYoiLCLZhdmKIiwi77GLIiwi2YbYrCIsIu+xjCIsItmG2K0iLCLvsY0iLCLZhtiuIiwi77GOIiwi2YbZhSIsIu+xjyIsItmG2YkiLCLvsZAiLCLZhtmKIiwi77GRIiwi2YfYrCIsIu+xkiIsItmH2YUiLCLvsZMiLCLZh9mJIiwi77GUIiwi2YfZiiIsIu+xlSIsItmK2KwiLCLvsZYiLCLZititIiwi77GXIiwi2YrYriIsIu+xmCIsItmK2YUiLCLvsZkiLCLZitmJIiwi77GaIiwi2YrZiiIsIu+xmyIsItiw2bAiLCLvsZwiLCLYsdmwIiwi77GdIiwi2YnZsCIsIu+xniIsIiDZjNmRIiwi77GfIiwiINmN2ZEiLCLvsaAiLCIg2Y7ZkSIsIu+xoSIsIiDZj9mRIiwi77GiIiwiINmQ2ZEiLCLvsaMiLCIg2ZHZsCIsIu+xpCIsItim2LEiLCLvsaUiLCLYptiyIiwi77GmIiwi2KbZhSIsIu+xpyIsItim2YYiLCLvsagiLCLYptmJIiwi77GpIiwi2KbZiiIsIu+xqiIsItio2LEiLCLvsasiLCLYqNiyIiwi77GsIiwi2KjZhSIsIu+xrSIsItio2YYiLCLvsa4iLCLYqNmJIiwi77GvIiwi2KjZiiIsIu+xsCIsItiq2LEiLCLvsbEiLCLYqtiyIiwi77GyIiwi2KrZhSIsIu+xsyIsItiq2YYiLCLvsbQiLCLYqtmJIiwi77G1Iiwi2KrZiiIsIu+xtiIsItir2LEiLCLvsbciLCLYq9iyIiwi77G4Iiwi2KvZhSIsIu+xuSIsItir2YYiLCLvsboiLCLYq9mJIiwi77G7Iiwi2KvZiiIsIu+xvCIsItmB2YkiLCLvsb0iLCLZgdmKIiwi77G+Iiwi2YLZiSIsIu+xvyIsItmC2YoiLCLvsoAiLCLZg9inIiwi77KBIiwi2YPZhCIsIu+ygiIsItmD2YUiLCLvsoMiLCLZg9mJIiwi77KEIiwi2YPZiiIsIu+yhSIsItmE2YUiLCLvsoYiLCLZhNmJIiwi77KHIiwi2YTZiiIsIu+yiCIsItmF2KciLCLvsokiLCLZhdmFIiwi77KKIiwi2YbYsSIsIu+yiyIsItmG2LIiLCLvsowiLCLZhtmFIiwi77KNIiwi2YbZhiIsIu+yjiIsItmG2YkiLCLvso8iLCLZhtmKIiwi77KQIiwi2YnZsCIsIu+ykSIsItmK2LEiLCLvspIiLCLZitiyIiwi77KTIiwi2YrZhSIsIu+ylCIsItmK2YYiLCLvspUiLCLZitmJIiwi77KWIiwi2YrZiiIsIu+ylyIsItim2KwiLCLvspgiLCLYptitIiwi77KZIiwi2KbYriIsIu+ymiIsItim2YUiLCLvspsiLCLYptmHIiwi77KcIiwi2KjYrCIsIu+ynSIsItio2K0iLCLvsp4iLCLYqNiuIiwi77KfIiwi2KjZhSIsIu+yoCIsItio2YciLCLvsqEiLCLYqtisIiwi77KiIiwi2KrYrSIsIu+yoyIsItiq2K4iLCLvsqQiLCLYqtmFIiwi77KlIiwi2KrZhyIsIu+ypiIsItir2YUiLCLvsqciLCLYrNitIiwi77KoIiwi2KzZhSIsIu+yqSIsItit2KwiLCLvsqoiLCLYrdmFIiwi77KrIiwi2K7YrCIsIu+yrCIsItiu2YUiLCLvsq0iLCLYs9isIiwi77KuIiwi2LPYrSIsIu+yryIsItiz2K4iLCLvsrAiLCLYs9mFIiwi77KxIiwi2LXYrSIsIu+ysiIsIti12K4iLCLvsrMiLCLYtdmFIiwi77K0Iiwi2LbYrCIsIu+ytSIsIti22K0iLCLvsrYiLCLYttiuIiwi77K3Iiwi2LbZhSIsIu+yuCIsIti32K0iLCLvsrkiLCLYuNmFIiwi77K6Iiwi2LnYrCIsIu+yuyIsIti52YUiLCLvsrwiLCLYutisIiwi77K9Iiwi2LrZhSIsIu+yviIsItmB2KwiLCLvsr8iLCLZgditIiwi77OAIiwi2YHYriIsIu+zgSIsItmB2YUiLCLvs4IiLCLZgtitIiwi77ODIiwi2YLZhSIsIu+zhCIsItmD2KwiLCLvs4UiLCLZg9itIiwi77OGIiwi2YPYriIsIu+zhyIsItmD2YQiLCLvs4giLCLZg9mFIiwi77OJIiwi2YTYrCIsIu+ziiIsItmE2K0iLCLvs4siLCLZhNiuIiwi77OMIiwi2YTZhSIsIu+zjSIsItmE2YciLCLvs44iLCLZhdisIiwi77OPIiwi2YXYrSIsIu+zkCIsItmF2K4iLCLvs5EiLCLZhdmFIiwi77OSIiwi2YbYrCIsIu+zkyIsItmG2K0iLCLvs5QiLCLZhtiuIiwi77OVIiwi2YbZhSIsIu+zliIsItmG2YciLCLvs5ciLCLZh9isIiwi77OYIiwi2YfZhSIsIu+zmSIsItmH2bAiLCLvs5oiLCLZitisIiwi77ObIiwi2YrYrSIsIu+znCIsItmK2K4iLCLvs50iLCLZitmFIiwi77OeIiwi2YrZhyIsIu+znyIsItim2YUiLCLvs6AiLCLYptmHIiwi77OhIiwi2KjZhSIsIu+zoiIsItio2YciLCLvs6MiLCLYqtmFIiwi77OkIiwi2KrZhyIsIu+zpSIsItir2YUiLCLvs6YiLCLYq9mHIiwi77OnIiwi2LPZhSIsIu+zqCIsItiz2YciLCLvs6kiLCLYtNmFIiwi77OqIiwi2LTZhyIsIu+zqyIsItmD2YQiLCLvs6wiLCLZg9mFIiwi77OtIiwi2YTZhSIsIu+zriIsItmG2YUiLCLvs68iLCLZhtmHIiwi77OwIiwi2YrZhSIsIu+zsSIsItmK2YciLCLvs7IiLCLZgNmO2ZEiLCLvs7MiLCLZgNmP2ZEiLCLvs7QiLCLZgNmQ2ZEiLCLvs7UiLCLYt9mJIiwi77O2Iiwi2LfZiiIsIu+ztyIsIti52YkiLCLvs7giLCLYudmKIiwi77O5Iiwi2LrZiSIsIu+zuiIsIti62YoiLCLvs7siLCLYs9mJIiwi77O8Iiwi2LPZiiIsIu+zvSIsIti02YkiLCLvs74iLCLYtNmKIiwi77O/Iiwi2K3ZiSIsIu+0gCIsItit2YoiLCLvtIEiLCLYrNmJIiwi77SCIiwi2KzZiiIsIu+0gyIsItiu2YkiLCLvtIQiLCLYrtmKIiwi77SFIiwi2LXZiSIsIu+0hiIsIti12YoiLCLvtIciLCLYttmJIiwi77SIIiwi2LbZiiIsIu+0iSIsIti02KwiLCLvtIoiLCLYtNitIiwi77SLIiwi2LTYriIsIu+0jCIsIti02YUiLCLvtI0iLCLYtNixIiwi77SOIiwi2LPYsSIsIu+0jyIsIti12LEiLCLvtJAiLCLYttixIiwi77SRIiwi2LfZiSIsIu+0kiIsIti32YoiLCLvtJMiLCLYudmJIiwi77SUIiwi2LnZiiIsIu+0lSIsIti62YkiLCLvtJYiLCLYutmKIiwi77SXIiwi2LPZiSIsIu+0mCIsItiz2YoiLCLvtJkiLCLYtNmJIiwi77SaIiwi2LTZiiIsIu+0myIsItit2YkiLCLvtJwiLCLYrdmKIiwi77SdIiwi2KzZiSIsIu+0niIsItis2YoiLCLvtJ8iLCLYrtmJIiwi77SgIiwi2K7ZiiIsIu+0oSIsIti12YkiLCLvtKIiLCLYtdmKIiwi77SjIiwi2LbZiSIsIu+0pCIsIti22YoiLCLvtKUiLCLYtNisIiwi77SmIiwi2LTYrSIsIu+0pyIsIti02K4iLCLvtKgiLCLYtNmFIiwi77SpIiwi2LTYsSIsIu+0qiIsItiz2LEiLCLvtKsiLCLYtdixIiwi77SsIiwi2LbYsSIsIu+0rSIsIti02KwiLCLvtK4iLCLYtNitIiwi77SvIiwi2LTYriIsIu+0sCIsIti02YUiLCLvtLEiLCLYs9mHIiwi77SyIiwi2LTZhyIsIu+0syIsIti32YUiLCLvtLQiLCLYs9isIiwi77S1Iiwi2LPYrSIsIu+0tiIsItiz2K4iLCLvtLciLCLYtNisIiwi77S4Iiwi2LTYrSIsIu+0uSIsIti02K4iLCLvtLoiLCLYt9mFIiwi77S7Iiwi2LjZhSIsIu+0vCIsItin2YsiLCLvtL0iLCLYp9mLIiwi77WQIiwi2KrYrNmFIiwi77WRIiwi2KrYrdisIiwi77WSIiwi2KrYrdisIiwi77WTIiwi2KrYrdmFIiwi77WUIiwi2KrYrtmFIiwi77WVIiwi2KrZhdisIiwi77WWIiwi2KrZhditIiwi77WXIiwi2KrZhdiuIiwi77WYIiwi2KzZhditIiwi77WZIiwi2KzZhditIiwi77WaIiwi2K3ZhdmKIiwi77WbIiwi2K3ZhdmJIiwi77WcIiwi2LPYrdisIiwi77WdIiwi2LPYrNitIiwi77WeIiwi2LPYrNmJIiwi77WfIiwi2LPZhditIiwi77WgIiwi2LPZhditIiwi77WhIiwi2LPZhdisIiwi77WiIiwi2LPZhdmFIiwi77WjIiwi2LPZhdmFIiwi77WkIiwi2LXYrditIiwi77WlIiwi2LXYrditIiwi77WmIiwi2LXZhdmFIiwi77WnIiwi2LTYrdmFIiwi77WoIiwi2LTYrdmFIiwi77WpIiwi2LTYrNmKIiwi77WqIiwi2LTZhdiuIiwi77WrIiwi2LTZhdiuIiwi77WsIiwi2LTZhdmFIiwi77WtIiwi2LTZhdmFIiwi77WuIiwi2LbYrdmJIiwi77WvIiwi2LbYrtmFIiwi77WwIiwi2LbYrtmFIiwi77WxIiwi2LfZhditIiwi77WyIiwi2LfZhditIiwi77WzIiwi2LfZhdmFIiwi77W0Iiwi2LfZhdmKIiwi77W1Iiwi2LnYrNmFIiwi77W2Iiwi2LnZhdmFIiwi77W3Iiwi2LnZhdmFIiwi77W4Iiwi2LnZhdmJIiwi77W5Iiwi2LrZhdmFIiwi77W6Iiwi2LrZhdmKIiwi77W7Iiwi2LrZhdmJIiwi77W8Iiwi2YHYrtmFIiwi77W9Iiwi2YHYrtmFIiwi77W+Iiwi2YLZhditIiwi77W/Iiwi2YLZhdmFIiwi77aAIiwi2YTYrdmFIiwi77aBIiwi2YTYrdmKIiwi77aCIiwi2YTYrdmJIiwi77aDIiwi2YTYrNisIiwi77aEIiwi2YTYrNisIiwi77aFIiwi2YTYrtmFIiwi77aGIiwi2YTYrtmFIiwi77aHIiwi2YTZhditIiwi77aIIiwi2YTZhditIiwi77aJIiwi2YXYrdisIiwi77aKIiwi2YXYrdmFIiwi77aLIiwi2YXYrdmKIiwi77aMIiwi2YXYrNitIiwi77aNIiwi2YXYrNmFIiwi77aOIiwi2YXYrtisIiwi77aPIiwi2YXYrtmFIiwi77aSIiwi2YXYrNiuIiwi77aTIiwi2YfZhdisIiwi77aUIiwi2YfZhdmFIiwi77aVIiwi2YbYrdmFIiwi77aWIiwi2YbYrdmJIiwi77aXIiwi2YbYrNmFIiwi77aYIiwi2YbYrNmFIiwi77aZIiwi2YbYrNmJIiwi77aaIiwi2YbZhdmKIiwi77abIiwi2YbZhdmJIiwi77acIiwi2YrZhdmFIiwi77adIiwi2YrZhdmFIiwi77aeIiwi2KjYrtmKIiwi77afIiwi2KrYrNmKIiwi77agIiwi2KrYrNmJIiwi77ahIiwi2KrYrtmKIiwi77aiIiwi2KrYrtmJIiwi77ajIiwi2KrZhdmKIiwi77akIiwi2KrZhdmJIiwi77alIiwi2KzZhdmKIiwi77amIiwi2KzYrdmJIiwi77anIiwi2KzZhdmJIiwi77aoIiwi2LPYrtmJIiwi77apIiwi2LXYrdmKIiwi77aqIiwi2LTYrdmKIiwi77arIiwi2LbYrdmKIiwi77asIiwi2YTYrNmKIiwi77atIiwi2YTZhdmKIiwi77auIiwi2YrYrdmKIiwi77avIiwi2YrYrNmKIiwi77awIiwi2YrZhdmKIiwi77axIiwi2YXZhdmKIiwi77ayIiwi2YLZhdmKIiwi77azIiwi2YbYrdmKIiwi77a0Iiwi2YLZhditIiwi77a1Iiwi2YTYrdmFIiwi77a2Iiwi2LnZhdmKIiwi77a3Iiwi2YPZhdmKIiwi77a4Iiwi2YbYrNitIiwi77a5Iiwi2YXYrtmKIiwi77a6Iiwi2YTYrNmFIiwi77a7Iiwi2YPZhdmFIiwi77a8Iiwi2YTYrNmFIiwi77a9Iiwi2YbYrNitIiwi77a+Iiwi2KzYrdmKIiwi77a/Iiwi2K3YrNmKIiwi77eAIiwi2YXYrNmKIiwi77eBIiwi2YHZhdmKIiwi77eCIiwi2KjYrdmKIiwi77eDIiwi2YPZhdmFIiwi77eEIiwi2LnYrNmFIiwi77eFIiwi2LXZhdmFIiwi77eGIiwi2LPYrtmKIiwi77eHIiwi2YbYrNmKIiwi77mJIiwi4oC+Iiwi77mKIiwi4oC+Iiwi77mLIiwi4oC+Iiwi77mMIiwi4oC+Iiwi77mNIiwiXyIsIu+5jiIsIl8iLCLvuY8iLCJfIiwi77qAIiwi2KEiLCLvuoEiLCLYoiIsIu+6giIsItiiIiwi77qDIiwi2KMiLCLvuoQiLCLYoyIsIu+6hSIsItikIiwi77qGIiwi2KQiLCLvuociLCLYpSIsIu+6iCIsItilIiwi77qJIiwi2KYiLCLvuooiLCLYpiIsIu+6iyIsItimIiwi77qMIiwi2KYiLCLvuo0iLCLYpyIsIu+6jiIsItinIiwi77qPIiwi2KgiLCLvupAiLCLYqCIsIu+6kSIsItioIiwi77qSIiwi2KgiLCLvupMiLCLYqSIsIu+6lCIsItipIiwi77qVIiwi2KoiLCLvupYiLCLYqiIsIu+6lyIsItiqIiwi77qYIiwi2KoiLCLvupkiLCLYqyIsIu+6miIsItirIiwi77qbIiwi2KsiLCLvupwiLCLYqyIsIu+6nSIsItisIiwi77qeIiwi2KwiLCLvup8iLCLYrCIsIu+6oCIsItisIiwi77qhIiwi2K0iLCLvuqIiLCLYrSIsIu+6oyIsItitIiwi77qkIiwi2K0iLCLvuqUiLCLYriIsIu+6piIsItiuIiwi77qnIiwi2K4iLCLvuqgiLCLYriIsIu+6qSIsItivIiwi77qqIiwi2K8iLCLvuqsiLCLYsCIsIu+6rCIsItiwIiwi77qtIiwi2LEiLCLvuq4iLCLYsSIsIu+6ryIsItiyIiwi77qwIiwi2LIiLCLvurEiLCLYsyIsIu+6siIsItizIiwi77qzIiwi2LMiLCLvurQiLCLYsyIsIu+6tSIsIti0Iiwi77q2Iiwi2LQiLCLvurciLCLYtCIsIu+6uCIsIti0Iiwi77q5Iiwi2LUiLCLvuroiLCLYtSIsIu+6uyIsIti1Iiwi77q8Iiwi2LUiLCLvur0iLCLYtiIsIu+6viIsIti2Iiwi77q/Iiwi2LYiLCLvu4AiLCLYtiIsIu+7gSIsIti3Iiwi77uCIiwi2LciLCLvu4MiLCLYtyIsIu+7hCIsIti3Iiwi77uFIiwi2LgiLCLvu4YiLCLYuCIsIu+7hyIsIti4Iiwi77uIIiwi2LgiLCLvu4kiLCLYuSIsIu+7iiIsIti5Iiwi77uLIiwi2LkiLCLvu4wiLCLYuSIsIu+7jSIsIti6Iiwi77uOIiwi2LoiLCLvu48iLCLYuiIsIu+7kCIsIti6Iiwi77uRIiwi2YEiLCLvu5IiLCLZgSIsIu+7kyIsItmBIiwi77uUIiwi2YEiLCLvu5UiLCLZgiIsIu+7liIsItmCIiwi77uXIiwi2YIiLCLvu5giLCLZgiIsIu+7mSIsItmDIiwi77uaIiwi2YMiLCLvu5siLCLZgyIsIu+7nCIsItmDIiwi77udIiwi2YQiLCLvu54iLCLZhCIsIu+7nyIsItmEIiwi77ugIiwi2YQiLCLvu6EiLCLZhSIsIu+7oiIsItmFIiwi77ujIiwi2YUiLCLvu6QiLCLZhSIsIu+7pSIsItmGIiwi77umIiwi2YYiLCLvu6ciLCLZhiIsIu+7qCIsItmGIiwi77upIiwi2YciLCLvu6oiLCLZhyIsIu+7qyIsItmHIiwi77usIiwi2YciLCLvu60iLCLZiCIsIu+7riIsItmIIiwi77uvIiwi2YkiLCLvu7AiLCLZiSIsIu+7sSIsItmKIiwi77uyIiwi2YoiLCLvu7MiLCLZiiIsIu+7tCIsItmKIiwi77u1Iiwi2YTYoiIsIu+7tiIsItmE2KIiLCLvu7ciLCLZhNijIiwi77u4Iiwi2YTYoyIsIu+7uSIsItmE2KUiLCLvu7oiLCLZhNilIiwi77u7Iiwi2YTYpyIsIu+7vCIsItmE2KciXX0pKTtmdW5jdGlvbiBsKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYodDw9MXx8IWZ1bmN0aW9uKGUpe2xldCB0PXNbMTNdO3JldHVybiBlPj10LmJlZ2luJiZlPHQuZW5kfHwodD1zWzExXSxlPj10LmJlZ2luJiZlPHQuZW5kKX0oZS5jaGFyQ29kZUF0KDApKSlyZXR1cm4gZTtjb25zdCByPVtdO2ZvcihsZXQgbj10LTE7bj49MDtuLS0pci5wdXNoKGVbbl0pO3JldHVybiByLmpvaW4oIiIpfWNvbnN0IGY9bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLGg9bmV3IE1hcDtmdW5jdGlvbiBkKGUpe2NvbnN0IHQ9aC5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCByPWUubWF0Y2goZiksbj17aXNXaGl0ZXNwYWNlOiEoIXJ8fCFyWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKCFyfHwhclsyXSksaXNJbnZpc2libGVGb3JtYXRNYXJrOiEoIXJ8fCFyWzNdKX07cmV0dXJuIGguc2V0KGUsbiksbn1mdW5jdGlvbiBwKCl7aC5jbGVhcigpfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPXQuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9dm9pZCAwLHQuZ2V0U3RhbmRhcmRGb250TmFtZT1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfSx0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciBuPXIoMTM1KSxhPXIoMTY3KSxpPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iLGUuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiLGUuQ291cmllcj0iQ291cmllciIsZS5TeW1ib2w9IlN5bWJvbCIsZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyIsZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiLGVbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIixlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWw9IkhlbHZldGljYSIsZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5BcmlhbE1UPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZS5Db3VyaWVyTmV3PSJDb3VyaWVyIixlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIixlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIixlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIixlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCIsZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIixlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCIsZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiLGUuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIixlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO3ZhciBvPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiIsZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiIsZS5IZWx2ZXRpY2E9IkZveGl0U2Fucy5wZmIiLGVbIkhlbHZldGljYS1Cb2xkIl09IkZveGl0U2Fuc0JvbGQucGZiIixlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iRm94aXRTYW5zQm9sZEl0YWxpYy5wZmIiLGVbIkhlbHZldGljYS1PYmxpcXVlIl09IkZveGl0U2Fuc0l0YWxpYy5wZmIiLGVbIlRpbWVzLVJvbWFuIl09IkZveGl0U2VyaWYucGZiIixlWyJUaW1lcy1Cb2xkIl09IkZveGl0U2VyaWZCb2xkLnBmYiIsZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJGb3hpdFNlcmlmQm9sZEl0YWxpYy5wZmIiLGVbIlRpbWVzLUl0YWxpYyJdPSJGb3hpdFNlcmlmSXRhbGljLnBmYiIsZS5TeW1ib2w9IkZveGl0U3ltYm9sLnBmYiIsZS5aYXBmRGluZ2JhdHM9IkZveGl0RGluZ2JhdHMucGZiIixlWyJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIl09IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkIl09IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiIsZVsiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiJ9KSk7dC5nZXRGb250TmFtZVRvRmlsZU1hcD1vO3ZhciBzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiLGVbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIixlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIixlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCIsZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiLGVbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyIsZVsiSXRjU3ltYm9sLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkl0Y1N5bWJvbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLUJvb2siXT0iSGVsdmV0aWNhIixlWyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLU1lZGl1bSJdPSJIZWx2ZXRpY2EiLGVbIkl0Y1N5bWJvbC1NZWRpdW1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuTHVjaWRhQ29uc29sZT0iQ291cmllciIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiTHVjaWRhU2Fucy1EZW1pIl09IkhlbHZldGljYS1Cb2xkIixlWyJNUy1Hb3RoaWMiXT0iTVMgR290aGljIixlWyJNUy1Hb3RoaWMtQm9sZCJdPSJNUyBHb3RoaWMtQm9sZCIsZVsiTVMtR290aGljLUJvbGRJdGFsaWMiXT0iTVMgR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLUdvdGhpYy1JdGFsaWMiXT0iTVMgR290aGljLUl0YWxpYyIsZVsiTVMtTWluY2hvIl09Ik1TIE1pbmNobyIsZVsiTVMtTWluY2hvLUJvbGQiXT0iTVMgTWluY2hvLUJvbGQiLGVbIk1TLU1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIE1pbmNoby1Cb2xkSXRhbGljIixlWyJNUy1NaW5jaG8tSXRhbGljIl09Ik1TIE1pbmNoby1JdGFsaWMiLGVbIk1TLVBHb3RoaWMiXT0iTVMgUEdvdGhpYyIsZVsiTVMtUEdvdGhpYy1Cb2xkIl09Ik1TIFBHb3RoaWMtQm9sZCIsZVsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIFBHb3RoaWMtQm9sZEl0YWxpYyIsZVsiTVMtUEdvdGhpYy1JdGFsaWMiXT0iTVMgUEdvdGhpYy1JdGFsaWMiLGVbIk1TLVBNaW5jaG8iXT0iTVMgUE1pbmNobyIsZVsiTVMtUE1pbmNoby1Cb2xkIl09Ik1TIFBNaW5jaG8tQm9sZCIsZVsiTVMtUE1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIFBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtUE1pbmNoby1JdGFsaWMiXT0iTVMgUE1pbmNoby1JdGFsaWMiLGUuTnVwdGlhbFNjcmlwdD0iVGltZXMtSXRhbGljIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSIsZS5XaW5nZGluZ3M9IlphcGZEaW5nYmF0cyIsZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0iWmFwZkRpbmdiYXRzIn0pKTt0LmdldE5vblN0ZEZvbnRNYXA9czt2YXIgYz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwLGVbIkFkb2JlIFRleHQiXT0hMCxlLkFsYmVydHVzPSEwLGUuQWxkdXM9ITAsZS5BbGV4YW5kcmlhPSEwLGUuQWxnZXJpYW49ITAsZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwLGUuQW50aXF1YT0hMCxlLkFwZXg9ITAsZS5Bcm5vPSEwLGUuQXN0ZXI9ITAsZS5BdXJvcmE9ITAsZS5CYXNrZXJ2aWxsZT0hMCxlLkJlbGw9ITAsZS5CZW1ibz0hMCxlWyJCZW1ibyBTY2hvb2xib29rIl09ITAsZS5CZW5ndWlhdD0hMCxlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMCxlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMCxlWyJCZXJ0aG9sZCBDaXR5Il09ITAsZS5Cb2Rvbmk9ITAsZVsiQmF1ZXIgQm9kb25pIl09ITAsZVsiQm9vayBBbnRpcXVhIl09ITAsZS5Cb29rbWFuPSEwLGVbIkJvcmRlYXV4IFJvbWFuIl09ITAsZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMCxlLkNhbGlzdG89ITAsZS5DYWx2ZXJ0PSEwLGUuQ2FwaXRhbHM9ITAsZS5DYW1icmlhPSEwLGUuQ2FydGllcj0hMCxlLkNhc2xvbj0hMCxlLkNhdHVsbD0hMCxlLkNlbnRhdXI9ITAsZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMCxlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMCxlLkNoYXBhcnJhbD0hMCxlWyJDaGFyaXMgU0lMIl09ITAsZS5DaGVsdGVuaGFtPSEwLGVbIkNob2xsYSBTbGFiIl09ITAsZS5DbGFyZW5kb249ITAsZS5DbGVhcmZhY2U9ITAsZS5Db2NoaW49ITAsZS5Db2xvbm5hPSEwLGVbIkNvbXB1dGVyIE1vZGVybiJdPSEwLGVbIkNvbmNyZXRlIFJvbWFuIl09ITAsZS5Db25zdGFudGlhPSEwLGVbIkNvb3BlciBCbGFjayJdPSEwLGUuQ29yb25hPSEwLGUuRWNvdHlwZT0hMCxlLkVneXB0aWVubmU9ITAsZS5FbGVwaGFudD0hMCxlLkV4Y2Vsc2lvcj0hMCxlLkZhaXJmaWVsZD0hMCxlWyJGRiBTY2FsYSJdPSEwLGUuRm9sa2FyZD0hMCxlLkZvb3RsaWdodD0hMCxlLkZyZWVTZXJpZj0hMCxlWyJGcml6IFF1YWRyYXRhIl09ITAsZS5HYXJhbW9uZD0hMCxlLkdlbnRpdW09ITAsZS5HZW9yZ2lhPSEwLGUuR2xvdWNlc3Rlcj0hMCxlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMCxlWyJHb3VkeSBTY2hvb2xib29rIl09ITAsZVsiR291ZHkgUHJvIEZvbnQiXT0hMCxlLkdyYW5qb249ITAsZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMCxlLkhlYXRoZXI9ITAsZS5IZXJjdWxlcz0hMCxlWyJIaWdoIFRvd2VyIFRleHQiXT0hMCxlLkhpcm9zaGlnZT0hMCxlWyJIb2VmbGVyIFRleHQiXT0hMCxlWyJIdW1hbmEgU2VyaWYiXT0hMCxlLkltcHJpbnQ9ITAsZVsiSW9uaWMgTm8uIDUiXT0hMCxlLkphbnNvbj0hMCxlLkpvYW5uYT0hMCxlLktvcmlubmE9ITAsZS5MZXhpY29uPSEwLGUuTGliZXJhdGlvblNlcmlmPSEwLGVbIkxpYmVyYXRpb24gU2VyaWYiXT0hMCxlWyJMaW51eCBMaWJlcnRpbmUiXT0hMCxlLkxpdGVyYXR1cm5heWE9ITAsZS5MdWNpZGE9ITAsZVsiTHVjaWRhIEJyaWdodCJdPSEwLGUuTWVsaW9yPSEwLGUuTWVtcGhpcz0hMCxlLk1pbGxlcj0hMCxlLk1pbmlvbj0hMCxlLk1vZGVybj0hMCxlWyJNb25hIExpc2EiXT0hMCxlWyJNcnMgRWF2ZXMiXT0hMCxlWyJNUyBTZXJpZiJdPSEwLGVbIk11c2VvIFNsYWIiXT0hMCxlWyJOZXcgWW9yayJdPSEwLGVbIk5pbWJ1cyBSb21hbiJdPSEwLGVbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwLGUuTnVwdGlhbFNjcmlwdD0hMCxlLlBhbGF0aW5vPSEwLGUuUGVycGV0dWE9ITAsZS5QbGFudGluPSEwLGVbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwLGUuUGxheWJpbGw9ITAsZVsiUG9vciBSaWNoYXJkIl09ITAsZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLlJlbmF1bHQ9ITAsZS5SZXF1aWVtPSEwLGUuUm9ja3dlbGw9ITAsZS5Sb21hbj0hMCxlWyJSb3RpcyBTZXJpZiJdPSEwLGUuU2Fib249ITAsZS5TY2FsYT0hMCxlLlNlYWd1bGw9ITAsZS5TaXN0aW5hPSEwLGUuU291dmVuaXI9ITAsZS5TVElYPSEwLGVbIlN0b25lIEluZm9ybWFsIl09ITAsZVsiU3RvbmUgU2VyaWYiXT0hMCxlLlN5bGZhZW49ITAsZS5UaW1lcz0hMCxlLlRyYWphbj0hMCxlWyJUcmluaXTDqSJdPSEwLGVbIlRydW1wIE1lZGlhZXZhbCJdPSEwLGUuVXRvcGlhPSEwLGVbIlZhbGUgVHlwZSJdPSEwLGVbIkJpdHN0cmVhbSBWZXJhIl09ITAsZVsiVmVyYSBTZXJpZiJdPSEwLGUuVmVyc2FpbGxlcz0hMCxlLldhbnRlZD0hMCxlLldlaXNzPSEwLGVbIldpZGUgTGF0aW4iXT0hMCxlLldpbmRzb3I9ITAsZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO3ZhciB1PSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5EaW5nYmF0cz0hMCxlLlN5bWJvbD0hMCxlLlphcGZEaW5nYmF0cz0hMH0pKTt0LmdldFN5bWJvbHNGb250cz11O3ZhciBsPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyXT0xMCxlWzNdPTMyLGVbNF09MzMsZVs1XT0zNCxlWzZdPTM1LGVbN109MzYsZVs4XT0zNyxlWzldPTM4LGVbMTBdPTM5LGVbMTFdPTQwLGVbMTJdPTQxLGVbMTNdPTQyLGVbMTRdPTQzLGVbMTVdPTQ0LGVbMTZdPTQ1LGVbMTddPTQ2LGVbMThdPTQ3LGVbMTldPTQ4LGVbMjBdPTQ5LGVbMjFdPTUwLGVbMjJdPTUxLGVbMjNdPTUyLGVbMjRdPTUzLGVbMjVdPTU0LGVbMjZdPTU1LGVbMjddPTU2LGVbMjhdPTU3LGVbMjldPTU4LGVbMzBdPTg5NCxlWzMxXT02MCxlWzMyXT02MSxlWzMzXT02MixlWzM0XT02MyxlWzM1XT02NCxlWzM2XT02NSxlWzM3XT02NixlWzM4XT02NyxlWzM5XT02OCxlWzQwXT02OSxlWzQxXT03MCxlWzQyXT03MSxlWzQzXT03MixlWzQ0XT03MyxlWzQ1XT03NCxlWzQ2XT03NSxlWzQ3XT03NixlWzQ4XT03NyxlWzQ5XT03OCxlWzUwXT03OSxlWzUxXT04MCxlWzUyXT04MSxlWzUzXT04MixlWzU0XT04MyxlWzU1XT04NCxlWzU2XT04NSxlWzU3XT04NixlWzU4XT04NyxlWzU5XT04OCxlWzYwXT04OSxlWzYxXT05MCxlWzYyXT05MSxlWzYzXT05MixlWzY0XT05MyxlWzY1XT05NCxlWzY2XT05NSxlWzY3XT05NixlWzY4XT05NyxlWzY5XT05OCxlWzcwXT05OSxlWzcxXT0xMDAsZVs3Ml09MTAxLGVbNzNdPTEwMixlWzc0XT0xMDMsZVs3NV09MTA0LGVbNzZdPTEwNSxlWzc3XT0xMDYsZVs3OF09MTA3LGVbNzldPTEwOCxlWzgwXT0xMDksZVs4MV09MTEwLGVbODJdPTExMSxlWzgzXT0xMTIsZVs4NF09MTEzLGVbODVdPTExNCxlWzg2XT0xMTUsZVs4N109MTE2LGVbODhdPTExNyxlWzg5XT0xMTgsZVs5MF09MTE5LGVbOTFdPTEyMCxlWzkyXT0xMjEsZVs5M109MTIyLGVbOTRdPTEyMyxlWzk1XT0xMjQsZVs5Nl09MTI1LGVbOTddPTEyNixlWzk4XT0xOTYsZVs5OV09MTk3LGVbMTAwXT0xOTksZVsxMDFdPTIwMSxlWzEwMl09MjA5LGVbMTAzXT0yMTQsZVsxMDRdPTIyMCxlWzEwNV09MjI1LGVbMTA2XT0yMjQsZVsxMDddPTIyNixlWzEwOF09MjI4LGVbMTA5XT0yMjcsZVsxMTBdPTIyOSxlWzExMV09MjMxLGVbMTEyXT0yMzMsZVsxMTNdPTIzMixlWzExNF09MjM0LGVbMTE1XT0yMzUsZVsxMTZdPTIzNyxlWzExN109MjM2LGVbMTE4XT0yMzgsZVsxMTldPTIzOSxlWzEyMF09MjQxLGVbMTIxXT0yNDMsZVsxMjJdPTI0MixlWzEyM109MjQ0LGVbMTI0XT0yNDYsZVsxMjVdPTI0NSxlWzEyNl09MjUwLGVbMTI3XT0yNDksZVsxMjhdPTI1MSxlWzEyOV09MjUyLGVbMTMwXT04MjI0LGVbMTMxXT0xNzYsZVsxMzJdPTE2MixlWzEzM109MTYzLGVbMTM0XT0xNjcsZVsxMzVdPTgyMjYsZVsxMzZdPTE4MixlWzEzN109MjIzLGVbMTM4XT0xNzQsZVsxMzldPTE2OSxlWzE0MF09ODQ4MixlWzE0MV09MTgwLGVbMTQyXT0xNjgsZVsxNDNdPTg4MDAsZVsxNDRdPTE5OCxlWzE0NV09MjE2LGVbMTQ2XT04NzM0LGVbMTQ3XT0xNzcsZVsxNDhdPTg4MDQsZVsxNDldPTg4MDUsZVsxNTBdPTE2NSxlWzE1MV09MTgxLGVbMTUyXT04NzA2LGVbMTUzXT04NzIxLGVbMTU0XT04NzE5LGVbMTU2XT04NzQ3LGVbMTU3XT0xNzAsZVsxNThdPTE4NixlWzE1OV09ODQ4NixlWzE2MF09MjMwLGVbMTYxXT0yNDgsZVsxNjJdPTE5MSxlWzE2M109MTYxLGVbMTY0XT0xNzIsZVsxNjVdPTg3MzAsZVsxNjZdPTQwMixlWzE2N109ODc3NixlWzE2OF09ODcxMCxlWzE2OV09MTcxLGVbMTcwXT0xODcsZVsxNzFdPTgyMzAsZVsxNzldPTgyMjAsZVsxODBdPTgyMjEsZVsxODFdPTgyMTYsZVsxODJdPTgyMTcsZVsyMDBdPTE5MyxlWzIwM109MjA1LGVbMjEwXT0yMTgsZVsyMjNdPTcxMSxlWzIyNF09MzIxLGVbMjI1XT0zMjIsZVsyMjZdPTM1MixlWzIyN109MzUzLGVbMjI4XT0zODEsZVsyMjldPTM4MixlWzIzM109MjIxLGVbMjM0XT0yNTMsZVsyNTJdPTI2MyxlWzI1M109MjY4LGVbMjU0XT0yNjksZVsyNThdPTI1OCxlWzI2MF09MjYwLGVbMjYxXT0yNjEsZVsyNjVdPTI4MCxlWzI2Nl09MjgxLGVbMjY3XT0yODIsZVsyNjhdPTI4MyxlWzI2OV09MzEzLGVbMjc1XT0zMjMsZVsyNzZdPTMyNCxlWzI3OF09MzI4LGVbMjgzXT0zNDQsZVsyODRdPTM0NSxlWzI4NV09MzQ2LGVbMjg2XT0zNDcsZVsyOTJdPTM2NyxlWzI5NV09Mzc3LGVbMjk2XT0zNzgsZVsyOThdPTM4MCxlWzMwNV09OTYzLGVbMzA2XT05NjQsZVszMDddPTk2NixlWzMwOF09ODIxNSxlWzMwOV09ODI1MixlWzMxMF09ODMxOSxlWzMxMV09ODM1OSxlWzMxMl09ODU5MixlWzMxM109ODU5MyxlWzMzN109OTU1MixlWzQ5M109MTAzOSxlWzQ5NF09MTA0MCxlWzY3Ml09MTQ4OCxlWzY3M109MTQ4OSxlWzY3NF09MTQ5MCxlWzY3NV09MTQ5MSxlWzY3Nl09MTQ5MixlWzY3N109MTQ5MyxlWzY3OF09MTQ5NCxlWzY3OV09MTQ5NSxlWzY4MF09MTQ5NixlWzY4MV09MTQ5NyxlWzY4Ml09MTQ5OCxlWzY4M109MTQ5OSxlWzY4NF09MTUwMCxlWzY4NV09MTUwMSxlWzY4Nl09MTUwMixlWzY4N109MTUwMyxlWzY4OF09MTUwNCxlWzY4OV09MTUwNSxlWzY5MF09MTUwNixlWzY5MV09MTUwNyxlWzY5Ml09MTUwOCxlWzY5M109MTUwOSxlWzY5NF09MTUxMCxlWzY5NV09MTUxMSxlWzY5Nl09MTUxMixlWzY5N109MTUxMyxlWzY5OF09MTUxNCxlWzcwNV09MTUyNCxlWzcwNl09ODM2MixlWzcxMF09NjQyODgsZVs3MTFdPTY0Mjk4LGVbNzU5XT0xNjE3LGVbNzYxXT0xNzc2LGVbNzYzXT0xNzc4LGVbNzc1XT0xNjUyLGVbNzc3XT0xNzY0LGVbNzc4XT0xNzgwLGVbNzc5XT0xNzgxLGVbNzgwXT0xNzgyLGVbNzgyXT03NzEsZVs3ODNdPTY0NzI2LGVbNzg2XT04MzYzLGVbNzg4XT04NTMyLGVbNzkwXT03NjgsZVs3OTFdPTc2OSxlWzc5Ml09NzY4LGVbNzk1XT04MDMsZVs3OTddPTY0MzM2LGVbNzk4XT02NDMzNyxlWzc5OV09NjQzNDIsZVs4MDBdPTY0MzQzLGVbODAxXT02NDM0NCxlWzgwMl09NjQzNDUsZVs4MDNdPTY0MzYyLGVbODA0XT02NDM2MyxlWzgwNV09NjQzNjQsZVsyNDI0XT03ODIxLGVbMjQyNV09NzgyMixlWzI0MjZdPTc4MjMsZVsyNDI3XT03ODI0LGVbMjQyOF09NzgyNSxlWzI0MjldPTc4MjYsZVsyNDMwXT03ODI3LGVbMjQzM109NzY4MixlWzI2NzhdPTgwNDUsZVsyNjc5XT04MDQ2LGVbMjgzMF09MTU1MixlWzI4MzhdPTY4NixlWzI4NDBdPTc1MSxlWzI4NDJdPTc1MyxlWzI4NDNdPTc1NCxlWzI4NDRdPTc1NSxlWzI4NDZdPTc1NyxlWzI4NTZdPTc2NyxlWzI4NTddPTg0OCxlWzI4NThdPTg0OSxlWzI4NjJdPTg1MyxlWzI4NjNdPTg1NCxlWzI4NjRdPTg1NSxlWzI4NjVdPTg2MSxlWzI4NjZdPTg2MixlWzI5MDZdPTc0NjAsZVsyOTA4XT03NDYyLGVbMjkwOV09NzQ2MyxlWzI5MTBdPTc0NjQsZVsyOTEyXT03NDY2LGVbMjkxM109NzQ2NyxlWzI5MTRdPTc0NjgsZVsyOTE2XT03NDcwLGVbMjkxN109NzQ3MSxlWzI5MThdPTc0NzIsZVsyOTIwXT03NDc0LGVbMjkyMV09NzQ3NSxlWzI5MjJdPTc0NzYsZVsyOTI0XT03NDc4LGVbMjkyNV09NzQ3OSxlWzI5MjZdPTc0ODAsZVsyOTI4XT03NDgyLGVbMjkyOV09NzQ4MyxlWzI5MzBdPTc0ODQsZVsyOTMyXT03NDg2LGVbMjkzM109NzQ4NyxlWzI5MzRdPTc0ODgsZVsyOTM2XT03NDkwLGVbMjkzN109NzQ5MSxlWzI5MzhdPTc0OTIsZVsyOTQwXT03NDk0LGVbMjk0MV09NzQ5NSxlWzI5NDJdPTc0OTYsZVsyOTQ0XT03NDk4LGVbMjk0Nl09NzUwMCxlWzI5NDhdPTc1MDIsZVsyOTUwXT03NTA0LGVbMjk1MV09NzUwNSxlWzI5NTJdPTc1MDYsZVsyOTU0XT03NTA4LGVbMjk1NV09NzUwOSxlWzI5NTZdPTc1MTAsZVsyOTU4XT03NTEyLGVbMjk1OV09NzUxMyxlWzI5NjBdPTc1MTQsZVsyOTYyXT03NTE2LGVbMjk2M109NzUxNyxlWzI5NjRdPTc1MTgsZVsyOTY2XT03NTIwLGVbMjk2N109NzUyMSxlWzI5NjhdPTc1MjIsZVsyOTcwXT03NTI0LGVbMjk3MV09NzUyNSxlWzI5NzJdPTc1MjYsZVsyOTc0XT03NTI4LGVbMjk3NV09NzUyOSxlWzI5NzZdPTc1MzAsZVsyOTc4XT0xNTM3LGVbMjk3OV09MTUzOCxlWzI5ODBdPTE1MzksZVsyOTgyXT0xNTQ5LGVbMjk4M109MTU1MSxlWzI5ODRdPTE1NTIsZVsyOTg2XT0xNTU0LGVbMjk4N109MTU1NSxlWzI5ODhdPTE1NTYsZVsyOTkwXT0xNjIzLGVbMjk5MV09MTYyNCxlWzI5OTVdPTE3NzUsZVsyOTk5XT0xNzkxLGVbMzAwMl09NjQyOTAsZVszMDAzXT02NDI5MSxlWzMwMDRdPTY0MjkyLGVbMzAwNl09NjQyOTQsZVszMDA3XT02NDI5NSxlWzMwMDhdPTY0Mjk2LGVbMzAxMV09MTkwMCxlWzMwMTRdPTgyMjMsZVszMDE1XT04MjQ0LGVbMzAxN109NzUzMixlWzMwMThdPTc1MzMsZVszMDE5XT03NTM0LGVbMzA3NV09NzU5MCxlWzMwNzZdPTc1OTEsZVszMDc5XT03NTk0LGVbMzA4MF09NzU5NSxlWzMwODNdPTc1OTgsZVszMDg0XT03NTk5LGVbMzA4N109NzYwMixlWzMwODhdPTc2MDMsZVszMDkxXT03NjA2LGVbMzA5Ml09NzYwNyxlWzMwOTVdPTc2MTAsZVszMDk2XT03NjExLGVbMzA5OV09NzYxNCxlWzMxMDBdPTc2MTUsZVszMTAzXT03NjE4LGVbMzEwNF09NzYxOSxlWzMxMDddPTgzMzcsZVszMTA4XT04MzM4LGVbMzExNl09MTg4NCxlWzMxMTldPTE4ODUsZVszMTIwXT0xODg1LGVbMzEyM109MTg4NixlWzMxMjRdPTE4ODYsZVszMTI3XT0xODg3LGVbMzEyOF09MTg4NyxlWzMxMzFdPTE4ODgsZVszMTMyXT0xODg4LGVbMzEzNV09MTg4OSxlWzMxMzZdPTE4ODksZVszMTM5XT0xODkwLGVbMzE0MF09MTg5MCxlWzMxNDNdPTE4OTEsZVszMTQ0XT0xODkxLGVbMzE0N109MTg5MixlWzMxNDhdPTE4OTIsZVszMTUzXT01ODAsZVszMTU0XT01ODEsZVszMTU3XT01ODQsZVszMTU4XT01ODUsZVszMTYxXT01ODgsZVszMTYyXT01ODksZVszMTY1XT04OTEsZVszMTY2XT04OTIsZVszMTY5XT0xMjc0LGVbMzE3MF09MTI3NSxlWzMxNzNdPTEyNzgsZVszMTc0XT0xMjc5LGVbMzE4MV09NzYyMixlWzMxODJdPTc2MjMsZVszMjgyXT0xMTc5OSxlWzMzMTZdPTU3OCxlWzMzNzldPTQyNzg1LGVbMzM5M109MTE1OSxlWzM0MTZdPTgzNzd9KSk7dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9bDt2YXIgZj0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjIsZVsyNjRdPTI2MSxlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPWY7dmFyIGg9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzFdPTMyLGVbNF09NjUsZVs1XT0xOTIsZVs2XT0xOTMsZVs5XT0xOTYsZVsxN109NjYsZVsxOF09NjcsZVsyMV09MjY4LGVbMjRdPTY4LGVbMjhdPTY5LGVbMjldPTIwMCxlWzMwXT0yMDEsZVszMl09MjgyLGVbMzhdPTcwLGVbMzldPTcxLGVbNDRdPTcyLGVbNDddPTczLGVbNDhdPTIwNCxlWzQ5XT0yMDUsZVs1OF09NzQsZVs2MF09NzUsZVs2Ml09NzYsZVs2OF09NzcsZVs2OV09NzgsZVs3NV09NzksZVs3Nl09MjEwLGVbODBdPTIxNCxlWzg3XT04MCxlWzg5XT04MSxlWzkwXT04MixlWzkyXT0zNDQsZVs5NF09ODMsZVs5N109MzUyLGVbMTAwXT04NCxlWzEwNF09ODUsZVsxMDldPTIyMCxlWzExNV09ODYsZVsxMTZdPTg3LGVbMTIxXT04OCxlWzEyMl09ODksZVsxMjRdPTIyMSxlWzEyN109OTAsZVsxMjldPTM4MSxlWzI1OF09OTcsZVsyNTldPTIyNCxlWzI2MF09MjI1LGVbMjYzXT0yMjgsZVsyNjhdPTI2MSxlWzI3MV09OTgsZVsyNzJdPTk5LGVbMjczXT0yNjMsZVsyNzVdPTI2OSxlWzI4Ml09MTAwLGVbMjg2XT0xMDEsZVsyODddPTIzMixlWzI4OF09MjMzLGVbMjkwXT0yODMsZVsyOTVdPTI4MSxlWzI5Nl09MTAyLGVbMzM2XT0xMDMsZVszNDZdPTEwNCxlWzM0OV09MTA1LGVbMzUwXT0yMzYsZVszNTFdPTIzNyxlWzM2MV09MTA2LGVbMzY0XT0xMDcsZVszNjddPTEwOCxlWzM3MV09MzIyLGVbMzczXT0xMDksZVszNzRdPTExMCxlWzM4MV09MTExLGVbMzgyXT0yNDIsZVszODNdPTI0MyxlWzM4Nl09MjQ2LGVbMzkzXT0xMTIsZVszOTVdPTExMyxlWzM5Nl09MTE0LGVbMzk4XT0zNDUsZVs0MDBdPTExNSxlWzQwMV09MzQ3LGVbNDAzXT0zNTMsZVs0MTBdPTExNixlWzQzN109MTE3LGVbNDQyXT0yNTIsZVs0NDhdPTExOCxlWzQ0OV09MTE5LGVbNDU0XT0xMjAsZVs0NTVdPTEyMSxlWzQ1N109MjUzLGVbNDYwXT0xMjIsZVs0NjJdPTM4MixlWzQ2M109MzgwLGVbODUzXT00NCxlWzg1NV09NTgsZVs4NTZdPTQ2LGVbODc2XT00NyxlWzg3OF09NDUsZVs4ODJdPTQ1LGVbODk0XT00MCxlWzg5NV09NDEsZVs4OTZdPTkxLGVbODk3XT05MyxlWzkyM109NjQsZVsxMDA0XT00OCxlWzEwMDVdPTQ5LGVbMTAwNl09NTAsZVsxMDA3XT01MSxlWzEwMDhdPTUyLGVbMTAwOV09NTMsZVsxMDEwXT01NCxlWzEwMTFdPTU1LGVbMTAxMl09NTYsZVsxMDEzXT01NyxlWzEwODFdPTM3LGVbMTA4NV09NDMsZVsxMDg2XT00NX0pKTt0LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9Vbmljb2RlTWFwPXQuSWRlbnRpdHlUb1VuaWNvZGVNYXA9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtpKHRoaXMsZSksdGhpcy5fbWFwPXR9cmV0dXJuIHMoZSxbe2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcFtlXX19LHtrZXk6ImNoYXJDb2RlT2YiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfX0se2tleToiYW1lbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX1dKSxlfSgpO3QuVG9Vbmljb2RlTWFwPWM7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aSh0aGlzLGUpLHRoaXMuZmlyc3RDaGFyPXQsdGhpcy5sYXN0Q2hhcj1yfXJldHVybiBzKGUsW3trZXk6Imxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmZpcnN0Q2hhcixyPXRoaXMubGFzdENoYXI7dDw9cjt0KyspZSh0LHQpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9fSx7a2V5OiJhbWVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fV0pLGV9KCk7dC5JZGVudGl0eVRvVW5pY29kZU1hcD11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0ZGRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigxNjcpLGk9cigyKTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnByb3BlcnRpZXM9cjt2YXIgbz1uZXcgbi5DRkZQYXJzZXIodCxyLGEuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1vLnBhcnNlKCksdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO3ZhciBzPW5ldyBuLkNGRkNvbXBpbGVyKHRoaXMuY2ZmKTt0aGlzLnNlYWNzPXRoaXMuY2ZmLnNlYWNzO3RyeXt0aGlzLmRhdGE9cy5jb21waWxlKCl9Y2F0Y2goZSl7KDAsaS53YXJuKSgiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCAiK3IubG9hZGVkTmFtZSksdGhpcy5kYXRhPXR9dGhpcy5fY3JlYXRlQnVpbHRJbkVuY29kaW5nKCl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJudW1HbHlwaHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNmZi5jaGFyU3RyaW5ncy5jb3VudH19LHtrZXk6ImdldENoYXJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJzZXQuY2hhcnNldH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jZmYsbj10aGlzLnByb3BlcnRpZXMsaT1uLmNpZFRvR2lkTWFwLG89bi5jTWFwLHM9ci5jaGFyc2V0LmNoYXJzZXQ7aWYobi5jb21wb3NpdGUpe3ZhciBjLHU7aWYoaSYmaS5sZW5ndGg+MCl7Yz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbD0wLGY9aS5sZW5ndGg7bDxmO2wrKyl7dmFyIGg9aVtsXTt2b2lkIDAhPT1oJiYoY1toXT1sKX19aWYoZT1PYmplY3QuY3JlYXRlKG51bGwpLHIuaXNDSURGb250KWZvcih0PTA7dDxzLmxlbmd0aDt0Kyspe3ZhciBkPXNbdF07dT1vLmNoYXJDb2RlT2YoZCksYyYmdm9pZCAwIT09Y1t1XSYmKHU9Y1t1XSksZVt1XT10fWVsc2UgZm9yKHQ9MDt0PHIuY2hhclN0cmluZ3MuY291bnQ7dCsrKWVbdT1vLmNoYXJDb2RlT2YodCldPXQ7cmV0dXJuIGV9dmFyIHA9ci5lbmNvZGluZz9yLmVuY29kaW5nLmVuY29kaW5nOm51bGw7cmV0dXJuIG4uaXNJbnRlcm5hbEZvbnQmJihwPW4uZGVmYXVsdEVuY29kaW5nKSwoMCxhLnR5cGUxRm9udEdseXBoTWFwcGluZykobixwLHMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9fSx7a2V5OiJfY3JlYXRlQnVpbHRJbkVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2ZmLHQ9ZS5jaGFyc2V0LHI9ZS5lbmNvZGluZztpZih0JiZyKXt2YXIgbj10LmNoYXJzZXQsYT1yLmVuY29kaW5nLGk9W107Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107aWYocz49MCl7dmFyIGM9bltzXTtjJiYoaVtvXT1jKX19aS5sZW5ndGg+MCYmKHRoaXMucHJvcGVydGllcy5idWlsdEluRW5jb2Rpbmc9aSl9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0ZGRm9udD1jfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY0KSxpPXIoMTY4KSxvPXIoMTY2KSxzPXIoMTM5KTtmdW5jdGlvbiBjKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1mKGUpO2lmKHQpe3ZhciBhPWYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sZihlKX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxoKGUpfWZ1bmN0aW9uIGQoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWgoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1oKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscil7cmV0dXJuIHQmJnAoZS5wcm90b3R5cGUsdCksciYmcChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNik+PjE2fWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gbShlLHQpLzE2Mzg0fWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZS5sZW5ndGgscj0zMjc2ODtyZXR1cm4gdDwxMjQwP3I9MTA3OnQ8MzM5MDAmJihyPTExMzEpLHJ9ZnVuY3Rpb24gUyhlLHQscil7dmFyIGEsaSxvLHM9MT09PXkoZSx0KzIpP3YoZSx0KzgpOnYoZSx0KzE2KSxjPXkoZSx0K3MpO2lmKDQ9PT1jKXt5KGUsdCtzKzIpO3ZhciB1PXkoZSx0K3MrNik+PjE7Zm9yKGk9dCtzKzE0LGE9W10sbz0wO288dTtvKyssaSs9MilhW29dPXtlbmQ6eShlLGkpfTtmb3IoaSs9MixvPTA7bzx1O28rKyxpKz0yKWFbb10uc3RhcnQ9eShlLGkpO2ZvcihvPTA7bzx1O28rKyxpKz0yKWFbb10uaWREZWx0YT15KGUsaSk7Zm9yKG89MDtvPHU7bysrLGkrPTIpe3ZhciBsPXkoZSxpKTtpZigwIT09bCl7YVtvXS5pZHM9W107Zm9yKHZhciBmPTAsaD1hW29dLmVuZC1hW29dLnN0YXJ0KzE7ZjxoO2YrKylhW29dLmlkc1tmXT15KGUsaStsKSxsKz0yfX1yZXR1cm4gYX1pZigxMj09PWMpe3ZhciBkPXYoZSx0K3MrMTIpO2ZvcihpPXQrcysxNixhPVtdLG89MDtvPGQ7bysrKXQ9dihlLGkpLGEucHVzaCh7c3RhcnQ6dCxlbmQ6dihlLGkrNCksaWREZWx0YTp2KGUsaSs4KS10fSksaSs9MTI7cmV0dXJuIGF9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuc3VwcG9ydGVkIGNtYXA6ICIuY29uY2F0KGMpKX1mdW5jdGlvbiB4KGUsdCxyLG4pe3ZhciBpPW5ldyBhLkNGRlBhcnNlcihuZXcgcy5TdHJlYW0oZSx0LHItdCkse30sbikucGFyc2UoKTtyZXR1cm57Z2x5cGhzOmkuY2hhclN0cmluZ3Mub2JqZWN0cyxzdWJyczppLnRvcERpY3QucHJpdmF0ZURpY3QmJmkudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4JiZpLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzLGdzdWJyczppLmdsb2JhbFN1YnJJbmRleCYmaS5nbG9iYWxTdWJySW5kZXgub2JqZWN0cyxpc0NGRkNJREZvbnQ6aS5pc0NJREZvbnQsZmRTZWxlY3Q6aS5mZFNlbGVjdCxmZEFycmF5OmkuZmRBcnJheX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgcj10LmNvZGVQb2ludEF0KDApLG49MCxhPTAsaT1lLmxlbmd0aC0xO2E8aTspe3ZhciBvPWEraSsxPj4xO3I8ZVtvXS5zdGFydD9pPW8tMTphPW99cmV0dXJuIGVbYV0uc3RhcnQ8PXImJnI8PWVbYV0uZW5kJiYobj1lW2FdLmlkRGVsdGErKGVbYV0uaWRzP2VbYV0uaWRzW3ItZVthXS5zdGFydF06cikmNjU1MzUpLHtjaGFyQ29kZTpyLGdseXBoSWQ6bn19ZnVuY3Rpb24gQShlLHQscil7ZnVuY3Rpb24gbihlLHIpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBhKGUscil7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxyXX0pfWZ1bmN0aW9uIGkoZSxyLG4sYSl7dC5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UscixuLGFdfSl9dmFyIG8scz0wLGM9bShlLHMpLHU9MCxsPTA7aWYocys9MTAsYzwwKWRve289eShlLHMpO3ZhciBmPXkoZSxzKzIpO3MrPTQ7dmFyIGg9dm9pZCAwLGQ9dm9pZCAwOzEmbz8oMiZvPyhoPW0oZSxzKSxkPW0oZSxzKzIpKTooaD15KGUscyksZD15KGUscysyKSkscys9NCk6MiZvPyhoPWIoZSxzKyspLGQ9YihlLHMrKykpOihoPWVbcysrXSxkPWVbcysrXSksMiZvPyh1PWgsbD1kKToodT0wLGw9MCk7dmFyIHA9MSxnPTEsdj0wLGs9MDs4Jm8/KHA9Zz13KGUscykscys9Mik6NjQmbz8ocD13KGUscyksZz13KGUscysyKSxzKz00KToxMjgmbyYmKHA9dyhlLHMpLHY9dyhlLHMrMiksaz13KGUscys0KSxnPXcoZSxzKzYpLHMrPTgpO3ZhciBTPXIuZ2x5cGhzW2ZdO1MmJih0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbcCx2LGssZyx1LGxdfSksQShTLHQsciksdC5wdXNoKHtjbWQ6InJlc3RvcmUifSkpfXdoaWxlKDMyJm8pO2Vsc2V7dmFyIHgsTyxDPVtdO2Zvcih4PTA7eDxjO3grKylDLnB1c2goeShlLHMpKSxzKz0yO3MrPTIreShlLHMpO2Zvcih2YXIgRj1DLmF0KC0xKSsxLFA9W107UC5sZW5ndGg8Rjspe3ZhciBUPTE7Zm9yKDgmKG89ZVtzKytdKSYmKFQrPWVbcysrXSk7VC0tID4wOylQLnB1c2goe2ZsYWdzOm99KX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgxOCZQW3hdLmZsYWdzKXtjYXNlIDA6dSs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSAyOnUtPWVbcysrXTticmVhaztjYXNlIDE4OnUrPWVbcysrXX1QW3hdLng9dX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgzNiZQW3hdLmZsYWdzKXtjYXNlIDA6bCs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSA0OmwtPWVbcysrXTticmVhaztjYXNlIDM2OmwrPWVbcysrXX1QW3hdLnk9bH12YXIgST0wO2ZvcihzPTA7czxjO3MrKyl7dmFyIEU9Q1tzXSxqPVAuc2xpY2UoSSxFKzEpO2lmKDEmalswXS5mbGFncylqLnB1c2goalswXSk7ZWxzZSBpZigxJmouYXQoLTEpLmZsYWdzKWoudW5zaGlmdChqLmF0KC0xKSk7ZWxzZXt2YXIgTT17ZmxhZ3M6MSx4OihqWzBdLngrai5hdCgtMSkueCkvMix5OihqWzBdLnkrai5hdCgtMSkueSkvMn07ai51bnNoaWZ0KE0pLGoucHVzaChNKX1mb3IobihqWzBdLngsalswXS55KSx4PTEsTz1qLmxlbmd0aDt4PE87eCsrKTEmalt4XS5mbGFncz9hKGpbeF0ueCxqW3hdLnkpOjEmalt4KzFdLmZsYWdzPyhpKGpbeF0ueCxqW3hdLnksalt4KzFdLngsalt4KzFdLnkpLHgrKyk6aShqW3hdLngsalt4XS55LChqW3hdLngralt4KzFdLngpLzIsKGpbeF0ueStqW3grMV0ueSkvMik7ST1FKzF9fX1mdW5jdGlvbiBDKGUsdCxyLGEpe2Z1bmN0aW9uIGkoZSxyKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLHJdfSl9ZnVuY3Rpb24gcyhlLHIpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBjKGUscixuLGEsaSxvKXt0LnB1c2goe2NtZDoiYmV6aWVyQ3VydmVUbyIsYXJnczpbZSxyLG4sYSxpLG9dfSl9dmFyIHU9W10sbD0wLGY9MCxoPTA7IWZ1bmN0aW9uIGUoZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDspe3ZhciBnPSExLHY9ZFtwKytdLHk9dm9pZCAwLG09dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLFM9dm9pZCAwLHg9dm9pZCAwLEE9dm9pZCAwLEY9dm9pZCAwO3N3aXRjaCh2KXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpoKz11Lmxlbmd0aD4+MSxnPSEwO2JyZWFrO2Nhc2UgNDpmKz11LnBvcCgpLGkobCxmKSxnPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO3UubGVuZ3RoPjA7KWwrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNjpmb3IoO3UubGVuZ3RoPjAmJihzKGwrPXUuc2hpZnQoKSxmKSwwIT09dS5sZW5ndGgpOylmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNzpmb3IoO3UubGVuZ3RoPjAmJihmKz11LnNoaWZ0KCkscyhsLGYpLDAhPT11Lmxlbmd0aCk7KXMobCs9dS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgODpmb3IoO3UubGVuZ3RoPjA7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2Nhc2UgMTA6aWYoQT11LnBvcCgpLEY9bnVsbCxyLmlzQ0ZGQ0lERm9udCl7dmFyIFA9ci5mZFNlbGVjdC5nZXRGREluZGV4KGEpO2lmKFA+PTAmJlA8ci5mZEFycmF5Lmxlbmd0aCl7dmFyIFQ9ci5mZEFycmF5W1BdLEk9dm9pZCAwO1QucHJpdmF0ZURpY3QmJlQucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmKEk9VC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpLEkmJihGPUlbQSs9ayhJKV0pfWVsc2UoMCxuLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKX1lbHNlIEY9ci5zdWJyc1tBK3Iuc3VicnNCaWFzXTtGJiZlKEYpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKHY9ZFtwKytdKXtjYXNlIDM0Om09KHk9bCt1LnNoaWZ0KCkpK3Uuc2hpZnQoKSxTPWYrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LGYsbSxTLGwsUyksbT0oeT1sK3Uuc2hpZnQoKSkrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LFMsbSxmLGwsZik7YnJlYWs7Y2FzZSAzNTp5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx1LnBvcCgpO2JyZWFrO2Nhc2UgMzY6Yyh5PWwrdS5zaGlmdCgpLFM9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx4PVMrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCkseCksYyh5PWwrdS5zaGlmdCgpLHgsbT15K3Uuc2hpZnQoKSx4K3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgMzc6dmFyIEU9bCxqPWY7eT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZikseT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0sZj13LE1hdGguYWJzKGwtRSk+TWF0aC5hYnMoZi1qKT9sKz11LnNoaWZ0KCk6Zis9dS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gb3BlcmF0b3I6IDEyICIuY29uY2F0KHYpKX1icmVhaztjYXNlIDE0OmlmKHUubGVuZ3RoPj00KXt2YXIgTT11LnBvcCgpLF89dS5wb3AoKTtmPXUucG9wKCksbD11LnBvcCgpLHQucHVzaCh7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNsYXRlIixhcmdzOltsLGZdfSk7dmFyIEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbTV1dKSk7QyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpLHQucHVzaCh7Y21kOiJyZXN0b3JlIn0pLEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbX11dKSksQyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6cCs9KGgrPXUubGVuZ3RoPj4xKSs3Pj4zLGc9ITA7YnJlYWs7Y2FzZSAyMTpmKz11LnBvcCgpLGkobCs9dS5wb3AoKSxmKSxnPSEwO2JyZWFrO2Nhc2UgMjI6aShsKz11LnBvcCgpLGYpLGc9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO3UubGVuZ3RoPjI7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2wrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgMjU6Zm9yKDt1Lmxlbmd0aD42OylsKz11LnNoaWZ0KCksZis9dS5zaGlmdCgpLHMobCxmKTt5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKTticmVhaztjYXNlIDI2OmZvcih1Lmxlbmd0aCUyJiYobCs9dS5zaGlmdCgpKTt1Lmxlbmd0aD4wOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZik7YnJlYWs7Y2FzZSAyNzpmb3IodS5sZW5ndGglMiYmKGYrPXUuc2hpZnQoKSk7dS5sZW5ndGg+MDspYyh5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcpO2JyZWFrO2Nhc2UgMjg6dS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2KT4+MTYpLHArPTI7YnJlYWs7Y2FzZSAyOTpBPXUucG9wKCkrci5nc3VicnNCaWFzLChGPXIuZ3N1YnJzW0FdKSYmZShGKTticmVhaztjYXNlIDMwOmZvcig7dS5sZW5ndGg+MCYmKHk9bCxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dysoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxjKHksYixtLHcsbCxmKSwwIT09dS5sZW5ndGgpOyl5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbD1tKygxPT09dS5sZW5ndGg/dS5zaGlmdCgpOjApLGYpO2JyZWFrO2Nhc2UgMzE6Zm9yKDt1Lmxlbmd0aD4wJiYoeT1sK3Uuc2hpZnQoKSxiPWYsbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGw9bSsoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxmKSwwIT09dS5sZW5ndGgpOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrKDE9PT11Lmxlbmd0aD91LnNoaWZ0KCk6MCksYyh5LGIsbSx3LGwsZik7YnJlYWs7ZGVmYXVsdDppZih2PDMyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIG9wZXJhdG9yOiAiLmNvbmNhdCh2KSk7djwyNDc/dS5wdXNoKHYtMTM5KTp2PDI1MT91LnB1c2goMjU2Kih2LTI0NykrZFtwKytdKzEwOCk6djwyNTU/dS5wdXNoKDI1NiotKHYtMjUxKS1kW3ArK10tMTA4KToodS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2fGRbcCsyXTw8OHxkW3ArM10pLzY1NTM2KSxwKz00KX1nJiYodS5sZW5ndGg9MCl9fShlKX12YXIgRj1bXSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtkKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb21waWxlZEZvbnQuIiksdGhpcy5mb250TWF0cml4PXQsdGhpcy5jb21waWxlZEdseXBocz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBnKGUsW3trZXk6ImdldFBhdGhKcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkLGE9dGhpcy5jb21waWxlZEdseXBoc1tuXTtpZighYSl0cnl7YT10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tuXSxuKSx0aGlzLmNvbXBpbGVkR2x5cGhzW25dPWF9Y2F0Y2goZSl7dGhyb3cgdGhpcy5jb21waWxlZEdseXBoc1tuXT1GLHZvaWQgMD09PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXSYmKHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXT1uKSxlfXJldHVybiB2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl09biksYX19LHtrZXk6ImNvbXBpbGVHbHlwaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighZXx8MD09PWUubGVuZ3RofHwxND09PWVbMF0pcmV0dXJuIEY7dmFyIHI9dGhpcy5mb250TWF0cml4O2lmKHRoaXMuaXNDRkZDSURGb250KXt2YXIgYT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7YT49MCYmYTx0aGlzLmZkQXJyYXkubGVuZ3RoP3I9dGhpcy5mZEFycmF5W2FdLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpfHxuLkZPTlRfSURFTlRJVFlfTUFUUklYOigwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfXZhciBpPVt7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNmb3JtIixhcmdzOnIuc2xpY2UoKX0se2NtZDoic2NhbGUiLGFyZ3M6WyJzaXplIiwiLXNpemUiXX1dO3JldHVybiB0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxpLHQpLGkucHVzaCh7Y21kOiJyZXN0b3JlIn0pLGl9fSx7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKX19LHtrZXk6Imhhc0J1aWx0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkO3JldHVybiB2b2lkIDAhPT10aGlzLmNvbXBpbGVkR2x5cGhzW25dJiZ2b2lkIDAhPT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl19fV0pLGV9KCksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gZCh0aGlzLHIpLChpPXQuY2FsbCh0aGlzLGF8fFs0ODhlLTYsMCwwLDQ4OGUtNiwwLDBdKSkuZ2x5cGhzPWUsaS5jbWFwPW4saX1yZXR1cm4gZyhyLFt7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbihlLHQpe0EoZSx0LHRoaXMpfX1dKSxyfShQKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsbyl7dmFyIHM7cmV0dXJuIGQodGhpcyxyKSwocz10LmNhbGwodGhpcyxhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKSkuZ2x5cGhzPWUuZ2x5cGhzLHMuZ3N1YnJzPWUuZ3N1YnJzfHxbXSxzLnN1YnJzPWUuc3VicnN8fFtdLHMuY21hcD1uLHMuZ2x5cGhOYW1lTWFwPW98fCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSxzLmdzdWJyc0JpYXM9ayhzLmdzdWJycykscy5zdWJyc0JpYXM9ayhzLnN1YnJzKSxzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udCxzLmZkU2VsZWN0PWUuZmRTZWxlY3Qscy5mZEFycmF5PWUuZmRBcnJheSxzfXJldHVybiBnKHIsW3trZXk6ImNvbXBpbGVHbHlwaEltcGwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtDKGUsdCx0aGlzLHIpfX1dKSxyfShQKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2QodGhpcyxlKX1yZXR1cm4gZyhlLG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYSxpLG8scyxjLHU9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSxsPXkodSw0KSxmPTAsaD0xMjtmPGw7ZisrLGgrPTE2KXt2YXIgZD0oMCxuLmJ5dGVzVG9TdHJpbmcpKHUuc3ViYXJyYXkoaCxoKzQpKSxwPXYodSxoKzgpLGc9dih1LGgrMTIpO3N3aXRjaChkKXtjYXNlImNtYXAiOnI9Uyh1LHApO2JyZWFrO2Nhc2UiZ2x5ZiI6YT11LnN1YmFycmF5KHAscCtnKTticmVhaztjYXNlImxvY2EiOmk9dS5zdWJhcnJheShwLHArZyk7YnJlYWs7Y2FzZSJoZWFkIjpjPXkodSxwKzE4KSxzPXkodSxwKzUwKTticmVhaztjYXNlIkNGRiAiOm89eCh1LHAscCtnLHQpfX1pZihhKXt2YXIgbT1jP1sxL2MsMCwwLDEvYywwLDBdOmUuZm9udE1hdHJpeDtyZXR1cm4gbmV3IFQoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7cj8obj00LGE9dik6KG49MixhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDIqeShlLHQpfSk7Zm9yKHZhciBpPVtdLG89YSh0LDApLHM9bjtzPHQubGVuZ3RoO3MrPW4pe3ZhciBjPWEodCxzKTtpLnB1c2goZS5zdWJhcnJheShvLGMpKSxvPWN9cmV0dXJuIGl9KGEsaSxzKSxyLG0pfXJldHVybiBuZXcgSShvLHIsZS5mb250TWF0cml4LGUuZ2x5cGhOYW1lTWFwKX19XSksZX0oKTt0LkZvbnRSZW5kZXJlckZhY3Rvcnk9RX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1ldHJpY3M9dC5nZXRGb250QmFzaWNNZXRyaWNzPXZvaWQgMDt2YXIgbj1yKDEzNSksYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDAsZVsiQ291cmllci1Cb2xkIl09NjAwLGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDAsZVsiQ291cmllci1PYmxpcXVlIl09NjAwLGUuSGVsdmV0aWNhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09Mjc4LGUucXVvdGVkYmw9MzU1LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NjY3LGUucXVvdGVyaWdodD0yMjIsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTU1NixlLmF0PTEwMTUsZS5BPTY2NyxlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTUwMCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9Mjc4LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0yNzgsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yMjIsZS5hPTU1NixlLmI9NTU2LGUuYz01MDAsZS5kPTU1NixlLmU9NTU2LGUuZj0yNzgsZS5nPTU1NixlLmg9NTU2LGUuaT0yMjIsZS5qPTIyMixlLms9NTAwLGUubD0yMjIsZS5tPTgzMyxlLm49NTU2LGUubz01NTYsZS5wPTU1NixlLnE9NTU2LGUucj0zMzMsZS5zPTUwMCxlLnQ9Mjc4LGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NTAwLGUuYnJhY2VsZWZ0PTMzNCxlLmJhcj0yNjAsZS5icmFjZXJpZ2h0PTMzNCxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0xOTEsZS5xdW90ZWRibGxlZnQ9MzMzLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01MzcsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MjIyLGUucXVvdGVkYmxiYXNlPTMzMyxlLnF1b3RlZGJscmlnaHQ9MzMzLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTU1NixlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTIyMixlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTUwMCxlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTUwMCxlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9MjIyLGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTUwMCxlLnNjZWRpbGxhPTUwMCxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NTAwLGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTY0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTAwLGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI2MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01NTYsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTIyMixlLnRjYXJvbj0zMTcsZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9MjIyLGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01NTYsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01MDAsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01NTYsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj0yOTksZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj01NTYsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01NTYsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NTU2LGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01NTYsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTU1NixlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NTU2LGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01NTYsZS5ldGg9NTU2LGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00NzQsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD03MjIsZS5xdW90ZXJpZ2h0PTI3OCxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NjExLGUuYXQ9OTc1LGUuQT03MjIsZS5CPTcyMixlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01NTYsZS5LPTcyMixlLkw9NjExLGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTg0LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9Mjc4LGUuYT01NTYsZS5iPTYxMSxlLmM9NTU2LGUuZD02MTEsZS5lPTU1NixlLmY9MzMzLGUuZz02MTEsZS5oPTYxMSxlLmk9Mjc4LGUuaj0yNzgsZS5rPTU1NixlLmw9Mjc4LGUubT04ODksZS5uPTYxMSxlLm89NjExLGUucD02MTEsZS5xPTYxMSxlLnI9Mzg5LGUucz01NTYsZS50PTMzMyxlLnU9NjExLGUudj01NTYsZS53PTc3OCxlLng9NTU2LGUueT01NTYsZS56PTUwMCxlLmJyYWNlbGVmdD0zODksZS5iYXI9MjgwLGUuYnJhY2VyaWdodD0zODksZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MjM4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT02MTEsZS5mbD02MTEsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTU2LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTI3OCxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD02MTEsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTYxMSxlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTU1NixlLnNjb21tYWFjY2VudD01NTYsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz02MTEsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01NTYsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01NTYsZS5zY2VkaWxsYT01NTYsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTYxMSxlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NzIyLGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTU1NixlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj03NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTYxMSxlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTYxMSxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTU2LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTU1NixlLm5hY3V0ZT02MTEsZS51bWFjcm9uPTYxMSxlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yODAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NjExLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249Mzg5LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NjExLGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTU2LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj02MTEsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NjExLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NjExLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NjExLGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249NDAwLGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NjExLGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NjExLGUubnRpbGRlPTYxMSxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTYxMSxlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NjExLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT02MTEsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT02MTEsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NjExLGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTYxMSxlLnVkaWVyZXNpcz02MTEsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NjExLGUuZXRoPTYxMSxlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NjExLGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZS5TeW1ib2w9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS51bml2ZXJzYWw9NzEzLGUubnVtYmVyc2lnbj01MDAsZS5leGlzdGVudGlhbD01NDksZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5zdWNodGhhdD00MzksZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlza21hdGg9NTAwLGUucGx1cz01NDksZS5jb21tYT0yNTAsZS5taW51cz01NDksZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01NDksZS5lcXVhbD01NDksZS5ncmVhdGVyPTU0OSxlLnF1ZXN0aW9uPTQ0NCxlLmNvbmdydWVudD01NDksZS5BbHBoYT03MjIsZS5CZXRhPTY2NyxlLkNoaT03MjIsZS5EZWx0YT02MTIsZS5FcHNpbG9uPTYxMSxlLlBoaT03NjMsZS5HYW1tYT02MDMsZS5FdGE9NzIyLGUuSW90YT0zMzMsZS50aGV0YTE9NjMxLGUuS2FwcGE9NzIyLGUuTGFtYmRhPTY4NixlLk11PTg4OSxlLk51PTcyMixlLk9taWNyb249NzIyLGUuUGk9NzY4LGUuVGhldGE9NzQxLGUuUmhvPTU1NixlLlNpZ21hPTU5MixlLlRhdT02MTEsZS5VcHNpbG9uPTY5MCxlLnNpZ21hMT00MzksZS5PbWVnYT03NjgsZS5YaT02NDUsZS5Qc2k9Nzk1LGUuWmV0YT02MTEsZS5icmFja2V0bGVmdD0zMzMsZS50aGVyZWZvcmU9ODYzLGUuYnJhY2tldHJpZ2h0PTMzMyxlLnBlcnBlbmRpY3VsYXI9NjU4LGUudW5kZXJzY29yZT01MDAsZS5yYWRpY2FsZXg9NTAwLGUuYWxwaGE9NjMxLGUuYmV0YT01NDksZS5jaGk9NTQ5LGUuZGVsdGE9NDk0LGUuZXBzaWxvbj00MzksZS5waGk9NTIxLGUuZ2FtbWE9NDExLGUuZXRhPTYwMyxlLmlvdGE9MzI5LGUucGhpMT02MDMsZS5rYXBwYT01NDksZS5sYW1iZGE9NTQ5LGUubXU9NTc2LGUubnU9NTIxLGUub21pY3Jvbj01NDksZS5waT01NDksZS50aGV0YT01MjEsZS5yaG89NTQ5LGUuc2lnbWE9NjAzLGUudGF1PTQzOSxlLnVwc2lsb249NTc2LGUub21lZ2ExPTcxMyxlLm9tZWdhPTY4NixlLnhpPTQ5MyxlLnBzaT02ODYsZS56ZXRhPTQ5NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5zaW1pbGFyPTU0OSxlLkV1cm89NzUwLGUuVXBzaWxvbjE9NjIwLGUubWludXRlPTI0NyxlLmxlc3NlcXVhbD01NDksZS5mcmFjdGlvbj0xNjcsZS5pbmZpbml0eT03MTMsZS5mbG9yaW49NTAwLGUuY2x1Yj03NTMsZS5kaWFtb25kPTc1MyxlLmhlYXJ0PTc1MyxlLnNwYWRlPTc1MyxlLmFycm93Ym90aD0xMDQyLGUuYXJyb3dsZWZ0PTk4NyxlLmFycm93dXA9NjAzLGUuYXJyb3dyaWdodD05ODcsZS5hcnJvd2Rvd249NjAzLGUuZGVncmVlPTQwMCxlLnBsdXNtaW51cz01NDksZS5zZWNvbmQ9NDExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLm11bHRpcGx5PTU0OSxlLnByb3BvcnRpb25hbD03MTMsZS5wYXJ0aWFsZGlmZj00OTQsZS5idWxsZXQ9NDYwLGUuZGl2aWRlPTU0OSxlLm5vdGVxdWFsPTU0OSxlLmVxdWl2YWxlbmNlPTU0OSxlLmFwcHJveGVxdWFsPTU0OSxlLmVsbGlwc2lzPTFlMyxlLmFycm93dmVydGV4PTYwMyxlLmFycm93aG9yaXpleD0xZTMsZS5jYXJyaWFnZXJldHVybj02NTgsZS5hbGVwaD04MjMsZS5JZnJha3R1cj02ODYsZS5SZnJha3R1cj03OTUsZS53ZWllcnN0cmFzcz05ODcsZS5jaXJjbGVtdWx0aXBseT03NjgsZS5jaXJjbGVwbHVzPTc2OCxlLmVtcHR5c2V0PTgyMyxlLmludGVyc2VjdGlvbj03NjgsZS51bmlvbj03NjgsZS5wcm9wZXJzdXBlcnNldD03MTMsZS5yZWZsZXhzdXBlcnNldD03MTMsZS5ub3RzdWJzZXQ9NzEzLGUucHJvcGVyc3Vic2V0PTcxMyxlLnJlZmxleHN1YnNldD03MTMsZS5lbGVtZW50PTcxMyxlLm5vdGVsZW1lbnQ9NzEzLGUuYW5nbGU9NzY4LGUuZ3JhZGllbnQ9NzEzLGUucmVnaXN0ZXJzZXJpZj03OTAsZS5jb3B5cmlnaHRzZXJpZj03OTAsZS50cmFkZW1hcmtzZXJpZj04OTAsZS5wcm9kdWN0PTgyMyxlLnJhZGljYWw9NTQ5LGUuZG90bWF0aD0yNTAsZS5sb2dpY2Fsbm90PTcxMyxlLmxvZ2ljYWxhbmQ9NjAzLGUubG9naWNhbG9yPTYwMyxlLmFycm93ZGJsYm90aD0xMDQyLGUuYXJyb3dkYmxsZWZ0PTk4NyxlLmFycm93ZGJsdXA9NjAzLGUuYXJyb3dkYmxyaWdodD05ODcsZS5hcnJvd2RibGRvd249NjAzLGUubG96ZW5nZT00OTQsZS5hbmdsZWxlZnQ9MzI5LGUucmVnaXN0ZXJzYW5zPTc5MCxlLmNvcHlyaWdodHNhbnM9NzkwLGUudHJhZGVtYXJrc2Fucz03ODYsZS5zdW1tYXRpb249NzEzLGUucGFyZW5sZWZ0dHA9Mzg0LGUucGFyZW5sZWZ0ZXg9Mzg0LGUucGFyZW5sZWZ0YnQ9Mzg0LGUuYnJhY2tldGxlZnR0cD0zODQsZS5icmFja2V0bGVmdGV4PTM4NCxlLmJyYWNrZXRsZWZ0YnQ9Mzg0LGUuYnJhY2VsZWZ0dHA9NDk0LGUuYnJhY2VsZWZ0bWlkPTQ5NCxlLmJyYWNlbGVmdGJ0PTQ5NCxlLmJyYWNlZXg9NDk0LGUuYW5nbGVyaWdodD0zMjksZS5pbnRlZ3JhbD0yNzQsZS5pbnRlZ3JhbHRwPTY4NixlLmludGVncmFsZXg9Njg2LGUuaW50ZWdyYWxidD02ODYsZS5wYXJlbnJpZ2h0dHA9Mzg0LGUucGFyZW5yaWdodGV4PTM4NCxlLnBhcmVucmlnaHRidD0zODQsZS5icmFja2V0cmlnaHR0cD0zODQsZS5icmFja2V0cmlnaHRleD0zODQsZS5icmFja2V0cmlnaHRidD0zODQsZS5icmFjZXJpZ2h0dHA9NDk0LGUuYnJhY2VyaWdodG1pZD00OTQsZS5icmFjZXJpZ2h0YnQ9NDk0LGUuYXBwbGU9NzkwfSkpLGVbIlRpbWVzLVJvbWFuIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00MDgsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTY0LGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU2NCxlLmVxdWFsPTU2NCxlLmdyZWF0ZXI9NTY0LGUucXVlc3Rpb249NDQ0LGUuYXQ9OTIxLGUuQT03MjIsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTYxMSxlLkY9NTU2LGUuRz03MjIsZS5IPTcyMixlLkk9MzMzLGUuSj0zODksZS5LPTcyMixlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD01NTYsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj03MjIsZS5XPTk0NCxlLlg9NzIyLGUuWT03MjIsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT00NDQsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTUwMCxlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTUwMCxlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9MzMzLGUucz0zODksZS50PTI3OCxlLnU9NTAwLGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5hc2NpaXRpbGRlPTU0MSxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9MTgwLGUucXVvdGVkYmxsZWZ0PTQ0NCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NDUzLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT00NDQsZS5xdW90ZWRibHJpZ2h0PTQ0NCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj00NDQsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTg4OSxlLm9yZGZlbWluaW5lPTI3NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9ODg5LGUub3JkbWFzY3VsaW5lPTMxMCxlLmFlPTY2NyxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9MzMzLGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT00NDQsZS51aHVuZ2FydW1sYXV0PTUwMCxlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU2NCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NDQ0LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz00NDQsZS5VYWN1dGU9NzIyLGUudW9nb25laz01MDAsZS5FZGllcmVzaXM9NjExLGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NjAsZS5FbWFjcm9uPTYxMSxlLmNjYXJvbj00NDQsZS5hcmluZz00NDQsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT00NDQsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT00NDQsZS5FZG90YWNjZW50PTYxMSxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTUwMCxlLmFjaXJjdW1mbGV4PTQ0NCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NTU2LGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj01ODgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTUwMCxlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTY0LGUudWFjdXRlPTUwMCxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTYxMSxlLmFkaWVyZXNpcz00NDQsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01MDAsZS51bWFjcm9uPTUwMCxlLk5jYXJvbj03MjIsZS5JYWN1dGU9MzMzLGUucGx1c21pbnVzPTU2NCxlLmJyb2tlbmJhcj0yMDAsZS5yZWdpc3RlcmVkPTc2MCxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTMzMyxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjExLGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzI2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj00NDQsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTAwLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02MTEsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzQ0LGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9OTgwLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9MzMzLGUuSW1hY3Jvbj0zMzMsZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTUwMCxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTYxMSxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01MDAsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02MTEsZS5Jb2dvbmVrPTMzMyxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01NjQsZS5JY2lyY3VtZmxleD0zMzMsZS5uY2Fyb249NTAwLGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTY0LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01MDAsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTAwLGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTFlMyxlLmFtcGVyc2FuZD04MzMsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9OTMwLGUuQT03MjIsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTc3OCxlLkw9NjY3LGUuTT05NDQsZS5OPTcyMixlLk89Nzc4LGUuUD02MTEsZS5RPTc3OCxlLlI9NzIyLGUuUz01NTYsZS5UPTY2NyxlLlU9NzIyLGUuVj03MjIsZS5XPTFlMyxlLlg9NzIyLGUuWT03MjIsZS5aPTY2NyxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTgxLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTU1NixlLmM9NDQ0LGUuZD01NTYsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0zMzMsZS5rPTU1NixlLmw9Mjc4LGUubT04MzMsZS5uPTU1NixlLm89NTAwLGUucD01NTYsZS5xPTU1NixlLnI9NDQ0LGUucz0zODksZS50PTMzMyxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD0zOTQsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zOTQsZS5hc2NpaXRpbGRlPTUyMCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTQwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTMwMCxlLkxzbGFzaD02NjcsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTMzMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01NTYsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjY3LGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTQ0NCxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjY3LGUuVGhvcm49NjExLGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTU1NixlLmRjYXJvbj02NzIsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02NjcsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTQ0NCxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTY2NyxlLlpjYXJvbj02NjcsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249NDE2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249Mzk0LGUuS2NvbW1hYWNjZW50PTc3OCxlLkxhY3V0ZT02NjcsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjY3LGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9NDQ0LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTY2NyxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01NzAsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTcwLGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zODksZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9ODMyLGUuQT02NjcsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTY2NyxlLkY9NjY3LGUuRz03MjIsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTY2NyxlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD02MTEsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTg4OSxlLlg9NjY3LGUuWT02MTEsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTcwLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTU1NixlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9Mzg5LGUucz0zODksZS50PTI3OCxlLnU9NTU2LGUudj00NDQsZS53PTY2NyxlLng9NTAwLGUueT00NDQsZS56PTM4OSxlLmJyYWNlbGVmdD0zNDgsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zNDgsZS5hc2NpaXRpbGRlPTU3MCxlLmV4Y2xhbWRvd249Mzg5LGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTAwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTk0NCxlLm9yZGZlbWluaW5lPTI2NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9OTQ0LGUub3JkbWFzY3VsaW5lPTMwMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NjExLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT02MTEsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTQ0NCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NjY3LGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjExLGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj02MDgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NDQ0LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzY2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT0zODksZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTc2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzgyLGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTM4OSxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz02MDYsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NjA2LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj0zODksZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1JdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQyMCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz02NzUsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9Njc1LGUuZXF1YWw9Njc1LGUuZ3JlYXRlcj02NzUsZS5xdWVzdGlvbj01MDAsZS5hdD05MjAsZS5BPTYxMSxlLkI9NjExLGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj02MTEsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTQ0NCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NjY3LGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02MTEsZS5TPTUwMCxlLlQ9NTU2LGUuVT03MjIsZS5WPTYxMSxlLlc9ODMzLGUuWD02MTEsZS5ZPTU1NixlLlo9NTU2LGUuYnJhY2tldGxlZnQ9Mzg5LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zODksZS5hc2NpaWNpcmN1bT00MjIsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0yNzgsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NDQ0LGUubD0yNzgsZS5tPTcyMixlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTQ0NCxlLnc9NjY3LGUueD00NDQsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTQwMCxlLmJhcj0yNzUsZS5icmFjZXJpZ2h0PTQwMCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yMTQsZS5xdW90ZWRibGxlZnQ9NTU2LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MjMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTU1NixlLnF1b3RlZGJscmlnaHQ9NTU2LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9ODg5LGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9ODg5LGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTU1NixlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT02NjcsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz01NTYsZS5kaXZpZGU9Njc1LGUuWWFjdXRlPTU1NixlLkFjaXJjdW1mbGV4PTYxMSxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD02NjcsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD01NTYsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02MTEsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02MTEsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD01NTYsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02MTEsZS5TYWN1dGU9NTAwLGUuZGNhcm9uPTU0NCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTYxMSxlLkFicmV2ZT02MTEsZS5tdWx0aXBseT02NzUsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTU1NixlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NjY3LGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTY2NyxlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9Njc1LGUuYnJva2VuYmFyPTI3NSxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NTU2LGUuWmNhcm9uPTU1NixlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMDAsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTYxMSxlLkFkaWVyZXNpcz02MTEsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTUwMCxlLmxjYXJvbj0zMDAsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTAwLGUuU2NvbW1hYWNjZW50PTUwMCxlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NjY3LGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02MTEsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTYxMSxlLkFvZ29uZWs9NjExLGUuQXJpbmc9NjExLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTQ0NCxlLm1pbnVzPTY3NSxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02NzUsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGUuWmFwZkRpbmdiYXRzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5hMT05NzQsZS5hMj05NjEsZS5hMjAyPTk3NCxlLmEzPTk4MCxlLmE0PTcxOSxlLmE1PTc4OSxlLmExMTk9NzkwLGUuYTExOD03OTEsZS5hMTE3PTY5MCxlLmExMT05NjAsZS5hMTI9OTM5LGUuYTEzPTU0OSxlLmExND04NTUsZS5hMTU9OTExLGUuYTE2PTkzMyxlLmExMDU9OTExLGUuYTE3PTk0NSxlLmExOD05NzQsZS5hMTk9NzU1LGUuYTIwPTg0NixlLmEyMT03NjIsZS5hMjI9NzYxLGUuYTIzPTU3MSxlLmEyND02NzcsZS5hMjU9NzYzLGUuYTI2PTc2MCxlLmEyNz03NTksZS5hMjg9NzU0LGUuYTY9NDk0LGUuYTc9NTUyLGUuYTg9NTM3LGUuYTk9NTc3LGUuYTEwPTY5MixlLmEyOT03ODYsZS5hMzA9Nzg4LGUuYTMxPTc4OCxlLmEzMj03OTAsZS5hMzM9NzkzLGUuYTM0PTc5NCxlLmEzNT04MTYsZS5hMzY9ODIzLGUuYTM3PTc4OSxlLmEzOD04NDEsZS5hMzk9ODIzLGUuYTQwPTgzMyxlLmE0MT04MTYsZS5hNDI9ODMxLGUuYTQzPTkyMyxlLmE0ND03NDQsZS5hNDU9NzIzLGUuYTQ2PTc0OSxlLmE0Nz03OTAsZS5hNDg9NzkyLGUuYTQ5PTY5NSxlLmE1MD03NzYsZS5hNTE9NzY4LGUuYTUyPTc5MixlLmE1Mz03NTksZS5hNTQ9NzA3LGUuYTU1PTcwOCxlLmE1Nj02ODIsZS5hNTc9NzAxLGUuYTU4PTgyNixlLmE1OT04MTUsZS5hNjA9Nzg5LGUuYTYxPTc4OSxlLmE2Mj03MDcsZS5hNjM9Njg3LGUuYTY0PTY5NixlLmE2NT02ODksZS5hNjY9Nzg2LGUuYTY3PTc4NyxlLmE2OD03MTMsZS5hNjk9NzkxLGUuYTcwPTc4NSxlLmE3MT03OTEsZS5hNzI9ODczLGUuYTczPTc2MSxlLmE3ND03NjIsZS5hMjAzPTc2MixlLmE3NT03NTksZS5hMjA0PTc1OSxlLmE3Nj04OTIsZS5hNzc9ODkyLGUuYTc4PTc4OCxlLmE3OT03ODQsZS5hODE9NDM4LGUuYTgyPTEzOCxlLmE4Mz0yNzcsZS5hODQ9NDE1LGUuYTk3PTM5MixlLmE5OD0zOTIsZS5hOTk9NjY4LGUuYTEwMD02NjgsZS5hODk9MzkwLGUuYTkwPTM5MCxlLmE5Mz0zMTcsZS5hOTQ9MzE3LGUuYTkxPTI3NixlLmE5Mj0yNzYsZS5hMjA1PTUwOSxlLmE4NT01MDksZS5hMjA2PTQxMCxlLmE4Nj00MTAsZS5hODc9MjM0LGUuYTg4PTIzNCxlLmE5NT0zMzQsZS5hOTY9MzM0LGUuYTEwMT03MzIsZS5hMTAyPTU0NCxlLmExMDM9NTQ0LGUuYTEwND05MTAsZS5hMTA2PTY2NyxlLmExMDc9NzYwLGUuYTEwOD03NjAsZS5hMTEyPTc3NixlLmExMTE9NTk1LGUuYTExMD02OTQsZS5hMTA5PTYyNixlLmExMjA9Nzg4LGUuYTEyMT03ODgsZS5hMTIyPTc4OCxlLmExMjM9Nzg4LGUuYTEyND03ODgsZS5hMTI1PTc4OCxlLmExMjY9Nzg4LGUuYTEyNz03ODgsZS5hMTI4PTc4OCxlLmExMjk9Nzg4LGUuYTEzMD03ODgsZS5hMTMxPTc4OCxlLmExMzI9Nzg4LGUuYTEzMz03ODgsZS5hMTM0PTc4OCxlLmExMzU9Nzg4LGUuYTEzNj03ODgsZS5hMTM3PTc4OCxlLmExMzg9Nzg4LGUuYTEzOT03ODgsZS5hMTQwPTc4OCxlLmExNDE9Nzg4LGUuYTE0Mj03ODgsZS5hMTQzPTc4OCxlLmExNDQ9Nzg4LGUuYTE0NT03ODgsZS5hMTQ2PTc4OCxlLmExNDc9Nzg4LGUuYTE0OD03ODgsZS5hMTQ5PTc4OCxlLmExNTA9Nzg4LGUuYTE1MT03ODgsZS5hMTUyPTc4OCxlLmExNTM9Nzg4LGUuYTE1ND03ODgsZS5hMTU1PTc4OCxlLmExNTY9Nzg4LGUuYTE1Nz03ODgsZS5hMTU4PTc4OCxlLmExNTk9Nzg4LGUuYTE2MD04OTQsZS5hMTYxPTgzOCxlLmExNjM9MTAxNixlLmExNjQ9NDU4LGUuYTE5Nj03NDgsZS5hMTY1PTkyNCxlLmExOTI9NzQ4LGUuYTE2Nj05MTgsZS5hMTY3PTkyNyxlLmExNjg9OTI4LGUuYTE2OT05MjgsZS5hMTcwPTgzNCxlLmExNzE9ODczLGUuYTE3Mj04MjgsZS5hMTczPTkyNCxlLmExNjI9OTI0LGUuYTE3ND05MTcsZS5hMTc1PTkzMCxlLmExNzY9OTMxLGUuYTE3Nz00NjMsZS5hMTc4PTg4MyxlLmExNzk9ODM2LGUuYTE5Mz04MzYsZS5hMTgwPTg2NyxlLmExOTk9ODY3LGUuYTE4MT02OTYsZS5hMjAwPTY5NixlLmExODI9ODc0LGUuYTIwMT04NzQsZS5hMTgzPTc2MCxlLmExODQ9OTQ2LGUuYTE5Nz03NzEsZS5hMTg1PTg2NSxlLmExOTQ9NzcxLGUuYTE5OD04ODgsZS5hMTg2PTk2NyxlLmExOTU9ODg4LGUuYTE4Nz04MzEsZS5hMTg4PTg3MyxlLmExODk9OTI3LGUuYTE5MD05NzAsZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9YTt2YXIgaT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9LGVbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fSxlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn0sZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fSxlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn0sZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9LGVbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9LGVbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX0sZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9LGVbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn0sZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfSxlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSkpO3QuZ2V0Rm9udEJhc2ljTWV0cmljcz1pfSwoZSx0KT0+e2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1pKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBvKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/byhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIHQmJmMoZS5wcm90b3R5cGUsdCksciYmYyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR2x5ZlRhYmxlPXZvaWQgMDt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5nbHlmVGFibGUsbj10LmlzR2x5cGhMb2NhdGlvbnNMb25nLGE9dC5sb2NhVGFibGUsaT10Lm51bUdseXBocztzKHRoaXMsZSksdGhpcy5nbHlwaHM9W107Zm9yKHZhciBvPW5ldyBEYXRhVmlldyhhLmJ1ZmZlcixhLmJ5dGVPZmZzZXQsYS5ieXRlTGVuZ3RoKSxjPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKSx1PW4/NDoyLGw9bj9vLmdldFVpbnQzMigwKToyKm8uZ2V0VWludDE2KDApLGg9MCxkPTA7ZDxpO2QrKyl7aCs9dTt2YXIgcD1uP28uZ2V0VWludDMyKGgpOjIqby5nZXRVaW50MTYoaCk7aWYocCE9PWwpe3ZhciBnPWYucGFyc2UobCxjKTt0aGlzLmdseXBocy5wdXNoKGcpLGw9cH1lbHNlIHRoaXMuZ2x5cGhzLnB1c2gobmV3IGYoe30pKX19cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlKyh0LmdldFNpemUoKSszJi00KX0pLDApfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTaXplKCksdD1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKGUpKSxyPWU+MTMxMDcwLG49cj80OjIsaT1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCh0aGlzLmdseXBocy5sZW5ndGgrMSkqbikpO3I/aS5zZXRVaW50MzIoMCwwKTppLnNldFVpbnQxNigwLDApO3ZhciBvLHM9MCxjPTAsdT1hKHRoaXMuZ2x5cGhzKTt0cnl7Zm9yKHUucygpOyEobz11Lm4oKSkuZG9uZTspcz0ocys9by52YWx1ZS53cml0ZShzLHQpKSszJi00LGMrPW4scj9pLnNldFVpbnQzMihjLHMpOmkuc2V0VWludDE2KGMscz4+MSl9Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJue2lzTG9jYXRpb25Mb25nOnIsbG9jYTpuZXcgVWludDhBcnJheShpLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8cjt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fV0pLGV9KCk7dC5HbHlmVGFibGU9bDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5oZWFkZXIsbj12b2lkIDA9PT1yP251bGw6cixhPXQuc2ltcGxlLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LmNvbXBvc2l0ZXMsYz12b2lkIDA9PT1vP251bGw6bztzKHRoaXMsZSksdGhpcy5oZWFkZXI9bix0aGlzLnNpbXBsZT1pLHRoaXMuY29tcG9zaXRlcz1jfXJldHVybiB1KGUsW3trZXk6ImdldFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuZ2V0U2l6ZSgpfSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciByPWU7aWYoZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KSx0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2V7dmFyIG4saT1hKHRoaXMuY29tcG9zaXRlcyk7dHJ5e2ZvcihpLnMoKTshKG49aS5uKCkpLmRvbmU7KWUrPW4udmFsdWUud3JpdGUoZSx0KX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuIGUtcn19LHtrZXk6InNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmhlYWRlcil7dmFyIHQ9KHRoaXMuaGVhZGVyLnhNaW4rdGhpcy5oZWFkZXIueE1heCkvMjtpZih0aGlzLmhlYWRlci5zY2FsZSh0LGUpLHRoaXMuc2ltcGxlKXRoaXMuc2ltcGxlLnNjYWxlKHQsZSk7ZWxzZXt2YXIgcixuPWEodGhpcy5jb21wb3NpdGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5zY2FsZSh0LGUpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19fX1dLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgYT1yKGgucGFyc2UodCxuKSwyKSxpPWFbMF0sbz1hWzFdO2lmKHQrPWksby5udW1iZXJPZkNvbnRvdXJzPDApe2Zvcih2YXIgcz1bXTs7KXt2YXIgYz1yKGcucGFyc2UodCxuKSwyKSx1PWNbMF0sbD1jWzFdO2lmKHQrPXUscy5wdXNoKGwpLCEoMzImbC5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBlKHtoZWFkZXI6byxjb21wb3NpdGVzOnN9KX1yZXR1cm4gbmV3IGUoe2hlYWRlcjpvLHNpbXBsZTpwLnBhcnNlKHQsbixvLm51bWJlck9mQ29udG91cnMpfSl9fV0pLGV9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5udW1iZXJPZkNvbnRvdXJzLG49dC54TWluLGE9dC55TWluLGk9dC54TWF4LG89dC55TWF4O3ModGhpcyxlKSx0aGlzLm51bWJlck9mQ29udG91cnM9cix0aGlzLnhNaW49bix0aGlzLnlNaW49YSx0aGlzLnhNYXg9aSx0aGlzLnlNYXg9b31yZXR1cm4gdShlLFt7a2V5OiJnZXRTaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxMH19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKSx0LnNldEludDE2KGUrMix0aGlzLnhNaW4pLHQuc2V0SW50MTYoZSs0LHRoaXMueU1pbiksdC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KSx0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpLDEwfX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpLHRoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19XSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuWzEwLG5ldyBlKHtudW1iZXJPZkNvbnRvdXJzOnIuZ2V0SW50MTYodCkseE1pbjpyLmdldEludDE2KHQrMikseU1pbjpyLmdldEludDE2KHQrNCkseE1heDpyLmdldEludDE2KHQrNikseU1heDpyLmdldEludDE2KHQrOCl9KV19fV0pLGV9KCksZD11KChmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LnhDb29yZGluYXRlcyxhPXQueUNvb3JkaW5hdGVzO3ModGhpcyxlKSx0aGlzLnhDb29yZGluYXRlcz1uLHRoaXMueUNvb3JkaW5hdGVzPWEsdGhpcy5mbGFncz1yfSkpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuY29udG91cnMsbj10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5jb250b3Vycz1yLHRoaXMuaW5zdHJ1Y3Rpb25zPW59cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgscj0wLG49MCxpPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgbz1lLnZhbHVlO3QrPW8uZmxhZ3MubGVuZ3RoO2Zvcih2YXIgcz0wLGM9by54Q29vcmRpbmF0ZXMubGVuZ3RoO3M8YztzKyspe3ZhciB1PW8ueENvb3JkaW5hdGVzW3NdLGw9by55Q29vcmRpbmF0ZXNbc10sZj1NYXRoLmFicyh1LXIpO2Y+MjU1P3QrPTI6Zj4wJiYodCs9MSkscj11LChmPU1hdGguYWJzKGwtbikpPjI1NT90Kz0yOmY+MCYmKHQrPTEpLG49bH19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiB0fX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lLGk9W10sbz1bXSxzPVtdLGM9MCx1PTAsbD1hKHRoaXMuY29udG91cnMpO3RyeXtmb3IobC5zKCk7IShyPWwubigpKS5kb25lOyl7Zm9yKHZhciBmPXIudmFsdWUsaD0wLGQ9Zi54Q29vcmRpbmF0ZXMubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPWYuZmxhZ3NbaF0sZz1mLnhDb29yZGluYXRlc1toXSx2PWctYztpZigwPT09dilwfD0xNixpLnB1c2goMCk7ZWxzZXt2YXIgeT1NYXRoLmFicyh2KTt5PD0yNTU/KHB8PXY+PTA/MTg6MixpLnB1c2goeSkpOmkucHVzaCh2KX1jPWc7dmFyIG09Zi55Q29vcmRpbmF0ZXNbaF07aWYoMD09KHY9bS11KSlwfD0zMixvLnB1c2goMCk7ZWxzZXt2YXIgYj1NYXRoLmFicyh2KTtiPD0yNTU/KHB8PXY+PTA/MzY6NCxvLnB1c2goYikpOm8ucHVzaCh2KX11PW0scy5wdXNoKHApfXQuc2V0VWludDE2KGUsaS5sZW5ndGgtMSksZSs9Mn19Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpLGUrPTIsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoJiYobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSksZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtmb3IodmFyIHc9MCxrPXM7dzxrLmxlbmd0aDt3Kyspe3ZhciBTPWtbd107dC5zZXRVaW50OChlKyssUyl9Zm9yKHZhciB4PTAsTz1pLmxlbmd0aDt4PE87eCsrKXt2YXIgQT1pW3hdLEM9c1t4XTsyJkM/dC5zZXRVaW50OChlKyssQSk6MTYmQ3x8KHQuc2V0SW50MTYoZSxBKSxlKz0yKX1mb3IodmFyIEY9MCxQPW8ubGVuZ3RoO0Y8UDtGKyspe3ZhciBUPW9bRl0sST1zW0ZdOzQmST90LnNldFVpbnQ4KGUrKyxUKTozMiZJfHwodC5zZXRJbnQxNihlLFQpLGUrPTIpfXJldHVybiBlLW59fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKDAhPT1pLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKHZhciBvPTAscz1pLnhDb29yZGluYXRlcy5sZW5ndGg7bzxzO28rKylpLnhDb29yZGluYXRlc1tvXT1NYXRoLnJvdW5kKGUrKGkueENvb3JkaW5hdGVzW29dLWUpKnQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBhPVtdLGk9MDtpPG47aSsrKXt2YXIgbz1yLmdldFVpbnQxNih0KTt0Kz0yLGEucHVzaChvKX12YXIgcz1hW24tMV0rMSxjPXIuZ2V0VWludDE2KHQpO3QrPTI7dmFyIHU9bmV3IFVpbnQ4QXJyYXkocikuc2xpY2UodCx0K2MpO3QrPWM7Zm9yKHZhciBsPVtdLGY9MDtmPHM7dCsrLGYrKyl7dmFyIGg9ci5nZXRVaW50OCh0KTtpZihsLnB1c2goaCksOCZoKXt2YXIgcD1yLmdldFVpbnQ4KCsrdCk7aF49ODtmb3IodmFyIGc9MDtnPHA7ZysrKWwucHVzaChoKTtmKz1wfX1mb3IodmFyIHY9W10seT1bXSxtPVtdLGI9W10sdz1bXSxrPTAsUz0wLHg9MDt4PHM7eCsrKXt2YXIgTz1sW3hdO2lmKDImTyl7dmFyIEE9ci5nZXRVaW50OCh0KyspO1MrPTE2Jk8/QTotQSx5LnB1c2goUyl9ZWxzZSAxNiZPfHwoUys9ci5nZXRJbnQxNih0KSx0Kz0yKSx5LnB1c2goUyk7YVtrXT09PXgmJihrKyssdi5wdXNoKHkpLHk9W10pfVM9MCxrPTA7Zm9yKHZhciBDPTA7QzxzO0MrKyl7dmFyIEY9bFtDXTtpZig0JkYpe3ZhciBQPXIuZ2V0VWludDgodCsrKTtTKz0zMiZGP1A6LVAsbS5wdXNoKFMpfWVsc2UgMzImRnx8KFMrPXIuZ2V0SW50MTYodCksdCs9MiksbS5wdXNoKFMpO2IucHVzaCgxJkZ8NjQmRiksYVtrXT09PUMmJih5PXZba10saysrLHcucHVzaChuZXcgZCh7ZmxhZ3M6Yix4Q29vcmRpbmF0ZXM6eSx5Q29vcmRpbmF0ZXM6bX0pKSxtPVtdLGI9W10pfXJldHVybiBuZXcgZSh7Y29udG91cnM6dyxpbnN0cnVjdGlvbnM6dX0pfX1dKSxlfSgpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LmdseXBoSW5kZXgsYT10LmFyZ3VtZW50MSxpPXQuYXJndW1lbnQyLG89dC50cmFuc2YsYz10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5mbGFncz1yLHRoaXMuZ2x5cGhJbmRleD1uLHRoaXMuYXJndW1lbnQxPWEsdGhpcy5hcmd1bWVudDI9aSx0aGlzLnRyYW5zZj1vLHRoaXMuaW5zdHJ1Y3Rpb25zPWN9cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoO3JldHVybiAyNTYmdGhpcy5mbGFncyYmKGUrPTIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSxlKz0yLDImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fChlKz0yKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fChlKz0yKSxlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZTtyZXR1cm4gMiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KHRoaXMuZmxhZ3N8PTEpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KHRoaXMuZmxhZ3N8PTEpLHQuc2V0VWludDE2KGUsdGhpcy5mbGFncyksdC5zZXRVaW50MTYoZSsyLHRoaXMuZ2x5cGhJbmRleCksZSs9NCwxJnRoaXMuZmxhZ3M/KDImdGhpcy5mbGFncz8odC5zZXRJbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldEludDE2KGUrMix0aGlzLmFyZ3VtZW50MikpOih0LnNldFVpbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpKSxlKz00KToodC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50MiksZSs9MiksMjU2JnRoaXMuZmxhZ3MmJih0LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCksZSs9Mix0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgmJihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKSxlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpKSxlLXJ9fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt9fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuLGEsaT10LG89W10scz1yLmdldFVpbnQxNih0KSxjPXIuZ2V0VWludDE2KHQrMik7dCs9NCwxJnM/KDImcz8obj1yLmdldEludDE2KHQpLGE9ci5nZXRJbnQxNih0KzIpKToobj1yLmdldFVpbnQxNih0KSxhPXIuZ2V0VWludDE2KHQrMikpLHQrPTQsc149MSk6KDImcz8obj1yLmdldEludDgodCksYT1yLmdldEludDgodCsxKSk6KG49ci5nZXRVaW50OCh0KSxhPXIuZ2V0VWludDgodCsxKSksdCs9MiksOCZzPyhvLnB1c2goci5nZXRVaW50MTYodCkpLHQrPTIpOjY0JnM/KG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpKSx0Kz00KToxMjgmcyYmKG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpLHIuZ2V0VWludDE2KHQrNCksci5nZXRVaW50MTYodCs2KSksdCs9OCk7dmFyIHU9bnVsbDtpZigyNTYmcyl7dmFyIGw9ci5nZXRVaW50MTYodCk7dCs9Mix1PW5ldyBVaW50OEFycmF5KHIpLnNsaWNlKHQsdCtsKSx0Kz1sfXJldHVyblt0LWksbmV3IGUoe2ZsYWdzOnMsZ2x5cGhJbmRleDpjLGFyZ3VtZW50MTpuLGFyZ3VtZW50MjphLHRyYW5zZjpvLGluc3RydWN0aW9uczp1fSldfX1dKSxlfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVuVHlwZUZpbGVCdWlsZGVyPXZvaWQgMDt2YXIgYT1yKDEzNSksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQscil7ZVt0XT1yPj44JjI1NSxlW3QrMV09MjU1JnJ9ZnVuY3Rpb24gdShlLHQscil7ZVt0XT1yPj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfWZ1bmN0aW9uIGwoZSx0LHIpe2lmKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KHIsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpZm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKWVbdCsrXT0yNTUmci5jaGFyQ29kZUF0KG4pO2Vsc2V7dmFyIGksbz1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fShyKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBjPWkudmFsdWU7ZVt0KytdPTI1NSZjfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19fXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnNmbnQ9dCx0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXZhciB0LHIsbjtyZXR1cm4gdD1lLG49W3trZXk6ImdldFNlYXJjaFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MSxuPTA7KHJeZSk+cjspcjw8PTEsbisrO3ZhciBhPXIqdDtyZXR1cm57cmFuZ2U6YSxlbnRyeTpuLHJhbmdlU2hpZnQ6dCplLWF9fX1dLChyPVt7a2V5OiJ0b0FycmF5Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2ZudCxyPXRoaXMudGFibGVzLG49T2JqZWN0LmtleXMocik7bi5zb3J0KCk7dmFyIG8scyxmLGgsZCxwPW4ubGVuZ3RoLGc9MTIrMTYqcCx2PVtnXTtmb3Iobz0wO288cDtvKyspZys9KChoPXJbbltvXV0pLmxlbmd0aCszJi00KT4+PjAsdi5wdXNoKGcpO3ZhciB5PW5ldyBVaW50OEFycmF5KGcpO2ZvcihvPTA7bzxwO28rKyloPXJbbltvXV0sbCh5LHZbb10saCk7InRydWUiPT09dCYmKHQ9KDAsaS5zdHJpbmczMikoNjU1MzYpKSx5WzBdPTI1NSZ0LmNoYXJDb2RlQXQoMCkseVsxXT0yNTUmdC5jaGFyQ29kZUF0KDEpLHlbMl09MjU1JnQuY2hhckNvZGVBdCgyKSx5WzNdPTI1NSZ0LmNoYXJDb2RlQXQoMyksYyh5LDQscCk7dmFyIG09ZS5nZXRTZWFyY2hQYXJhbXMocCwxNik7Zm9yKGMoeSw2LG0ucmFuZ2UpLGMoeSw4LG0uZW50cnkpLGMoeSwxMCxtLnJhbmdlU2hpZnQpLGc9MTIsbz0wO288cDtvKyspe2Q9bltvXSx5W2ddPTI1NSZkLmNoYXJDb2RlQXQoMCkseVtnKzFdPTI1NSZkLmNoYXJDb2RlQXQoMSkseVtnKzJdPTI1NSZkLmNoYXJDb2RlQXQoMikseVtnKzNdPTI1NSZkLmNoYXJDb2RlQXQoMyk7dmFyIGI9MDtmb3Iocz12W29dLGY9dltvKzFdO3M8ZjtzKz00KWI9YisoMCxhLnJlYWRVaW50MzIpKHkscyk+Pj4wO3UoeSxnKzQsYiksdSh5LGcrOCx2W29dKSx1KHksZysxMixyW2RdLmxlbmd0aCksZys9MTZ9cmV0dXJuIHl9fSx7a2V5OiJhZGRUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihlIGluIHRoaXMudGFibGVzKXRocm93IG5ldyBFcnJvcigiVGFibGUgIitlKyIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnRhYmxlc1tlXT10fX1dKSYmbyh0LnByb3RvdHlwZSxyKSxuJiZvKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigyKSxpPXIoMTY3KSxvPXIoMTM1KSxzPXIoMTM5KSxjPXIoMTc4KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPXQubGVuZ3RoLGk9bi1hLHM9cixjPSExO3M8aTspe2Zvcih2YXIgdT0wO3U8YSYmZVtzK3VdPT09dFt1XTspdSsrO2lmKHU+PWEpe2ZvcihzKz11O3M8biYmKDAsby5pc1doaXRlU3BhY2UpKGVbc10pOylzKys7Yz0hMDticmVha31zKyt9cmV0dXJue2ZvdW5kOmMsbGVuZ3RoOnN9fXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSk7dmFyIG89bi5sZW5ndGgxLHU9KG4ubGVuZ3RoMixyLnBlZWtCeXRlcyg2KSksbD0xMjg9PT11WzBdJiYxPT09dVsxXTtsJiYoci5za2lwKDYpLG89dVs1XTw8MjR8dVs0XTw8MTZ8dVszXTw8OHx1WzJdKTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxvLGM9WzEwMSwxMDEsMTIwLDEwMSw5OV0sdT1lLnBvczt0cnl7bj0ocj1lLmdldEJ5dGVzKHQpKS5sZW5ndGh9Y2F0Y2goZSl7fWlmKG49PT10JiYoaT1kKHIsYyx0LTIqYy5sZW5ndGgpKS5mb3VuZCYmaS5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IHMuU3RyZWFtKHIpLGxlbmd0aDp0fTtmb3IoKDAsYS53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxlLnBvcz11OzAhPT0oaT1kKGUucGVla0J5dGVzKDIwNDgpLGMsMCkpLmxlbmd0aDspaWYoZS5wb3MrPWkubGVuZ3RoLGkuZm91bmQpe289ZS5wb3MtdTticmVha31yZXR1cm4gZS5wb3M9dSxvP3tzdHJlYW06bmV3IHMuU3RyZWFtKGUuZ2V0Qnl0ZXMobykpLGxlbmd0aDpvfTooKDAsYS53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgcy5TdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9KX0ocixvKTtuZXcgYy5UeXBlMVBhcnNlcihmLnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIobiksbCYmKCh1PXIuZ2V0Qnl0ZXMoNikpWzVdLHVbNF0sdVszXSx1WzJdKTt2YXIgaD1mdW5jdGlvbihlLHQpe3ZhciByPWUuZ2V0Qnl0ZXMoKTtpZigwPT09ci5sZW5ndGgpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImdldEVleGVjQmxvY2sgLSBubyBmb250IHByb2dyYW0gZm91bmQuIik7cmV0dXJue3N0cmVhbTpuZXcgcy5TdHJlYW0ociksbGVuZ3RoOnIubGVuZ3RofX0ocikscD1uZXcgYy5UeXBlMVBhcnNlcihoLnN0cmVhbSwhMCxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRQcm9ncmFtKG4pO2Zvcih2YXIgZyBpbiBwLnByb3BlcnRpZXMpbltnXT1wLnByb3BlcnRpZXNbZ107dmFyIHY9cC5jaGFyc3RyaW5ncyx5PXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyh2KSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhwLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPXYsdGhpcy5kYXRhPXRoaXMud3JhcCh0LHksdGhpcy5jaGFyc3RyaW5ncyxtLG4pLHRoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhwLmNoYXJzdHJpbmdzKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6Im51bUdseXBocyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9fSx7a2V5OiJnZXRDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9WyIubm90ZGVmIl0scj1sKHRoaXMuY2hhcnN0cmluZ3MpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZS5nbHlwaE5hbWU7dC5wdXNoKG4pfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGFyc3RyaW5ncztpZihlLmNvbXBvc2l0ZSl7Zm9yKHZhciByPU9iamVjdC5jcmVhdGUobnVsbCksbj0wLGE9dC5sZW5ndGg7bjxhO24rKylyW2UuY01hcC5jaGFyQ29kZU9mKG4pXT1uKzE7cmV0dXJuIHJ9dmFyIG8scyxjPVsiLm5vdGRlZiJdO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspYy5wdXNoKHRbc10uZ2x5cGhOYW1lKTt2YXIgdT1lLmJ1aWx0SW5FbmNvZGluZztpZih1KWZvcih2YXIgbCBpbiBvPU9iamVjdC5jcmVhdGUobnVsbCksdSkocz1jLmluZGV4T2YodVtsXSkpPj0wJiYob1tsXT1zKTtyZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxvLGMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMubnVtR2x5cGhzKSYmKDA9PT1lfHx0aGlzLmNoYXJzdHJpbmdzW2UtMV0uY2hhcnN0cmluZy5sZW5ndGg+MCl9fSx7a2V5OiJnZXRTZWFjcyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07YS5zZWFjJiYodFtyKzFdPWEuc2VhYyl9cmV0dXJuIHR9fSx7a2V5OiJnZXRUeXBlMkNoYXJzdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPVtdLG49bChlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7ci5wdXNoKGEuY2hhcnN0cmluZyl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByfX0se2tleToiZ2V0VHlwZTJTdWJycyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aDt0PXI8MTEzMz8xMDc6cjwzMzc2OT8xMTMxOjMyNzY4O3ZhciBuLGE9W107Zm9yKG49MDtuPHQ7bisrKWEucHVzaChbMTFdKTtmb3Iobj0wO248cjtuKyspYS5wdXNoKGVbbl0pO3JldHVybiBhfX0se2tleToid3JhcCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxpKXt2YXIgbz1uZXcgbi5DRkY7by5oZWFkZXI9bmV3IG4uQ0ZGSGVhZGVyKDEsMCw0LDQpLG8ubmFtZXM9W2VdO3ZhciBzPW5ldyBuLkNGRlRvcERpY3Q7cy5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSkscy5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKSxzLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Mykscy5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCkscy5zZXRCeU5hbWUoIldlaWdodCIsMzk1KSxzLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpLHMuc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpLHMuc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KSxzLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCkscy5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKSxzLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCksby50b3BEaWN0PXM7dmFyIGM9bmV3IG4uQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIiksYy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxjLmFkZChlKSxjLmFkZChlKSxjLmFkZCgiTWVkaXVtIiksby5zdHJpbmdzPWMsby5nbG9iYWxTdWJySW5kZXg9bmV3IG4uQ0ZGSW5kZXg7dmFyIHUsbCxmPXQubGVuZ3RoLGg9WyIubm90ZGVmIl07Zm9yKHU9MDt1PGY7dSsrKXt2YXIgZD1yW3VdLmdseXBoTmFtZTstMT09PW4uQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2YoZCkmJmMuYWRkKGQpLGgucHVzaChkKX1vLmNoYXJzZXQ9bmV3IG4uQ0ZGQ2hhcnNldCghMSwwLGgpO3ZhciBwPW5ldyBuLkNGRkluZGV4O2ZvcihwLmFkZChbMTM5LDE0XSksdT0wO3U8Zjt1KyspcC5hZGQodFt1XSk7by5jaGFyU3RyaW5ncz1wO3ZhciBnPW5ldyBuLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7dmFyIHY9WyJCbHVlVmFsdWVzIiwiT3RoZXJCbHVlcyIsIkZhbWlseUJsdWVzIiwiRmFtaWx5T3RoZXJCbHVlcyIsIlN0ZW1TbmFwSCIsIlN0ZW1TbmFwViIsIkJsdWVTaGlmdCIsIkJsdWVGdXp6IiwiQmx1ZVNjYWxlIiwiTGFuZ3VhZ2VHcm91cCIsIkV4cGFuc2lvbkZhY3RvciIsIkZvcmNlQm9sZCIsIlN0ZEhXIiwiU3RkVlciXTtmb3IodT0wLGw9di5sZW5ndGg7dTxsO3UrKyl7dmFyIHk9dlt1XTtpZih5IGluIGkucHJpdmF0ZURhdGEpe3ZhciBtPWkucHJpdmF0ZURhdGFbeV07aWYoQXJyYXkuaXNBcnJheShtKSlmb3IodmFyIGI9bS5sZW5ndGgtMTtiPjA7Yi0tKW1bYl0tPW1bYi0xXTtnLnNldEJ5TmFtZSh5LG0pfX1vLnRvcERpY3QucHJpdmF0ZURpY3Q9Zzt2YXIgdz1uZXcgbi5DRkZJbmRleDtmb3IodT0wLGw9YS5sZW5ndGg7dTxsO3UrKyl3LmFkZChhW3VdKTtyZXR1cm4gZy5zdWJyc0luZGV4PXcsbmV3IG4uQ0ZGQ29tcGlsZXIobykuY29tcGlsZSgpfX1dKSYmaCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuVHlwZTFGb250PXB9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIG49cigxNjYpLGE9cigxMzUpLGk9cigxMzkpLG89cigyKTtmdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPVs0XSxkPVs1XSxwPVs2XSxnPVs3XSx2PVs4XSx5PVsxMiwzNV0sbT1bMTRdLGI9WzIxXSx3PVsyMl0saz1bMzBdLFM9WzMxXSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLndpZHRoPTAsdGhpcy5sc2I9MCx0aGlzLmZsZXhpbmc9ITEsdGhpcy5vdXRwdXQ9W10sdGhpcy5zdGFjaz1bXX1yZXR1cm4gZihlLFt7a2V5OiJjb252ZXJ0Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGEsaSxzPWUubGVuZ3RoLGM9ITEsdT0wO3U8czt1Kyspe3ZhciBsPWVbdV07aWYobDwzMil7c3dpdGNoKDEyPT09bCYmKGw9KGw8PDgpK2VbKyt1XSksbCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7Yz0hMDticmVha312YXIgZj10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGYpO2JyZWFrfWM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgNTpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixkKTticmVhaztjYXNlIDY6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscCk7YnJlYWs7Y2FzZSA3OmM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGcpO2JyZWFrO2Nhc2UgODpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix2KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe2M9ITA7YnJlYWt9aWYoIXRbaT10aGlzLnN0YWNrLnBvcCgpXSl7Yz0hMDticmVha31jPXRoaXMuY29udmVydCh0W2ldLHQscik7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gYztjYXNlIDEzOmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe2M9ITA7YnJlYWt9bj10aGlzLnN0YWNrLnBvcCgpLGE9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMix3KTticmVhaztjYXNlIDE0OnRoaXMub3V0cHV0LnB1c2gobVswXSk7YnJlYWs7Y2FzZSAyMTppZih0aGlzLmZsZXhpbmcpYnJlYWs7Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYik7YnJlYWs7Y2FzZSAyMjppZih0aGlzLmZsZXhpbmcpe3RoaXMuc3RhY2sucHVzaCgwKTticmVha31jPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSx3KTticmVhaztjYXNlIDMwOmM9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGspO2JyZWFrO2Nhc2UgMzE6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsUyk7YnJlYWs7Y2FzZSAzMDc4OmlmKHIpe3ZhciB4PXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSx0aGlzLnNlYWNbMF0rPXRoaXMubHNiLXgsYz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsbSl9ZWxzZSBjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxtKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7Yz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpLG49dGhpcy5zdGFjay5wb3AoKTt2YXIgTz10aGlzLnN0YWNrLnBvcCgpO2E9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhLE8pLGM9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGIpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfXZhciBBPXRoaXMuc3RhY2sucG9wKCksQz10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaChDL0EpO2JyZWFrO2Nhc2UgMzA4ODppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfWk9dGhpcy5zdGFjay5wb3AoKTt2YXIgRj10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT1pJiYzPT09Ril7dmFyIFA9dGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChQWzJdK1BbMF0sUFszXStQWzFdLFBbNF0sUFs1XSxQWzZdLFBbN10sUFs4XSxQWzldLFBbMTBdLFBbMTFdLFBbMTJdLFBbMTNdLFBbMTRdKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMseSwhMCksdGhpcy5mbGV4aW5nPSExLHRoaXMuc3RhY2sucHVzaChQWzE1XSxQWzE2XSl9ZWxzZSAxPT09aSYmMD09PUYmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLG8ud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytsKyciJyl9aWYoYylicmVha31lbHNlIGw8PTI0Nj9sLT0xMzk6bD1sPD0yNTA/MjU2KihsLTI0NykrZVsrK3VdKzEwODpsPD0yNTQ/LTI1NioobC0yNTEpLWVbKyt1XS0xMDg6KDI1NSZlWysrdV0pPDwyNHwoMjU1JmVbKyt1XSk8PDE2fCgyNTUmZVsrK3VdKTw8OHwoMjU1JmVbKyt1XSk8PDAsdGhpcy5zdGFjay5wdXNoKGwpfXJldHVybiBjfX0se2tleToiZXhlY3V0ZUNvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dGhpcy5zdGFjay5sZW5ndGg7aWYoZT5pKXJldHVybiEwO2Zvcih2YXIgbz1pLWUscz1vO3M8aTtzKyspe3ZhciB1PXRoaXMuc3RhY2tbc107TnVtYmVyLmlzSW50ZWdlcih1KT90aGlzLm91dHB1dC5wdXNoKDI4LHU+PjgmMjU1LDI1NSZ1KToodT02NTUzNip1fDAsdGhpcy5vdXRwdXQucHVzaCgyNTUsdT4+MjQmMjU1LHU+PjE2JjI1NSx1Pj44JjI1NSwyNTUmdSkpfXJldHVybihuPXRoaXMub3V0cHV0KS5wdXNoLmFwcGx5KG4sZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYyhlKX0oYT10KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShhKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX0oYSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpLHI/dGhpcy5zdGFjay5zcGxpY2UobyxlKTp0aGlzLnN0YWNrLmxlbmd0aD0wLCExfX1dKSxlfSgpO2Z1bmN0aW9uIE8oZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIEEoZSx0LHIpe2lmKHI+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbixhLGk9MHx0O2ZvcihuPTA7bjxyO24rKylpPTUyODQ1KihlW25dK2kpKzIyNzE5JjY1NTM1O3ZhciBvPWUubGVuZ3RoLXIscz1uZXcgVWludDhBcnJheShvKTtmb3Iobj1yLGE9MDthPG87bisrLGErKyl7dmFyIGM9ZVtuXTtzW2FdPWNeaT4+OCxpPTUyODQ1KihjK2kpKzIyNzE5JjY1NTM1fXJldHVybiBzfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXZhciBGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7aWYodSh0aGlzLGUpLHIpe3ZhciBvPXQuZ2V0Qnl0ZXMoKSxzPSEoKE8ob1swXSl8fCgwLGEuaXNXaGl0ZVNwYWNlKShvWzBdKSkmJk8ob1sxXSkmJk8ob1syXSkmJk8ob1szXSkmJk8ob1s0XSkmJk8ob1s1XSkmJk8ob1s2XSkmJk8ob1s3XSkpO3Q9bmV3IGkuU3RyZWFtKHM/QShvLDU1NjY1LDQpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9NTU2NjUsbz1lLmxlbmd0aCxzPW5ldyBVaW50OEFycmF5KG8+Pj4xKTtmb3Iobj0wLGE9MDtuPG87bisrKXt2YXIgYz1lW25dO2lmKE8oYykpe24rKztmb3IodmFyIHU9dm9pZCAwO248byYmIU8odT1lW25dKTspbisrO2lmKG48byl7dmFyIGw9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShjLHUpLDE2KTtzW2ErK109bF5pPj44LGk9NTI4NDUqKGwraSkrMjI3MTkmNjU1MzV9fX1yZXR1cm4gcy5zbGljZSg0LGEpfShvKSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhbix0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKX1yZXR1cm4gZihlLFt7a2V5OiJyZWFkTnVtYmVyQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgZT1bXTs7KXt2YXIgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfX0se2tleToicmVhZE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9fSx7a2V5OiJyZWFkSW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX19LHtrZXk6InJlYWRCb29sZWFuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9fSx7a2V5OiJuZXh0Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJwcmV2Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJlYW0uc2tpcCgtMiksdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJnZXRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxhLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoQyh0KSlyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLFN0cmluZy5mcm9tQ2hhckNvZGUodCk7dmFyIHI9IiI7ZG97cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhKDAsYS5pc1doaXRlU3BhY2UpKHQpJiYhQyh0KSk7cmV0dXJuIHJ9fSx7a2V5OiJyZWFkQ2hhclN0cmluZ3MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT10P2U6QShlLDQzMzAsdCl9fSx7a2V5OiJleHRyYWN0Rm9udFByb2dyYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RyZWFtLHI9W10sbj1bXSxhPU9iamVjdC5jcmVhdGUobnVsbCk7YS5sZW5JVj00O2Zvcih2YXIgaSxvLHMsYyx1PXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTphfX07bnVsbCE9PShpPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PWkpc3dpdGNoKGk9dGhpcy5nZXRUb2tlbigpKXtjYXNlIkNoYXJTdHJpbmdzIjpmb3IodGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpO251bGwhPT0oaT10aGlzLmdldFRva2VuKCkpJiYiZW5kIiE9PWk7KWlmKCIvIj09PWkpe3ZhciBsPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBmPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1pJiZ0aGlzLnByZXZDaGFyKCksbi5wdXNoKHtnbHlwaDpsLGVuY29kZWQ6Zn0pfWJyZWFrO2Nhc2UiU3VicnMiOmZvcih0aGlzLnJlYWRJbnQoKSx0aGlzLmdldFRva2VuKCk7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXt2YXIgaD10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBkPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpJiZ0aGlzLmdldFRva2VuKCkscltoXT1kfWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOnZhciBwPXRoaXMucmVhZE51bWJlckFycmF5KCk7cC5sZW5ndGg+MCYmcC5sZW5ndGg7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6Y2FzZSJFeHBhbnNpb25GYWN0b3IiOnUucHJvcGVydGllcy5wcml2YXRlRGF0YVtpXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkZvcmNlQm9sZCI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ldPXRoaXMucmVhZEJvb2xlYW4oKX1mb3IodmFyIGc9MCx2PW47Zzx2Lmxlbmd0aDtnKyspe3ZhciB5PXZbZ10sbT15LmVuY29kZWQsYj15LmdseXBoLHc9bmV3IHgsaz13LmNvbnZlcnQobSxyLHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCksUz13Lm91dHB1dDtrJiYoUz1bMTRdKTt2YXIgTz17Z2x5cGhOYW1lOmIsY2hhcnN0cmluZzpTLHdpZHRoOncud2lkdGgsbHNiOncubHNiLHNlYWM6dy5zZWFjfTtpZigiLm5vdGRlZiI9PT1iP3UuY2hhcnN0cmluZ3MudW5zaGlmdChPKTp1LmNoYXJzdHJpbmdzLnB1c2goTyksZS5idWlsdEluRW5jb2Rpbmcpe3ZhciBBPWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoYik7QT4tMSYmdm9pZCAwPT09ZS53aWR0aHNbQV0mJkE+PWUuZmlyc3RDaGFyJiZBPD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbQV09dy53aWR0aCl9fXJldHVybiB1fX0se2tleToiZXh0cmFjdEZvbnRIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dClzd2l0Y2godD10aGlzLmdldFRva2VuKCkpe2Nhc2UiRm9udE1hdHJpeCI6dmFyIHI9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9cjticmVhaztjYXNlIkVuY29kaW5nIjp2YXIgYT10aGlzLmdldFRva2VuKCksaT12b2lkIDA7aWYoL15cZCskLy50ZXN0KGEpKXtpPVtdO3ZhciBvPTB8cGFyc2VJbnQoYSwxMCk7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgcz0wO3M8bztzKyspe2Zvcih0PXRoaXMuZ2V0VG9rZW4oKTsiZHVwIiE9PXQmJiJkZWYiIT09dDspaWYobnVsbD09PSh0PXRoaXMuZ2V0VG9rZW4oKSkpcmV0dXJuO2lmKCJkZWYiPT09dClicmVhazt2YXIgYz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7dmFyIHU9dGhpcy5nZXRUb2tlbigpO2lbY109dSx0aGlzLmdldFRva2VuKCl9fWVsc2UgaT0oMCxuLmdldEVuY29kaW5nKShhKTtlLmJ1aWx0SW5FbmNvZGluZz1pO2JyZWFrO2Nhc2UiRm9udEJCb3giOnZhciBsPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgobFszXSxsWzFdKSxlLmRlc2NlbnQ9TWF0aC5taW4obFsxXSxsWzNdKSxlLmFzY2VudFNjYWxlZD0hMH19fV0pLGV9KCk7dC5UeXBlMVBhcnNlcj1GfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGF0dGVybj12b2lkIDAsdC5nZXRUaWxpbmdQYXR0ZXJuSVI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9bi5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxvPXQuZ2V0KCJYU3RlcCIpLHM9dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksdT10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyIuY29uY2F0KGksIl0uIikpO3JldHVyblsiVGlsaW5nUGF0dGVybiIscixlLGEsaSxvLHMsYyx1XX07dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTQzKSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49aChlKTtpZih0KXt2YXIgYT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmKHRoaXMscil9fWZ1bmN0aW9uIGYoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZChlKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1kKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWQoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3AodGhpcyxlKSwoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1yZXR1cm4gdihlLG51bGwsW3trZXk6InBhcnNlU2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzLGMpe3ZhciB1PWUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0/ZS5kaWN0OmUsbD11LmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGwpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG5ldyB3KHUsdCxyLHMsYyk7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OnJldHVybiBuZXcgeChlLHQscixzLGMpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK2wpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiBpLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJufSksKDAsbi53YXJuKShlKSxuZXcgT319fV0pLGV9KCk7dC5QYXR0ZXJuPXk7dmFyIG0sYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1yZXR1cm4gdihlLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1dLFt7a2V5OiJTTUFMTF9OVU1CRVIiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJTTUFMTF9OVU1CRVIiLDFlLTYpfX1dKSxlfSgpLHc9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLGEsbyxjLHUpe3ZhciBsO3AodGhpcyxyKSwobD10LmNhbGwodGhpcykpLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKSxsLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO3ZhciBoPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZS5nZXRSYXcoIkNTIil8fGUuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjphLHJlc291cmNlczpvLHBkZkZ1bmN0aW9uRmFjdG9yeTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KSxkPWUuZ2V0QXJyYXkoIkJCb3giKTtBcnJheS5pc0FycmF5KGQpJiY0PT09ZC5sZW5ndGg/bC5iYm94PW4uVXRpbC5ub3JtYWxpemVSZWN0KGQpOmwuYmJveD1udWxsO3ZhciBnPTAsdj0xO2lmKGUuaGFzKCJEb21haW4iKSl7dmFyIHk9ZS5nZXRBcnJheSgiRG9tYWluIik7Zz15WzBdLHY9eVsxXX12YXIgbT0hMSx3PSExO2lmKGUuaGFzKCJFeHRlbmQiKSl7dmFyIGs9ZS5nZXRBcnJheSgiRXh0ZW5kIik7bT1rWzBdLHc9a1sxXX1pZighKDMhPT1sLnNoYWRpbmdUeXBlfHxtJiZ3KSl7dmFyIFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShsLmNvb3Jkc0Fyciw2KSx4PVNbMF0sTz1TWzFdLEE9U1syXSxDPVNbM10sRj1TWzRdLFA9U1s1XSxUPU1hdGguaHlwb3QoeC1DLE8tRik7QTw9UCtUJiZQPD1BK1QmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX1sLmV4dGVuZFN0YXJ0PW0sbC5leHRlbmRFbmQ9dzt2YXIgST1lLmdldFJhdygiRnVuY3Rpb24iKSxFPWMuY3JlYXRlRnJvbUFycmF5KEkpLGo9KHYtZykvMTAsTT1sLmNvbG9yU3RvcHM9W107aWYoZz49dnx8ajw9MClyZXR1cm4oMCxuLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIiksZihsKTtmb3IodmFyIF8sTD1uZXcgRmxvYXQzMkFycmF5KGgubnVtQ29tcHMpLFI9bmV3IEZsb2F0MzJBcnJheSgxKSxOPTA7Tjw9MTA7TisrKXtSWzBdPWcrTipqLEUoUiwwLEwsMCksXz1oLmdldFJnYihMLDApO3ZhciBEPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pO00ucHVzaChbTi8xMCxEXSl9dmFyIEI9InRyYW5zcGFyZW50IjtyZXR1cm4gZS5oYXMoIkJhY2tncm91bmQiKSYmKF89aC5nZXRSZ2IoZS5nZXQoIkJhY2tncm91bmQiKSwwKSxCPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pKSxtfHwoTS51bnNoaWZ0KFswLEJdKSxNWzFdWzBdKz1iLlNNQUxMX05VTUJFUiksd3x8KE0uYXQoLTEpWzBdLT1iLlNNQUxMX05VTUJFUixNLnB1c2goWzEsQl0pKSxsLmNvbG9yU3RvcHM9TSxsfXJldHVybiB2KHIsW3trZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGksbz10aGlzLmNvb3Jkc0FycixzPXRoaXMuc2hhZGluZ1R5cGU7cmV0dXJuIDI9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bMl0sb1szXV0sYT1udWxsLGk9bnVsbCxlPSJheGlhbCIpOjM9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bM10sb1s0XV0sYT1vWzJdLGk9b1s1XSxlPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KHMpKSxbIlJhZGlhbEF4aWFsIixlLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsdCxyLGEsaV19fV0pLHJ9KGIpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5jb250ZXh0PXIsdGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wO3ZhciBuPXIubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KG4pO3ZhciBhPXIuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9ci5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkoYSk6dGhpcy50bXBDb21wc0J1Zn1yZXR1cm4gdihlLFt7a2V5OiJoYXNEYXRhIixnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDt2YXIgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJMZW5ndGg7aWYoMzI9PT1lKXtpZigwPT09cilyZXR1cm4odGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkpPj4+MDt0PXQ8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTt2YXIgbj10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIHRoaXMuYnVmZmVyPW4mKDE8PHIpLTEsKHQ8PDgtcnwoMjU1Jm4pPj5yKT4+PjB9aWYoOD09PWUmJjA9PT1yKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDtyPGU7KXQ9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkscis9ODtyZXR1cm4gci09ZSx0aGlzLmJ1ZmZlckxlbmd0aD1yLHRoaXMuYnVmZmVyPXQmKDE8PHIpLTEsdD4+cn19LHtrZXk6ImFsaWduIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYnVmZmVyPTAsdGhpcy5idWZmZXJMZW5ndGg9MH19LHtrZXk6InJlYWRGbGFnIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9fSx7a2V5OiJyZWFkQ29vcmRpbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5yZWFkQml0cyhlKSxuPXRoaXMuY29udGV4dC5kZWNvZGUsYT1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0KmEqKG5bMV0tblswXSkrblswXSxyKmEqKG5bM10tblsyXSkrblsyXV19fSx7a2V5OiJyZWFkQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQscj10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLG49dGhpcy5jb250ZXh0LmRlY29kZSxhPXRoaXMudG1wQ29tcHNCdWYsaT0wLG89NDtpPGU7aSsrLG8rPTIpe3ZhciBzPXRoaXMucmVhZEJpdHModCk7YVtpXT1zKnIqKG5bbysxXS1uW29dKStuW29dfXZhciBjPXRoaXMudG1wQ3NDb21wc0J1ZjtyZXR1cm4gdGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKGEsMCxjLDApLHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjLDApfX1dKSxlfSgpLFM9KG09W10sZnVuY3Rpb24oZSl7cmV0dXJuIG1bZV18fChtW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjw9ZTtyKyspe3ZhciBuPXIvZSxhPTEtbjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbYSphKmEsMypuKmEqYSwzKm4qbiphLG4qbipuXSkpfXJldHVybiB0fShlKSksbVtlXX0pLHg9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLG8scyxjLHUpe3ZhciBsO2lmKHAodGhpcyxyKSxsPXQuY2FsbCh0aGlzKSwhKGUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7dmFyIGY9ZS5kaWN0O2wuc2hhZGluZ1R5cGU9Zi5nZXQoIlNoYWRpbmdUeXBlIik7dmFyIGg9Zi5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9sLmJib3g9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoaCk6bC5iYm94PW51bGw7dmFyIGQ9aS5Db2xvclNwYWNlLnBhcnNlKHtjczpmLmdldFJhdygiQ1MiKXx8Zi5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOm8scmVzb3VyY2VzOnMscGRmRnVuY3Rpb25GYWN0b3J5OmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dX0pO2wuYmFja2dyb3VuZD1mLmhhcygiQmFja2dyb3VuZCIpP2QuZ2V0UmdiKGYuZ2V0KCJCYWNrZ3JvdW5kIiksMCk6bnVsbDt2YXIgZz1mLmdldFJhdygiRnVuY3Rpb24iKSx2PWc/Yy5jcmVhdGVGcm9tQXJyYXkoZyk6bnVsbDtsLmNvb3Jkcz1bXSxsLmNvbG9ycz1bXSxsLmZpZ3VyZXM9W107dmFyIHk9e2JpdHNQZXJDb29yZGluYXRlOmYuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Zi5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpmLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Zi5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjp2LGNvbG9yU3BhY2U6ZCxudW1Db21wczp2PzE6ZC5udW1Db21wc30sbT1uZXcgayhlLHkpLGI9ITE7c3dpdGNoKGwuc2hhZGluZ1R5cGUpe2Nhc2UgNDpsLl9kZWNvZGVUeXBlNFNoYWRpbmcobSk7YnJlYWs7Y2FzZSA1OnZhciB3PTB8Zi5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYodzwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7bC5fZGVjb2RlVHlwZTVTaGFkaW5nKG0sdyk7YnJlYWs7Y2FzZSA2OmwuX2RlY29kZVR5cGU2U2hhZGluZyhtKSxiPSEwO2JyZWFrO2Nhc2UgNzpsLl9kZWNvZGVUeXBlN1NoYWRpbmcobSksYj0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYoYil7bC5fdXBkYXRlQm91bmRzKCk7Zm9yKHZhciBTPTAseD1sLmZpZ3VyZXMubGVuZ3RoO1M8eDtTKyspbC5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goUyl9cmV0dXJuIGwuX3VwZGF0ZUJvdW5kcygpLGwuX3BhY2tEYXRhKCksbH1yZXR1cm4gdihyLFt7a2V5OiJfZGVjb2RlVHlwZTRTaGFkaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxhPVtdLGk9W10sbz0wO2UuaGFzRGF0YTspe3ZhciBzPWUucmVhZEZsYWcoKSxjPWUucmVhZENvb3JkaW5hdGUoKSx1PWUucmVhZENvbXBvbmVudHMoKTtpZigwPT09byl7aWYoISgwPD1zJiZzPD0yKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNCBmbGFnIik7c3dpdGNoKHMpe2Nhc2UgMDpvPTM7YnJlYWs7Y2FzZSAxOmkucHVzaChpLmF0KC0yKSxpLmF0KC0xKSksbz0xO2JyZWFrO2Nhc2UgMjppLnB1c2goaS5hdCgtMyksaS5hdCgtMSkpLG89MX1hLnB1c2gocyl9aS5wdXNoKHQubGVuZ3RoKSx0LnB1c2goYyksci5wdXNoKHUpLG8tLSxlLmFsaWduKCl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InRyaWFuZ2xlcyIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGkpLGNvbG9yczpuZXcgSW50MzJBcnJheShpKX0pfX0se2tleToiX2RlY29kZVR5cGU1U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxhPVtdO2UuaGFzRGF0YTspe3ZhciBpPWUucmVhZENvb3JkaW5hdGUoKSxvPWUucmVhZENvbXBvbmVudHMoKTthLnB1c2goci5sZW5ndGgpLHIucHVzaChpKSxuLnB1c2gobyl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoYSksdmVydGljZXNQZXJSb3c6dH0pfX0se2tleToiX2RlY29kZVR5cGU2U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzg6MTI7Yzx1O2MrKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtmb3IodmFyIGw9ci5sZW5ndGgsZj0wLGg9MCE9PW8/Mjo0O2Y8aDtmKyspci5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7dmFyIGQ9dm9pZCAwLHA9dm9pZCAwLGc9dm9pZCAwLHY9dm9pZCAwO3N3aXRjaChvKXtjYXNlIDA6YVsxMl09cyszLGFbMTNdPXMrNCxhWzE0XT1zKzUsYVsxNV09cys2LGFbOF09cysyLGFbMTFdPXMrNyxhWzRdPXMrMSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVsxMV09cyszLGFbNF09cCxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbMTFdPXMrMyxhWzRdPXAsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVsxMV09cyszLGFbNF09YVsyXSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9YVs1XT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMF1dWzBdLXRbYVsxNV1dWzBdKzYqKHRbYVs0XV1bMF0rdFthWzFdXVswXSktMioodFthWzEyXV1bMF0rdFthWzNdXVswXSkrMyoodFthWzEzXV1bMF0rdFthWzddXVswXSkpLzksKC00KnRbYVswXV1bMV0tdFthWzE1XV1bMV0rNioodFthWzRdXVsxXSt0W2FbMV1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMTNdXVsxXSt0W2FbN11dWzFdKSkvOV0pLGFbNl09dC5sZW5ndGgsdC5wdXNoKFsoLTQqdFthWzNdXVswXS10W2FbMTJdXVswXSs2Kih0W2FbMl1dWzBdK3RbYVs3XV1bMF0pLTIqKHRbYVswXV1bMF0rdFthWzE1XV1bMF0pKzMqKHRbYVs0XV1bMF0rdFthWzE0XV1bMF0pKS85LCgtNCp0W2FbM11dWzFdLXRbYVsxMl1dWzFdKzYqKHRbYVsyXV1bMV0rdFthWzddXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzRdXVsxXSt0W2FbMTRdXVsxXSkpLzldKSxhWzldPXQubGVuZ3RoLHQucHVzaChbKC00KnRbYVsxMl1dWzBdLXRbYVszXV1bMF0rNioodFthWzhdXVswXSt0W2FbMTNdXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzExXV1bMF0rdFthWzFdXVswXSkpLzksKC00KnRbYVsxMl1dWzFdLXRbYVszXV1bMV0rNioodFthWzhdXVsxXSt0W2FbMTNdXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzExXV1bMV0rdFthWzFdXVsxXSkpLzldKSxhWzEwXT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMTVdXVswXS10W2FbMF1dWzBdKzYqKHRbYVsxMV1dWzBdK3RbYVsxNF1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMl1dWzBdK3RbYVs4XV1bMF0pKS85LCgtNCp0W2FbMTVdXVsxXS10W2FbMF1dWzFdKzYqKHRbYVsxMV1dWzFdK3RbYVsxNF1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMl1dWzFdK3RbYVs4XV1bMV0pKS85XSksdGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2RlY29kZVR5cGU3U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzEyOjE2O2M8dTtjKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Zm9yKHZhciBsPXIubGVuZ3RoLGY9MCxoPTAhPT1vPzI6NDtmPGg7ZisrKXIucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO3ZhciBkPXZvaWQgMCxwPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2gobyl7Y2FzZSAwOmFbMTJdPXMrMyxhWzEzXT1zKzQsYVsxNF09cys1LGFbMTVdPXMrNixhWzhdPXMrMixhWzldPXMrMTMsYVsxMF09cysxNCxhWzExXT1zKzcsYVs0XT1zKzEsYVs1XT1zKzEyLGFbNl09cysxNSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1wLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbOV09cys5LGFbMTBdPXMrMTAsYVsxMV09cyszLGFbNF09cCxhWzVdPXMrOCxhWzZdPXMrMTEsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1hWzJdLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2J1aWxkRmlndXJlRnJvbVBhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpZ3VyZXNbZV07KDAsbi5hc3NlcnQpKCJwYXRjaCI9PT10LnR5cGUsIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmUiKTt2YXIgYT10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLG89dC5jb29yZHMscz10LmNvbG9ycyxjPU1hdGgubWluKGFbb1swXV1bMF0sYVtvWzNdXVswXSxhW29bMTJdXVswXSxhW29bMTVdXVswXSksdT1NYXRoLm1pbihhW29bMF1dWzFdLGFbb1szXV1bMV0sYVtvWzEyXV1bMV0sYVtvWzE1XV1bMV0pLGw9TWF0aC5tYXgoYVtvWzBdXVswXSxhW29bM11dWzBdLGFbb1sxMl1dWzBdLGFbb1sxNV1dWzBdKSxmPU1hdGgubWF4KGFbb1swXV1bMV0sYVtvWzNdXVsxXSxhW29bMTJdXVsxXSxhW29bMTVdXVsxXSksaD1NYXRoLmNlaWwoKGwtYykqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO2g9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGgpKTt2YXIgZD1NYXRoLmNlaWwoKGYtdSkqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGQpKTtmb3IodmFyIHA9aCsxLGc9bmV3IEludDMyQXJyYXkoKGQrMSkqcCksdj1uZXcgSW50MzJBcnJheSgoZCsxKSpwKSx5PTAsbT1uZXcgVWludDhBcnJheSgzKSxiPW5ldyBVaW50OEFycmF5KDMpLHc9aVtzWzBdXSxrPWlbc1sxXV0seD1pW3NbMl1dLE89aVtzWzNdXSxBPVMoZCksQz1TKGgpLEY9MDtGPD1kO0YrKyl7bVswXT0od1swXSooZC1GKSt4WzBdKkYpL2R8MCxtWzFdPSh3WzFdKihkLUYpK3hbMV0qRikvZHwwLG1bMl09KHdbMl0qKGQtRikreFsyXSpGKS9kfDAsYlswXT0oa1swXSooZC1GKStPWzBdKkYpL2R8MCxiWzFdPShrWzFdKihkLUYpK09bMV0qRikvZHwwLGJbMl09KGtbMl0qKGQtRikrT1syXSpGKS9kfDA7Zm9yKHZhciBQPTA7UDw9aDtQKysseSsrKWlmKDAhPT1GJiZGIT09ZHx8MCE9PVAmJlAhPT1oKXtmb3IodmFyIFQ9MCxJPTAsRT0wLGo9MDtqPD0zO2orKylmb3IodmFyIE09MDtNPD0zO00rKyxFKyspe3ZhciBfPUFbRl1bal0qQ1tQXVtNXTtUKz1hW29bRV1dWzBdKl8sSSs9YVtvW0VdXVsxXSpffWdbeV09YS5sZW5ndGgsYS5wdXNoKFtULEldKSx2W3ldPWkubGVuZ3RoO3ZhciBMPW5ldyBVaW50OEFycmF5KDMpO0xbMF09KG1bMF0qKGgtUCkrYlswXSpQKS9ofDAsTFsxXT0obVsxXSooaC1QKStiWzFdKlApL2h8MCxMWzJdPShtWzJdKihoLVApK2JbMl0qUCkvaHwwLGkucHVzaChMKX19Z1swXT1vWzBdLHZbMF09c1swXSxnW2hdPW9bM10sdltoXT1zWzFdLGdbcCpkXT1vWzEyXSx2W3AqZF09c1syXSxnW3AqZCtoXT1vWzE1XSx2W3AqZCtoXT1zWzNdLHRoaXMuZmlndXJlc1tlXT17dHlwZToibGF0dGljZSIsY29vcmRzOmcsY29sb3JzOnYsdmVydGljZXNQZXJSb3c6cH19fSx7a2V5OiJfdXBkYXRlQm91bmRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLHI9ZSxuPXQsYT0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO2E8aTthKyspe3ZhciBvPXRoaXMuY29vcmRzW2FdWzBdLHM9dGhpcy5jb29yZHNbYV1bMV07ZT1lPm8/bzplLHQ9dD5zP3M6dCxyPXI8bz9vOnIsbj1uPHM/czpufXRoaXMuYm91bmRzPVtlLHQscixuXX19LHtrZXk6Il9wYWNrRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixhPXRoaXMuY29vcmRzLGk9bmV3IEZsb2F0MzJBcnJheSgyKmEubGVuZ3RoKTtmb3IoZT0wLHI9MCx0PWEubGVuZ3RoO2U8dDtlKyspe3ZhciBvPWFbZV07aVtyKytdPW9bMF0saVtyKytdPW9bMV19dGhpcy5jb29yZHM9aTt2YXIgcz10aGlzLmNvbG9ycyxjPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAscj0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7dmFyIHU9c1tlXTtjW3IrK109dVswXSxjW3IrK109dVsxXSxjW3IrK109dVsyXX10aGlzLmNvbG9ycz1jO3ZhciBsPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9bC5sZW5ndGg7ZTx0O2UrKyl7dmFyIGY9bFtlXSxoPWYuY29vcmRzLGQ9Zi5jb2xvcnM7Zm9yKHI9MCxuPWgubGVuZ3RoO3I8bjtyKyspaFtyXSo9MixkW3JdKj0zfX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fV0sW3trZXk6Ik1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLDMpfX0se2tleToiTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMjApfX0se2tleToiVFJJQU5HTEVfREVOU0lUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIlRSSUFOR0xFX0RFTlNJVFkiLDIwKX19XSkscn0oYiksTz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bIkR1bW15Il19fV0pLHJ9KGIpfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPXQuYmFzZVdpZHRocyxhPXQuYmFzZU1hcHBpbmcsaT10LmZhY3RvcnM7cj1pP24ubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBlKmlbdF19KSk6bjt2YXIgbyxzLGM9LTIsdT1bXSxsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1oKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oYS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2UsdF19KSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLDEpWzBdLWYodCwxKVswXX0pKSk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgZD1mKHMudmFsdWUsMikscD1kWzBdLHY9ZFsxXTstMSE9PXAmJihwPT09YysxPyhvLnB1c2goclt2XSksYys9MSk6KGM9cCxvPVtyW3ZdXSx1LnB1c2gocCxvKSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdX0oZSkscj1uZXcgYS5EaWN0KG51bGwpO3Iuc2V0KCJCYXNlRm9udCIsYS5OYW1lLmdldChlKSksci5zZXQoIlR5cGUiLGEuTmFtZS5nZXQoIkZvbnQiKSksci5zZXQoIlN1YnR5cGUiLGEuTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKSxyLnNldCgiRW5jb2RpbmciLGEuTmFtZS5nZXQoIklkZW50aXR5LUgiKSksci5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxyLnNldCgiVyIsdCksci5zZXQoIkZpcnN0Q2hhciIsdFswXSksci5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7dmFyIG49bmV3IGEuRGljdChudWxsKTtyLnNldCgiRm9udERlc2NyaXB0b3IiLG4pO3ZhciBpPW5ldyBhLkRpY3QobnVsbCk7cmV0dXJuIGkuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksaS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxpLnNldCgiU3VwcGxlbWVudCIsMCksci5zZXQoIkNJRFN5c3RlbUluZm8iLGkpLHJ9LHQuZ2V0WGZhRm9udE5hbWU9Zzt2YXIgbj1yKDE4MSksYT1yKDEzNCksaT1yKDE4Miksbz1yKDE4Mykscz1yKDE4NCksYz1yKDE4NSksdT1yKDEzNSksbD1yKDE2Nyk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxoKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBwPSgwLHUuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiTXlyaWFkUHJvLVJlZ3VsYXIiXT1lWyJQZGZKUy1GYWxsYmFjay1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6cy5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvUmVndWxhck1ldHJpY3N9LGVbIk15cmlhZFByby1Cb2xkIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnMuTXlyaWFkUHJvQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczpzLk15cmlhZFByb0JvbGRNZXRyaWNzfSxlWyJNeXJpYWRQcm8tSXQiXT1lWyJNeXJpYWRQcm8tSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6cy5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzfSxlWyJNeXJpYWRQcm8tQm9sZEl0Il09ZVsiTXlyaWFkUHJvLUJvbGRJdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6cy5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3N9LGUuQXJpYWxNVD1lLkFyaWFsPWVbIkFyaWFsLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmd9LGVbIkFyaWFsLUJvbGRNVCJdPWVbIkFyaWFsLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmd9LGVbIkFyaWFsLUl0YWxpY01UIl09ZVsiQXJpYWwtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nfSxlWyJBcmlhbC1Cb2xkSXRhbGljTVQiXT1lWyJBcmlhbC1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGJhc2VXaWR0aHM6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nfSxlWyJDYWxpYnJpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpuLkNhbGlicmlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpuLkNhbGlicmlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRNZXRyaWNzfSxlWyJDYWxpYnJpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6bi5DYWxpYnJpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpuLkNhbGlicmlJdGFsaWNNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpuLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpjLlNlZ29ldWlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpjLlNlZ29ldWlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRNZXRyaWNzfSxlWyJTZWdvZXVpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6Yy5TZWdvZXVpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtUmVndWxhciJdPWUuSGVsdmV0aWNhPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmkuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczppLkhlbHZldGljYUl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzfX0pKTtmdW5jdGlvbiBnKGUpe3ZhciB0PSgwLGwubm9ybWFsaXplRm9udE5hbWUpKGUpO3JldHVybiBwKClbdF19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNhbGlicmlSZWd1bGFyTWV0cmljcz10LkNhbGlicmlSZWd1bGFyRmFjdG9ycz10LkNhbGlicmlJdGFsaWNNZXRyaWNzPXQuQ2FsaWJyaUl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZE1ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZEZhY3RvcnM9dm9pZCAwLHQuQ2FsaWJyaUJvbGRGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NDY1NywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzMyOTMsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MTIxLC44Njk0MywuNzk3OTUsLjg4MTk4LC43Nzk1OCwuNzA4NjQsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDE3LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjU0NjU3LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuODg3NjIsLjg3ODUsLjc1MjQxLC44Nzg1LC45MDUxOCwuOTUwMTUsLjc3NjE4LC44Nzg1LC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTE0ODgsLjg3ODUsLjg4MDEsLjg3ODUsLjg3ODUsLjkxMzQzLC43MTczLDEuMDQxMDYsLjg3ODUsLjg1MDc1LC45NTc5NCwuODI2MTYsLjg1MTYyLC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xMjQwMSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MzI5MywuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTEyMSwuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44NTI4NCwuODc1MDgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44NzE1LC43NTI0MSwuOTA1MTgsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44Nzg1LC44ODAxLC44ODAxLC44ODAxLC44ODAxLC44ODAxLC45MDc0NywuODkwNDksLjg3ODUsLjg3ODUsLjg3ODUsLjg3ODUsLjg1MTYyLC44Nzg1LC44NTE2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC44NzI4OSwuODMwMTYsLjg4NTA2LC45MzEyNSwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsMSwxLC44NzM1NiwuODc4NSwuOTEwNzUsLjg5NjA4LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzYyMjksLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc5NDY4LC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTEyMSwuODc4NSwxLDEsLjkxMjEsLjg3ODUsLjg3ODAyLC44ODY1NiwuODc4NSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODc0MDIsLjg5MjkxLC43Nzk1OCwuOTEzNDMsMSwxLC43Nzk1OCwuOTEzNDMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuODg3NjIsLjc3NTM5LC44NzE1LC44NzUwOCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwNjc0LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjA2MzAzLC44MzkwOCwuODAzNTIsLjU3MTg0LC42OTY1LC41NjI4OSwuODIwMDEsLjU2MDI5LC44MTIzNSwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjgxNTYsLjgwMzY3LC43MzEzMywuNzgyNTcsLjg3MzU2LC44Njk0MywuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MTIxLC43NjQ4LC44Njk0MywuODczNTYsLjc5Nzk1LC43ODI3NSwuODEwNTUsLjc3ODkyLC45NzYyLC44MjU3NywuOTk4MTksLjg0ODk2LC45NTk1OCwuNzc4OTIsLjk2MTA4LDEuMDE0MDcsLjg5MDQ5LDEuMDI5ODgsLjk0MjExLC45NjEwOCwuODkzNiwuODQwMjEsLjg3ODQyLC45NjM5OSwuNzkxMDksLjg5MDQ5LDEuMDA4MTMsMS4wMjk4OCwuODYwNzcsLjg3NDQ1LC45MjA5OSwuODQ3MjMsLjg2NTEzLC44ODAxLC43NTYzOCwuODU3MTQsLjc4MjE2LC43OTU4NiwuODc5NjUsLjk0MjExLC45Nzc0NywuNzgyODcsLjk3OTI2LC44NDk3MSwxLjAyOTg4LC45NDIxMSwuODgwMSwuOTQyMTEsLjg0OTcxLC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTAyNjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTE4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDU0OCwxLDEsMSwxLDEsMSwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMTQzLDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTM4MzUsLjgzNDA2LC45MTEzMywuODQxMDcsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwMDYsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSx0LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTYyMzksLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjcxODA1LC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTA4NzIsLjg1OTM4LC43OTc5NSwuODcwNjgsLjc3OTU4LC42OTc2NiwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwNjgsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTI5LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuOTQ5MDgsLjg2NDExLC43NDAxMiwuODY0MTEsLjg4MzIzLC45NTAxNSwuODY0MTEsLjg2MzMxLC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTAzOSwuODYzMzEsLjg2MzMxLC44NjQxMSwuODY0MTEsLjkwNDY0LC43MDg1MiwxLjA0MTA2LC44NjMzMSwuODQzNzIsLjk1Nzk0LC44MjYxNiwuODQ1NDgsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjE5MTI5LC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjcxODA1LC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MDg3MiwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTI4NCwuODcwNjgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC44NTg4NywuNzQwMTIsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuOTA3NDcsLjg5MDQ5LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODQ1NDgsLjg2NDExLC44NDU0OCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC44NzI4OSwuNzk1MzgsLjg4NTA2LC45MjcyNiwuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsMSwxLC44NzM1NiwuODYzMzEsLjkxMDc1LC44Nzc3LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzY0NjcsLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc3MzEyLC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTA4NzIsLjg2MzMxLDEsMSwuOTA4NzIsLjg2MzMxLC44NjkwNiwuODgxMTYsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NzQwMiwuODY1NDksLjc3OTU4LC45MDQ2NCwxLDEsLjc3OTU4LC45MDQ2NCwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuOTQ5MDgsLjc3NTM5LC44NTg4NywuODcwNjgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDA4OCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS40ODM4NywuODM5MDgsLjgwMzUyLC41NzExOCwuNjk2NSwuNTYzNDcsLjc5MTc5LC41NTg1MywuODAzNDYsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY3MTc0LC44NjAzNiwuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY0NDEsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTA4NzIsLjc0ODg5LC44NTkzOCwuODc4OTEsLjc5Nzk1LC43OTU3LC44MTA1NSwuNzc4OTIsLjk3NDQ3LC44MjU3NywuOTc0NjYsLjg3MTc5LC45NTk1OCwuNzc4OTIsLjk0MjUyLC45NTYxMiwuODc1MywxLjAyOTg4LC45MjczMywuOTQyNTIsLjg3NDExLC44NDAyMSwuODcyOCwuOTU2MTIsLjc0MDgxLC44NzUzLDEuMDIxODksMS4wMjk4OCwuODQ4MTQsLjg3NDQ1LC45MTgyMiwuODQ3MjMsLjg1NjY4LC44NjMzMSwuODEzNDQsLjg3NTgxLC43NjQyMiwuODIwNDYsLjk2MDU3LC45MjczMywuOTkzNzUsLjc4MDIyLC45NTQ1MiwuODYwMTUsMS4wMjk4OCwuOTI3MzMsLjg2MzMxLC45MjczMywuODYwMTUsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDYzMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODgzMjMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1MTc0LDEsMSwxLDEsMSwxLC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg5ODA3LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzEwOTQsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45Mjk3MiwuODM0MDYsLjkxMTMzLC44MzMyNiwuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNjE2LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTA3LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzk1NDMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjcyMzQ2LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTI0OSwuODQxMTgsLjc3NDUyLC44NTM3NCwuNzUxODYsLjY3Nzg5LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDMwOSwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zODMxMywxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC45MjQ1LC45MjQ1LC44MzIwMywuOTI0NSwuODU4NjUsMS4wOTg0MiwuOTI0NSwuOTI0NSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk0OTU5LC45MjQ1LC45MjI3NCwuOTI0NSwuOTI0NSwxLjAyOTMzLC43NzgzMiwxLjIwNTYyLC45MjQ1LC44OTE2LC45ODk4NiwuODY2MjEsLjg5NDUzLC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMTYzNTksLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzIzNDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5MjQ5LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg1Mjg0LC44NDU1NywuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODQ4NDMsLjgzMjAzLC44NTg2NSwuODU4NjUsLjg1ODY1LC44NTg2NSwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45MjQ1LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkwNzQ3LC44NjY1MSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODk0NTMsLjkyNDUsLjg5NDUzLC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjg1MTkzLC44ODc1LC44NjQ3NywuOTkwMzQsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LDEsMSwuODYyNzUsLjkyNDUsLjkwODcyLC45MzU5MSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzg5NiwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45Mzc1LC45ODE1NiwuOTM0MDcsLjc3MjYxLDEuMTE0MjksLjg5MjQ5LC45MjQ1LDEsMSwuODkyNDksLjkyNDUsLjkyNTM0LC44NjY5OCwuOTI0NSwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODY2NywuODYyOTEsLjc1MTg2LDEuMDI5MzMsMSwxLC43NTE4NiwxLjAyOTMzLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsMSwxLC43OTc3NiwuOTc2NTUsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjkyNDUsLjc2MzE4LC44NDg0MywuODQ1NTcsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3MDA5LC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44Njc1LC45MDg2MSwuNjE5MiwuNzM2MywuNjQ4MjQsLjgyNDExLC41NjMyMSwuODU2OTYsMS4yMzUxNiwuODY3NSwuODE1NTIsLjcyODYsLjg0MTM0LC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NDM2OSwuOTA2ODUsLjc3ODkyLC44NTg3MSwxLjAyNjM4LC44OTI0OSwuNzU4MjgsLjg0MTE4LC44NTk4NCwuNzc0NTIsLjc2NDY2LC43OTc3NiwuNzMwNiwuOTA3ODIsLjc3ODE4LC45MDMsLjg3MjkxLC45MDY4NSwuNzMwNiwuOTkwNTgsMS4wMzY2NywuOTQ2MzUsMS4yMzUxNiwuOTg0OSwuOTkwNTgsLjkyMzkzLC44OTE2LC45NDIsMS4wMzY2NywuNzUwMjYsLjk0NjM1LDEuMDI5NywxLjIzNTE2LC45MDkxOCwuOTQwNDgsLjk4MjE3LC44OTc0NiwuODQxNTMsLjkyMjc0LC44MjUwNywuODg4MzIsLjg0NDM4LC44ODE3OCwxLjAzNTI1LC45ODQ5LDEuMDAyMjUsLjc4MDg2LC45NzI0OCwuODk0MDQsMS4yMzUxNiwuOTg0OSwuOTIyNzQsLjk4NDksLjg5NDA0LC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2OTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1ODY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDkzMywxLDEsMSwxLDEsMSwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY4OTk0LDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTc4NTgsLjgyNjE2LC45MTEzMywuODM0MzcsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1NzIsMS44MTA1NSwuOTA3NDksMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTI4NCwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5DYWxpYnJpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpUmVndWxhckZhY3RvcnM9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5MDE2LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MzgzNCwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkzODUsLjg1MTIyLC43NzQ1MiwuODY1MDMsLjc1MTg2LC42ODg4NywuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQyNTgsLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzkwMTYsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuODYxMjgsLjk0NDY5LC44NDU3LC45NDQ2OSwuODk0NjQsMS4wOTg0MiwuODQ2MzYsLjk0NDY5LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTU4OTcsLjk0NDY5LC45NDgyLC45NDQ2OSwuOTQ0NjksMS4wNDY5MiwuNzgyMjMsMS4yMDU2MiwuOTQ0NjksLjkwMzMyLC45ODk4NiwuODY2MjEsLjkwNTI3LC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMDg3MDcsLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzM4MzQsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5Mzg1LC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1Mjg0LC44NTMxMSwuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODY5MywuODQ1NywuODk0NjQsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTQ0NjksLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjkwNzQ3LC44NjY1MSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjkwNTI3LC45NDQ2OSwuOTA1MjcsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC44NTE5MywuOTI0NTQsLjg2NDc3LC45OTIxLC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwxLDEsLjg2Mjc1LC45NDQ2OSwuOTA4NzIsLjk1Nzg2LC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3NzQxLDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkwNDUyLC45ODE1NiwxLjExODQyLC43NzI2MSwxLjExNDI5LC44OTM4NSwuOTQ0NjksMSwxLC44OTM4NSwuOTQ0NjksLjk1ODc3LC44NjkwMSwuOTQ0NjksLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg2NjcsLjkwMDE2LC43NTE4NiwxLjA0NjkyLDEsMSwuNzUxODYsMS4wNDY5MiwuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLDEsMSwuNzk3NzYsLjkyMTg4LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC44NjEyOCwuNzYzMTgsLjg2OTMsLjg1MzExLC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42Nzc0MiwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY2ODYsLjkwODYxLC42MjI2NywuNzQzNTksLjY1NjQ5LC44NTQ5OCwuNTY5NjMsLjg4MjU0LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43NTQ0MywuODQ1MDMsLjczMjA2LC43NjY1OSwuODYyNzUsLjg1MTIyLC45MDY4NSwuNzc4OTIsLjg1NzQ2LDEuMDI2MzgsLjg5Mzg1LC43NTY1NywuODUxMjIsLjg2Mjc1LC43NzQ1MiwuNzQxNzEsLjc5Nzc2LC43MzA2LC45NTE2NSwuNzc4MTgsLjg5NzcyLC44ODgzMSwuOTA2ODUsLjczMDYsLjk4MTQyLDEuMDIxOTEsLjk2NTc2LDEuMjM1MTYsLjk5MDE4LC45ODE0MiwuOTIzNiwuODkyNTgsLjk0MDM1LDEuMDIxOTEsLjc4ODQ4LC45NjU3NiwuOTU2MSwxLjIzNTE2LC45MDkxOCwuOTI1NzgsLjk1NDI0LC44OTc0NiwuODM5NjksLjk0ODIsLjgwMTEzLC44OTQ0MiwuODUyMDgsLjg2MTU1LC45ODAyMiwuOTkwMTgsMS4wMDQ1MiwuODEyMDksLjk5MjQ3LC44OTE4MSwxLjIzNTE2LC45OTAxOCwuOTQ4MiwuOTkwMTgsLjg5MTgxLC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODg4NDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NDY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45Njc2NiwxLDEsMSwxLDEsMSwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY5MDQzLDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTkzMzEsLjgyNjE2LC45MTEzMywuODQyODYsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLjA3MTg1LC45OTQxMywuOTYzMzQsMS4wODA2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz10LkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzPXQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz10LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz10LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz12b2lkIDAsdC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDMzNzQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDQyLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMzgyOCwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMzQsLjk5OTc3LDEsLjk5OTk3LDEuMDAwMjYsMS4wMDA3OCwxLjAwMDM2LC45OTk3MywxLjAwMDEzLDEuMDAwNiwuOTk5NzcsLjk5OTc3LC45OTk4OCwuODUxNDgsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LDEuMDAwNjksMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5ODQsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMjQsMS4wMDAwMSwuOTk5OSwxLDEuMDAwNiwxLjAwMDAxLDEuMDAwNDEsLjk5OTYyLDEuMDAwMjYsMS4wMDA2LC45OTk5NSwxLjAwMDQxLC45OTk0MiwuOTk5NzMsLjk5OTI3LDEuMDAwODIsLjk5OTAyLDEuMDAwMjYsMS4wMDA4NywxLjAwMDYsMS4wMDA2OSwuOTk5NzMsLjk5ODY3LC45OTk3MywuOTk5MywxLjAwMDI2LDEuMDAwNDksMS4wMDA1NiwxLC45OTk4OCwuOTk5MzUsLjk5OTk1LC45OTk1NCwxLjAwMDU1LC45OTk0NSwxLjAwMDMyLDEuMDAwNiwuOTk5OTUsMS4wMDAyNiwuOTk5OTUsMS4wMDAzMiwxLjAwMDAxLDEuMDAwMDgsLjk5OTcxLDEuMDAwMTksLjk5OTQsMS4wMDAwMSwxLjAwMDYsMS4wMDA0NCwuOTk5NzMsMS4wMDAyMywxLjAwMDQ3LDEsLjk5OTQyLC45OTU2MSwuOTk5ODksMS4wMDAzNSwuOTk5NzcsMS4wMDAzNSwuOTk5NzcsMS4wMDAxOSwuOTk5NDQsMS4wMDAwMSwxLjAwMDIxLC45OTkyNiwxLjAwMDM1LDEuMDAwMzUsLjk5OTQyLDEuMDAwNDgsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5ODksMS4wMDA1NywxLjAwMDAxLC45OTkzNiwxLjAwMDUyLDEuMDAwMTIsLjk5OTk2LDEuMDAwNDMsMSwxLjAwMDM1LC45OTk0LC45OTk3NiwxLjAwMDM1LC45OTk3MywxLjAwMDUyLDEuMDAwNDEsMS4wMDExOSwxLjAwMDM3LC45OTk3MywxLjAwMDAyLC45OTk4NiwxLjAwMDQxLDEuMDAwNDEsLjk5OTAyLC45OTk2LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsLjk5OTczLDEuMDAwNTIsLjk5OTczLDEsLjk5OTczLDEuMDAwNDEsMS4wMDA3NSwuOTk5NCwxLjAwMDMsLjk5OTk5LDEsMS4wMDA0MSwuOTk5NTUsMSwuOTk5MTUsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAxMTksLjk5OTU1LC45OTk3MywxLjAwMDYsLjk5OTExLDEuMDAwNiwxLjAwMDI2LC45OTk3MiwxLjAwMDI2LC45OTkwMiwxLjAwMDQxLC45OTk3MywuOTk5OTksMSwxLDEuMDAwMzgsMS4wMDA1LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsMS4wMDA0NywxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAwNDQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAxMDExLDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3NywxLDEsMS4wMDAyNiwuOTk5NjksLjk5OTcyLC45OTk4MSwuOTk5OCwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLC45MTE1NSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTY2LDEuMDAwMjIsMS4wMDAzMiwxLjAwMDAxLC45OTk0NCwxLjAwMDI2LDEuMDAwMDEsLjk5OTY4LDEuMDAwMDEsMS4wMDA0NywxLDEuMDAwNiwxLjAwMDAxLC45OTk4MSwxLjAwMTAxLDEuMDAwMjYsMS4wMDA2LC45OTk0OCwuOTk5ODEsMS4wMDA2NCwuOTk5NzMsLjk5OTQyLDEuMDAxMDEsMS4wMDA2MSwxLjAwMDI2LDEuMDAwNjksMS4wMDA2LDEuMDAwMTQsLjk5OTczLDEuMDEzMjIsLjk5OTczLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDEyLC45OTkyMywxLDEuMDAwNjQsMS4wMDA3NiwuOTk5NDgsMS4wMDA1NSwxLjAwMDYzLDEuMDAwMDcsLjk5OTQzLDEuMDAwNiwuOTk5NDgsMS4wMDAyNiwuOTk5NDgsLjk5OTQzLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI5LDEuMDAwMzgsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3OCwxLjAwMDAxLDEuMDAwNTcsLjk5OTg5LC45OTk2NywuOTk5NjQsLjk5OTY3LC45OTk3NywuOTk5OTksLjk5OTc3LDEuMDAwMzgsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwNjYsLjk5OTY3LC45OTk2NywxLjAwMDQxLC45OTk5OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsLjk5OTY3LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTY0LDEuMDAwMzEsMS4wMDAwMSwuOTk5OTksLjk5OTk5LDEsMS4wMDAyMywxLDEsLjk5OTk5LDEuMDAwMzUsMS4wMDAwMSwuOTk5OTksLjk5OTczLC45OTk3NywuOTk5OTksMS4wMDA1OCwuOTk5NzMsLjk5OTczLC45OTk1NSwuOTk5NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTk5ODksMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLC40NTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAwMSwuOTk5OTksLjk5OTgyLC45OTk5NCwuOTk5OTYsMSwxLjAwMDQyLDEuMDAwNDQsMS4wMDAyOSwxLjAwMDIzLC45OTk3MywuOTk5NzMsMS4wMDAyNiwuOTk5NDksMS4wMDAwMiwuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45ODY4NSwuOTk5NzMsMS4wMDAyNiwxLDEsLjk5OTY2LDEuMDAwNDQsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MSwuOTk5NzgsMSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDk4LDEsMSwxLDEuMDAwNDksMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sdC5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wMjg4LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwuOTk5NDYsMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDYzMTEsLjk5OTczLDEuMDAwMjQsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDQxLC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg5NTQ3LDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDU0LC45OTk3NywxLjAwMDg0LDEuMDAwMDcsLjk5OTczLDEuMDAwMTMsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwuOTk5NDUsLjkxMjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTMzLDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMSwxLjAwMDAxLDEuMDAwNTIsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NDUsLjk5ODk3LC45OTk2OCwuOTk5MjQsMS4wMDAzNiwuOTk5NDUsLjk5OTQ5LDEsMS4wMDA2LC45OTg5NywuOTk5MTgsLjk5OTY4LC45OTkxMSwuOTk5MjQsMSwuOTk5NjIsMS4wMTQ4NywxLDEuMDAwNSwuOTk5NzMsMS4wMDAxMiwxLjAwMDQzLDEsLjk5OTk1LC45OTk5NCwxLjAwMDM2LC45OTk0NywxLjAwMDE5LDEuMDAwNjMsMS4wMDAyNSwuOTk5MjQsMS4wMDAzNiwuOTk5NzMsMS4wMDAzNiwxLjAwMDI1LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI3LDEuMDAwMSwxLjAwMDY4LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLDEuMDAwMDgsLjk5OTU3LC45OTk3MiwuOTk5NCwuOTk5NTQsLjk5OTc1LDEuMDAwNTEsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsMS4wMDAxLC45OTk4NiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAzOCwuOTk5NTQsLjk5OTU0LC45OTk0LDEuMDAwNjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NzUsMS4wMDAxLDEuMDAwMDEsLjk5OTkzLC45OTk1LC45OTk1NSwxLjAwMDE2LC45OTk3OCwuOTk5NzQsMS4wMDAxOSwxLjAwMDIyLC45OTk1NSwxLjAwMDUzLC45OTk3MywxLjAwMDg5LDEuMDAwMDUsLjk5OTY3LDEuMDAwNDgsLjk5OTczLDEuMDAwMDIsMS4wMDAzNCwuOTk5NzMsLjk5OTczLC45OTk2NCwxLjAwMDA2LDEuMDAwNjYsLjk5OTQ3LC45OTk3MywuOTg4OTQsLjk5OTczLDEsLjQ0ODk4LDEsLjk5OTQ2LDEsMS4wMDAzOSwxLjAwMDgyLC45OTk5MSwuOTk5OTEsLjk5OTg1LDEuMDAwMjIsMS4wMDAyMywxLjAwMDYxLDEuMDAwMDYsLjk5OTY2LC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwMTksMS4wMDA4LDEsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTgzLDEuMDAwNDQsLjk5OTczLC45OTk2NCwuOTgzMzIsMSwuOTk5NzMsMSwxLC45OTk2MiwuOTk4OTUsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsMS4wMDQyMywuOTk5MjUsLjk5OTk5LDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwNDksMSwxLjAwMjQ1LDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsMS4wMDAwMywxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjA0NTk2LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwxLjAwMDE5LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjAyNTcyLC45OTk3MywxLjAwMDA1LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTk5LC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg0NTMzLDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTkyOCwxLC45OTk3NywxLjAwMDEzLDEuMDAwNTUsLjk5OTQ3LC45OTk0NSwuOTk5NDEsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDQsLjkxNjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDA1LC45OTk5OSwuOTk5NzcsMS4wMDAxNSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDI2LDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLC45OTk0NiwxLDEuMDAwNiwxLjAwMDAxLC45OTk3OCwxLjAwMDQ1LC45OTk3MywuOTk5MjQsMS4wMDAyMywuOTk5NzgsLjk5OTY2LDEsMS4wMDA2NSwxLjAwMDQ1LDEuMDAwMTksLjk5OTczLC45OTk3MywuOTk5MjQsMSwxLC45NjQ5OSwxLDEuMDAwNTUsLjk5OTczLDEuMDAwMDgsMS4wMDAyNywxLC45OTk3LC45OTk5NSwxLjAwMDIzLC45OTkzMywxLjAwMDE5LDEuMDAwMTUsMS4wMDAzMSwuOTk5MjQsMS4wMDAyMywuOTk5NzMsMS4wMDAyMywxLjAwMDMxLDEuMDAwMDEsLjk5OTI4LDEuMDAwMjksMS4wMDA5MiwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLC45OTk4OCwuOTk5NzUsMSwxLjAwMDgyLC45OTU2MSwuOTk5NiwxLjAwMDM1LDEuMDAwMDEsLjk5OTYyLDEuMDAwMDEsMS4wMDA5MiwuOTk5NjQsMS4wMDAwMSwuOTk5NjMsLjk5OTk5LDEuMDAwMzUsMS4wMDAzNSwxLjAwMDgyLC45OTk2MiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2LC45OTk2NywxLjAwMDAxLDEuMDAwMzQsMS4wMDA3NCwxLjAwMDU0LDEuMDAwNTMsMS4wMDA2MywuOTk5NzEsLjk5OTYyLDEuMDAwMzUsLjk5OTc1LC45OTk3NywuOTk5NzMsMS4wMDA0MywuOTk5NTMsMS4wMDA3LC45OTkxNSwuOTk5NzMsMS4wMDAwOCwuOTk4OTIsMS4wMDA3MywxLjAwMDczLDEuMDAxMTQsLjk5OTE1LDEuMDAwNzMsLjk5OTU1LC45OTk3MywxLjAwMDkyLC45OTk3MywxLC45OTk5OCwxLDEuMDAwMywxLDEuMDAwNDMsMS4wMDAwMSwuOTk5NjksMS4wMDAzLDEsMS4wMDAzNSwxLjAwMDAxLC45OTk1LDEsMS4wMDA5MiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDcsLjk5OTUsMSwuOTk5MjQsMS4wMDA2LC45OTkyNCwuOTk5NzIsMS4wMDA2MiwuOTk5NzMsMS4wMDExNCwxLjAwMDczLDEsLjk5OTU1LDEsMSwxLjAwMDQ3LC45OTk2OCwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsLjk5OTI1LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPXQuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZz10LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmc9dm9pZCAwLHQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzE5LDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODUsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzODUsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw0NjUsNzIyLDMzMyw4NTMsOTA2LDQ3NCw4MjUsOTI3LDgzOCwyNzgsNzIyLDcyMiw2MDEsNzE5LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY0NCw3NzgsNzIyLDY2Nyw2MDAsNjExLDY2Nyw4MjEsNjY3LDgwOSw4MDIsMjc4LDY2Nyw2MTUsNDUxLDYxMSwyNzgsNTgyLDYxNSw2MTAsNTU2LDYwNiw0NzUsNDYwLDYxMSw1NDEsMjc4LDU1OCw1NTYsNjEyLDU1Niw0NDUsNjExLDc2Niw2MTksNTIwLDY4NCw0NDYsNTgyLDcxNSw1NzYsNzUzLDg0NSwyNzgsNTgyLDYxMSw1ODIsODQ1LDY2Nyw2NjksODg1LDU2Nyw3MTEsNjY3LDI3OCwyNzYsNTU2LDEwOTQsMTA2Miw4NzUsNjEwLDcyMiw2MjIsNzE5LDcyMiw3MTksNzIyLDU2Nyw3MTIsNjY3LDkwNCw2MjYsNzE5LDcxOSw2MTAsNzAyLDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MjIsODU0LDY2Nyw3MzAsNzAzLDEwMDUsMTAxOSw4NzAsOTc5LDcxOSw3MTEsMTAzMSw3MTksNTU2LDYxOCw2MTUsNDE3LDYzNSw1NTYsNzA5LDQ5Nyw2MTUsNjE1LDUwMCw2MzUsNzQwLDYwNCw2MTEsNjA0LDYxMSw1NTYsNDkwLDU1Niw4NzUsNTU2LDYxNSw1ODEsODMzLDg0NCw3MjksODU0LDYxNSw1NTIsODU0LDU4Myw1NTYsNTU2LDYxMSw0MTcsNTUyLDU1NiwyNzgsMjgxLDI3OCw5NjksOTA2LDYxMSw1MDAsNjE1LDU1Niw2MDQsNzc4LDYxMSw0ODcsNDQ3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDEwOTQsNTU2LDg4NSw0ODksMTExNSwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3NDAsNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4Miw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM5Niw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw3MjIsMzMzLDg1NCw5MDYsNDczLDg0NCw5MzAsODQ3LDI3OCw3MjIsNzIyLDYxMCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjU3LDc3OCw3MTgsNjY3LDU5MCw2MTEsNjY3LDgyMiw2NjcsODI5LDc4MSwyNzgsNjY3LDYyMCw0NzksNjExLDI3OCw1OTEsNjIwLDYyMSw1NTYsNjEwLDQ3OSw0OTIsNjExLDU1OCwyNzgsNTY2LDU1Niw2MDMsNTU2LDQ1MCw2MTEsNzEyLDYwNSw1MzIsNjY0LDQwOSw1OTEsNzA0LDU3OCw3NzMsODM0LDI3OCw1OTEsNjExLDU5MSw4MzQsNjY3LDY2Nyw4ODYsNjE0LDcxOSw2NjcsMjc4LDI3OCw1NTYsMTA5NCwxMDQyLDg1NCw2MjIsNzE5LDY3Nyw3MTksNzIyLDcwOCw3MjIsNjE0LDcyMiw2NjcsOTI3LDY0Myw3MTksNzE5LDYxNSw2ODcsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDY3Nyw3ODEsNjY3LDcyOSw3MDgsOTc5LDk4OSw4NTQsMWUzLDcwOCw3MTksMTA0Miw3MjksNTU2LDYxOSw2MDQsNTM0LDYxOCw1NTYsNzM2LDUxMCw2MTEsNjExLDUwNyw2MjIsNzQwLDYwNCw2MTEsNjExLDYxMSw1NTYsODg5LDU1Niw4ODUsNTU2LDY0Niw1ODMsODg5LDkzNSw3MDcsODU0LDU5NCw1NTIsODY1LDU4OSw1NTYsNTU2LDYxMSw0NjksNTYzLDU1NiwyNzgsMjc4LDI3OCw5NjksOTA2LDYxMSw1MDcsNjE5LDU1Niw2MTEsNzc4LDYxMSw1NzUsNDY3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDExMDQsNTU2LDg4NSw1MTYsMTE0NiwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsOTk5LDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MjUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczMyw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI4MSw1NTYsNDAwLDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjE1LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM1NCw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4OSw4NDYsMzg5LDc5NCw4NjUsNzc1LDIyMiw2NjcsNjY3LDU3MCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY3LDgzMyw3MjIsNjQ4LDc3OCw3MjUsNjY3LDYwMCw2MTEsNjY3LDgzNyw2NjcsODMxLDc2MSwyNzgsNjY3LDU3MCw0MzksNTU1LDIyMiw1NTAsNTcwLDU3MSw1MDAsNTU2LDQzOSw0NjMsNTU1LDU0MiwyMjIsNTAwLDQ5Miw1NDgsNTAwLDQ0Nyw1NTYsNjcwLDU3Myw0ODYsNjAzLDM3NCw1NTAsNjUyLDU0Niw3MjgsNzc5LDIyMiw1NTAsNTU2LDU1MCw3NzksNjY3LDY2Nyw4NDMsNTQ0LDcwOCw2NjcsMjc4LDI3OCw1MDAsMTA2Niw5ODIsODQ0LDU4OSw3MTUsNjM5LDcyNCw2NjcsNjUxLDY2Nyw1NDQsNzA0LDY2Nyw5MTcsNjE0LDcxNSw3MTUsNTg5LDY4Niw4MzMsNzIyLDc3OCw3MjUsNjY3LDcyMiw2MTEsNjM5LDc5NSw2NjcsNzI3LDY3Myw5MjAsOTIzLDgwNSw4ODYsNjUxLDY5NCwxMDIyLDY4Miw1NTYsNTYyLDUyMiw0OTMsNTUzLDU1Niw2ODgsNDY1LDU1Niw1NTYsNDcyLDU2NCw2ODYsNTUwLDU1Niw1NTYsNTU2LDUwMCw4MzMsNTAwLDgzNSw1MDAsNTcyLDUxOCw4MzAsODUxLDYyMSw3MzYsNTI2LDQ5Miw3NTIsNTM0LDU1Niw1NTYsNTU2LDM3OCw0OTYsNTAwLDIyMiwyMjIsMjIyLDkxMCw4MjgsNTU2LDQ3Miw1NjUsNTAwLDU1Niw3NzgsNTU2LDQ5MiwzMzksOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDgzLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDk5OCw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTg0LDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYxNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzM1LDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjkyLDU1NiwzMzQsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MDQsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzc1LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg0LDgzOCwzODQsNzc0LDg1NSw3NTIsMjIyLDY2Nyw2NjcsNTUxLDY2OCw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjgsODMzLDcyMiw2NTAsNzc4LDcyMiw2NjcsNjE4LDYxMSw2NjcsNzk4LDY2Nyw4MzUsNzQ4LDI3OCw2NjcsNTc4LDQ0Niw1NTYsMjIyLDU0Nyw1NzgsNTc1LDUwMCw1NTcsNDQ2LDQ0MSw1NTYsNTU2LDIyMiw1MDAsNTAwLDU3Niw1MDAsNDQ4LDU1Niw2OTAsNTY5LDQ4Miw2MTcsMzk1LDU0Nyw2NDgsNTI1LDcxMyw3ODEsMjIyLDU0Nyw1NTYsNTQ3LDc4MSw2NjcsNjY3LDg2NSw1NDIsNzE5LDY2NywyNzgsMjc4LDUwMCwxMDU3LDEwMTAsODU0LDU4Myw3MjIsNjM1LDcxOSw2NjcsNjU2LDY2Nyw1NDIsNjc3LDY2Nyw5MjMsNjA0LDcxOSw3MTksNTgzLDY1Niw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjM1LDc2MCw2NjcsNzQwLDY2Nyw5MTcsOTM4LDc5Miw4ODUsNjU2LDcxOSwxMDEwLDcyMiw1NTYsNTczLDUzMSwzNjUsNTgzLDU1Niw2NjksNDU4LDU1OSw1NTksNDM4LDU4Myw2ODgsNTUyLDU1Niw1NDIsNTU2LDUwMCw0NTgsNTAwLDgyMyw1MDAsNTczLDUyMSw4MDIsODIzLDYyNSw3MTksNTIxLDUxMCw3NTAsNTQyLDU1Niw1NTYsNTU2LDM2NSw1MTAsNTAwLDIyMiwyNzgsMjIyLDkwNiw4MTIsNTU2LDQzOCw1NTksNTAwLDU1Miw3NzgsNTU2LDQ4OSw0MTEsOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDczLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcz10Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPXQuTXlyaWFkUHJvSXRhbGljTWV0cmljcz10Lk15cmlhZFByb0l0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkTWV0cmljcz10Lk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz12b2lkIDAsdC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjcyNzA2LC44MDQ3OSwuODM3MzQsLjk4ODk0LC45OTc5MywuOTg5NywuOTM4ODQsLjg2MjA5LC45NDI5MiwuOTQyOTIsMS4xNjY2MSwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTkxMzcsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcyODUxLC43ODk2NiwuOTA4MzgsLjgzNjM3LC44MjM5MSwuOTYzNzYsLjgwMDYxLC44NjI3NSwuODc2OCwuOTU0MDcsMS4wMjU4LC43MzkwMSwuODUwMjIsLjgzNjU1LDEuMDE1NiwuOTU1NDYsLjkyMTc5LC44NzEwNywuOTIxNzksLjgyMTE0LC44MDk2LC44OTcxMywuOTQ0MzgsLjk1MzUzLC45NDA4MywuOTE5MDUsLjkwNDA2LC45NDQ2LC45NDI5MiwxLjE4Nzc3LC45NDI5MiwxLjAyMDU4LC44OTkwMywuOTAwODgsLjk0OTM4LC45Nzg5OCwuODEwOTMsLjk3NTcxLC45NDkzOCwxLjAyNCwuOTU3NywuOTU5MzMsLjk4NjIxLDEuMDQ3NCwuOTc0NTUsLjk4OTgxLC45NjcyLC45NTkzMywuOTQ0NiwuOTc4OTgsLjk3NDA3LC45NzY0NiwuNzgwMzYsMS4xMDIwOCwuOTU0NDIsLjk1Mjk4LC45NzU3OSwuOTMzMiwuOTQwMzksLjkzOCwuODA2ODcsMS4wMTE0OSwuODA2ODcsMS4wMjA1OCwuODA0NzksLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLDEuMDExNDksMS4wMDg3MiwuOTAwODgsLjkxODgyLDEuMDIxMywuODM2MSwxLjAyMDU4LC42MjI5NSwuNTQzMjQsLjg5MDIyLDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NzQ1NSwuOTM1ODIsLjkwMDg4LDEsMS4wNTY4NiwuODM2MSwuOTk2NDIsLjk5NjQyLC45OTY0MiwuNzI4NTEsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjg2OCwuODIzOTEsLjgwMDYxLC44MDA2MSwuODAwNjEsLjgwMDYxLDEuMDI1OCwxLjAyNTgsMS4wMjU4LDEuMDI1OCwuOTc0ODQsLjk1NTQ2LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksMS4wMjA1OCwuOTIxNzksLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45MDQwNiwuODY5NTgsLjk4MjI1LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45MDMxLC44MTA5MywuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45Mzk2OSwuOTU5MzMsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsMS4wODU5NSwuOTQ0NiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk0MDM5LC45Nzg5OCwuOTQwMzksLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuOTYzNzYsLjg0MzEzLC45NzQ4NCwuOTc1NzEsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44NzY4LC45NTc3LC44NzY4LC45NTc3LC44NzY4LC45NTc3LDEsMSwuOTU0MDcsLjk1OTMzLC45NzA2OSwuOTU5MzMsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLC44ODcsMS4wMTU5MSwuNzM5MDEsMS4wNDc0LDEsMSwuOTc0NTUsLjgzNjU1LC45ODk4MSwxLDEsLjgzNjU1LC43Mzk3NywuODM2NTUsLjczOTAzLC44NDYzOCwxLjAzMywuOTU1NDYsLjk1OTMzLDEsMSwuOTU1NDYsLjk1OTMzLC44MjcxLC45NTQxNywuOTU5MzMsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkzNiwuOTE5NjQsLjgyMTE0LC45NzY0NiwxLDEsLjgyMTE0LC45NzY0NiwuODA5NiwuNzgwMzYsLjgwOTYsLjc4MDM2LDEsMSwuODA5NiwuNzgwMzYsMSwxLC44OTcxMywuNzc0NTIsLjg5NzEzLDEuMTAyMDgsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45MDQwNiwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwxLC45OTc5MywuOTA4MzgsLjk0OTM4LC44NjgsLjkwMzEsLjkyMTc5LC45NDQ2LDEsMSwuODk3MTMsMS4xMDIwOCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTA5ODksLjkzNTgsLjkxOTQ1LC44MzE4MSwuNzUyNjEsLjg3OTkyLC44Mjk3NiwuOTYwMzQsLjgzNjg5LC45NzI2OCwxLjAwNzgsLjkwODM4LC44MzYzNywuODAxOSwuOTAxNTcsLjgwMDYxLC45NDQ2LC45NTQwNywuOTI0MzYsMS4wMjU4LC44NTAyMiwuOTcxNTMsMS4wMTU2LC45NTU0NiwuODkxOTIsLjkyMTc5LC45MjM2MSwuODcxMDcsLjk2MzE4LC44OTcxMywuOTM3MDQsLjk1NjM4LC45MTkwNSwuOTE3MDksLjkyNzk2LDEuMDI1OCwuOTM3MDQsLjk0ODM2LDEuMDM3MywuOTU5MzMsMS4wMDc4LC45NTg3MSwuOTQ4MzYsLjk2MTc0LC45MjYwMSwuOTQ5OCwuOTg2MDcsLjk1Nzc2LC45NTkzMywxLjA1NDUzLDEuMDA3OCwuOTgyNzUsLjkzMTQsLjk1NjE3LC45MTcwMSwxLjA1OTkzLC45NDQ2LC43ODM2NywuOTU1MywxLC44NjgzMiwxLjAxMjgsLjk1ODcxLC45OTM5NCwuODc1NDgsLjk2MzYxLC44Njc3NCwxLjAwNzgsLjk1ODcxLC45NDQ2LC45NTg3MSwuODY3NzQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTM1ODIsLjkzNTgyLC45MzU4MiwxLC45MDgsLjkwOCwuOTE4LC45NDIxOSwuOTQyMTksLjk2NTQ0LDEsMS4yODUsMSwxLC44MTA3OSwuODEwNzksMSwxLC43NDg1NCwxLDEsMSwxLC45OTc5MywxLDEsMSwuNjUsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE3MTczLDEsLjgwNTM1LC43NjE2OSwxLjAyMDU4LDEuMDczMiwxLjA1NDg2LDEsMSwxLjMwNjkyLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTYxNjEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9Cb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sdC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY2MjI3LC44MDc3OSwuODE2MjUsLjk3Mjc2LC45NzI3NiwuOTc3MzMsLjkyMjIyLC44MzI2NiwuOTQyOTIsLjk0MjkyLDEuMTYxNDgsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE3MzM3LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MTU0MSwuNzY4MTMsLjg1NTc2LC44MDU5MSwuODA3MjksLjk0Mjk5LC43NzUxMiwuODM2NTUsLjg2NTIzLC45MjIyMiwuOTg2MjEsLjcxNzQzLC44MTY5OCwuNzk3MjYsLjk4NTU4LC45MjIyMiwuOTA2MzcsLjgzODA5LC45MDYzNywuODA3MjksLjc2NDYzLC44NjI3NSwuOTA2OTksLjkxNjA1LC45MTU0LC44NTMwOCwuODU0NTgsLjkwNTMxLC45NDI5MiwxLjIxMjk2LC45NDI5MiwxLjAyMDU4LC44OTkwMywxLjE4NjE2LC45OTYxMywuOTE2NzcsLjc4MjE2LC45MTY3NywuOTAwODMsLjk4Nzk2LC45MTM1LC45MjE2OCwuOTUzODEsLjk4OTgxLC45NTI5OCwuOTUzODEsLjkzNDU5LC45MjE2OCwuOTE1MTMsLjkyMDA0LC45MTY3NywuOTUwNzcsLjc0OCwxLjA0NTAyLC45MTY3NywuOTIwNjEsLjk0MjM2LC44OTU0NCwuODkzNjQsLjksLjgwNjg3LC44NTc4LC44MDY4NywxLjAyMDU4LC44MDc3OSwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjg1NzgsLjk5OTczLDEuMTg2MTYsLjkxMzM5LDEuMDgwNzQsLjgyODkxLDEuMDIwNTgsLjU1NTA5LC43MTUyNiwuODkwMjIsMS4wODU5NSwxLDEsMS4xODYxNiwxLC45NjczNiwuOTM1ODIsMS4xODYxNiwxLDEuMDQ4NjQsLjgyNzExLC45OTA0MywuOTkwNDMsLjk5MDQzLC43MTU0MSwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODQ1LC44MDcyOSwuNzc1MTIsLjc3NTEyLC43NzUxMiwuNzc1MTIsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45NTk2MSwuOTIyMjIsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywxLjAyMDU4LC45MDI1MSwuOTA2OTksLjkwNjk5LC45MDY5OSwuOTA2OTksLjg1NDU4LC44MzY1OSwuOTQ5NTEsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjg1ODExLC43ODIxNiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjk1MzgxLC45NTM4MSwuOTUzODEsLjk1MzgxLC45MTM1LC45MjE2OCwuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLDEuMDg1OTUsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuODkzNjQsLjkyMzMyLC44OTM2NCwuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC45NDI5OSwuNzY3ODMsLjk1OTYxLC45MTY3NywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsMSwxLC45MjIyMiwuOTIxNjgsLjkyMjIyLC45MjE2OCwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjg2MDM2LC45NzA5NiwuNzE3NDMsLjk4OTgxLDEsMSwuOTUyOTgsLjc5NzI2LC45NTM4MSwxLDEsLjc5NzI2LC42ODk0LC43OTcyNiwuNzQzMjEsLjgxNjkxLDEuMDAwNiwuOTIyMjIsLjkyMTY4LDEsMSwuOTIyMjIsLjkyMTY4LC43OTQ2NCwuOTIwOTgsLjkyMTY4LC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDksLjg3NTE0LC44MDcyOSwuOTUwNzcsMSwxLC44MDcyOSwuOTUwNzcsLjc2NDYzLC43NDgsLjc2NDYzLC43NDgsMSwxLC43NjQ2MywuNzQ4LDEsMSwuODYyNzUsLjcyNjUxLC44NjI3NSwxLjA0NTAyLC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC44NTQ1OCwuOTA1MzEsLjksLjkwNTMxLC45LC45MDUzMSwuOSwxLC45NzI3NiwuODU1NzYsLjk5NjEzLC44NDUsLjg1ODExLC45MDI1MSwuOTE2NzcsMSwxLC44NjI3NSwxLjA0NTAyLDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMDA4OTksMS4zMDYyOCwuODU1NzYsLjgwMTc4LC42Njg2MiwuNzkyNywuNjkzMjMsLjg4MTI3LC43MjQ1OSwuODk3MTEsLjk1MzgxLC44NTU3NiwuODA1OTEsLjc4MDUsLjk0NzI5LC43NzUxMiwuOTA1MzEsLjkyMjIyLC45MDYzNywuOTg2MjEsLjgxNjk4LC45MjY1NSwuOTg1NTgsLjkyMjIyLC44NTM1OSwuOTA2MzcsLjkwOTc2LC44MzgwOSwuOTQ1MjMsLjg2Mjc1LC44MzUwOSwuOTMxNTcsLjg1MzA4LC44MzM5MiwuOTIzNDYsLjk4NjIxLC44MzUwOSwuOTI4ODYsLjkxMzI0LC45MjE2OCwuOTUzODEsLjkwNjQ2LC45Mjg4NiwuOTA1NTcsLjg2ODQ3LC45MDI3NiwuOTEzMjQsLjg2ODQyLC45MjE2OCwuOTk1MzEsLjk1MzgxLC45MjI0LC44NTQwOCwuOTI2OTksLjg2ODQ3LDEuMDA1MSwuOTE1MTMsLjgwNDg3LC45MzQ4MSwxLC44ODE1OSwxLjA1MjE0LC45MDY0NiwuOTczNTUsLjgxNTM5LC44OTM5OCwuODU5MjMsLjk1MzgxLC45MDY0NiwuOTE1MTMsLjkwNjQ2LC44NTkyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MTc4MiwuOTE3ODIsLjkxNzgyLDEsLjg5NiwuODk2LC44OTYsLjkzMzIsLjkzMzIsLjk1OTczLDEsMS4yNiwxLDEsLjgwNDc5LC44MDE3OCwxLDEsLjg1NjMzLDEsMSwxLDEsLjk3Mjc2LDEsMSwxLC42OTgsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE0NTQyLDEsLjc5MTk5LC43ODY5NCwxLjAyMDU4LDEuMDM0OTMsMS4wNTQ4NiwxLDEsMS4yMzAyNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjIwMDA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY1NTA3LC44NDk0MywuODU2MzksLjg4NDY1LC44ODQ2NSwuODY5MzYsLjg4MzA3LC44Njk0OCwuODUyODMsLjg1MjgzLDEuMDYzODMsMS4wMjA1OCwuNzU5NDUsLjkyMTksLjc1OTQ1LDEuMTczMzcsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC43NTk0NSwuNzU5NDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjY5MDQ2LC43MDkyNiwuODUxNTgsLjc3ODEyLC43Njg1MiwuODk1OTEsLjcwNDY2LC43NjEyNSwuODAwOTQsLjg2ODIyLC44Mzg2NCwuNzI4LC43NzIxMiwuNzk0NzUsLjkzNjM3LC44NzUxNCwuODU4OCwuNzYwMTMsLjg1ODgsLjcyNDIxLC42OTg2NiwuNzc1OTgsLjg1OTkxLC44MDgxMSwuODc4MzIsLjc4MTEyLC43NzUxMiwuODU2MiwxLjAyMjIsMS4xODQxNywxLjAyMjIsMS4yNzAxNCwuODk5MDMsMS4xNTAxMiwuOTM4NTksLjk0Mzk5LC44NDYsLjk0Mzk5LC44MTQ1MywxLjAxODYsLjk0MjE5LC45NjAxNywxLjAzMDc1LDEuMDIxNzUsLjkxMiwxLjAzMDc1LC45Njk5OCwuOTYwMTcsLjkzODU5LC45NDM5OSwuOTQzOTksLjk1NDkzLC43NDYsMS4xMjY1OCwuOTQ1NzgsLjkxLC45NzksLjg4MiwuODgyLC44MywuODUwMzQsLjgzNTM3LC44NTAzNCwxLjAyMDU4LC43MDg2OSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjgzNTM3LC45MDA4MywxLjE1MDEyLC45MTYxLC45NDU2NSwuNzM1NDEsMS4wMjA1OCwuNTM2MDksLjY5MzUzLC43OTUxOSwxLjA4NTk1LDEsMSwxLjE1MDEyLDEsLjkxOTc0LC43NTk0NSwxLjE1MDEyLDEsLjk0NDYsLjczMzYxLC45MDA1LC45MDA1LC45MDA1LC42Mjg2NCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuNzczLC43Njg1MiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjgzODY0LC44Mzg2NCwuODM4NjQsLjgzODY0LC45MDU2MSwuODc1MTQsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsMS4wMjA1OCwuODU3NTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjg1OTkxLC43NzUxMiwuNzYwMTMsLjg4MDc1LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC44MDc1LC44NDYsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgxNDUzLC44MjQyNCwuODI0MjQsLjgyNDI0LC44MjQyNCwuOTI3OCwuOTYwMTcsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwxLjA4NTk1LC44NTYyLC45NDU3OCwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuODgyLC45NDU3OCwuODgyLC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC44OTU5MSwuODU0NCwuOTA1NjEsLjk0Mzk5LC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwxLDEsLjg2ODIyLC45NjAxNywuODY4MjIsLjk2MDE3LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwxLjAzMDc1LC44Mzg2NCwuODI0MjQsLjgxNDAyLDEuMDI3MzgsLjcyOCwxLjAyMTc1LDEsMSwuOTEyLC43OTQ3NSwxLjAzMDc1LDEsMSwuNzk0NzUsLjgzOTExLC43OTQ3NSwuNjYyNjYsLjgwNTUzLDEuMDY2NzYsLjg3NTE0LC45NjAxNywxLDEsLjg3NTE0LC45NjAxNywuODY4NjUsLjg3Mzk2LC45NjAxNywuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODY3LC44NDc1OSwuNzI0MjEsLjk1NDkzLDEsMSwuNzI0MjEsLjk1NDkzLC42OTg2NiwuNzQ2LC42OTg2NiwuNzQ2LDEsMSwuNjk4NjYsLjc0NiwxLDEsLjc3NTk4LC44ODQxNywuNzc1OTgsMS4xMjY1OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuNzc1MTIsLjg1NjIsLjgzLC44NTYyLC44MywuODU2MiwuODMsMSwuODg0NjUsLjg1MTU4LC45Mzg1OSwuNzczLC44MDc1LC44NTc1MSwuODU2MiwxLDEsLjc3NTk4LDEuMTI2NTgsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUzMTMsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4wODEwNiwxLjAzOTAxLC44NTE1OCwuNzcwMjUsLjYyMjY0LC43NjQ2LC42NTM1MSwuODYwMjYsLjY5NDYxLC44OTk0NywxLjAzMDc1LC44NTE1OCwuNzc4MTIsLjc2NDQ5LC44ODgzNiwuNzA0NjYsLjg1NjIsLjg2ODIyLC44NTg4LC44Mzg2NCwuNzcyMTIsLjg1MzA4LC45MzYzNywuODc1MTQsLjgyMzUyLC44NTg4LC44NTcwMSwuNzYwMTMsLjg5MDU4LC43NzU5OCwuODE1NiwuODI1NjUsLjc4MTEyLC43Nzg5OSwuODkzODYsLjgzODY0LC44MTU2LC45NDg2LC45MjM4OCwuOTYxODYsMS4wMzA3NSwuOTExMjMsLjk0ODYsLjkzMjk4LC44NzgsLjkzOTQyLC45MjM4OCwuODQ1OTYsLjk2MTg2LC45NTExOSwxLjAzMDc1LC45MjIsLjg4Nzg3LC45NTgyOSwuODgsLjkzNTU5LC45Mzg1OSwuNzg4MTUsLjkzNzU4LDEsLjg5MjE3LDEuMDM3MzcsLjkxMTIzLC45Mzk2OSwuNzc0ODcsLjg1NzY5LC44Njc5OSwxLjAzMDc1LC45MTEyMywuOTM4NTksLjkxMTIzLC44Njc5OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC44NzMyMSwuODczMjEsLjg3MzIxLDEsMS4wMjcsMS4wMjcsMS4wMjcsLjg2ODQ3LC44Njg0NywuNzkxMjEsMSwxLjEyNCwxLDEsLjczNTcyLC43MzU3MiwxLDEsLjg1MDM0LDEsMSwxLDEsLjg4NDY1LDEsMSwxLC42NjksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0ODI4LDEsLjc0OTQ4LC43NTE4NywxLjAyMDU4LC45ODM5MSwxLjAyMTE5LDEsMSwxLjA2MjMzLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDUyMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzYzMDUsLjgyNzg0LC45NDkzNSwuODkzNjQsLjkyMjQxLC44OTA3MywuOTA3MDYsLjk4NDcyLC44NTI4MywuODUyODMsMS4wNjY0LDEuMDIwNTgsLjc0NTA1LC45MjE5LC43NDUwNSwxLjIzNDU2LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuNzQ1MDUsLjc0NTA1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MzAwMiwuNzI2MDEsLjkxNzU1LC44MTI2LC44MDMxNCwuOTIyMjIsLjczNzY0LC43OTcyNiwuODMwNTEsLjkwMjg0LC44NjAyMywuNzQsLjgxMjYsLjg0ODY5LC45NjUxOCwuOTExMTUsLjg4NTgsLjc5NzYxLC44ODU4LC43NDQ5OCwuNzM5MTQsLjgxMzYzLC44OTU5MSwuODM2NTksLjg5NjMzLC44NTYwOCwuODExMSwuOTA1MzEsMS4wMjIyLDEuMjI3MzYsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLC45MDA4OCwuODY2NjcsMS4wMjMxLC44OTYsMS4wMTQxMSwuOTAwODMsMS4wNTA5OSwxLjAwNTEyLC45OTc5MywxLjA1MzI2LDEuMDkzNzcsLjkzOCwxLjA2MjI2LDEuMDAxMTksLjk5NzkzLC45ODcxNCwxLjAyMzEsMS4wMTIzMSwuOTgxOTYsLjc5MiwxLjE5MTM3LC45OTA3NCwuOTYyLDEuMDE5MTUsLjkyNiwuOTQyLC44NTYsLjg1MDM0LC45MjAwNiwuODUwMzQsMS4wMjA1OCwuNjkwNjcsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjAwNiwuOTMzMiwuOTAwODgsLjkxODgyLC45MzQ4NCwuNzUzMzksMS4wMjA1OCwuNTY4NjYsLjU0MzI0LC43OTUxOSwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTUzMjUsLjc0NTA1LC45MDA4OCwxLC45NzE5OCwuNzUzMzksLjkxMDA5LC45MTAwOSwuOTEwMDksLjY2NDY2LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC43ODgsLjgwMzE0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuODYwMjMsLjg2MDIzLC44NjAyMywuODYwMjMsLjkyOTE1LC45MTExNSwuODg1OCwuODg1OCwuODg1OCwuODg1OCwuODg1OCwxLjAyMDU4LC44ODU4LC44OTU5MSwuODk1OTEsLjg5NTkxLC44OTU5MSwuODExMSwuNzk2MTEsLjg5NzEzLC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjkzNiwuODk2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuODQyMjQsLjg0MjI0LC44NDIyNCwuODQyMjQsLjk3Mjc2LC45OTc5MywuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LDEuMDg1OTUsLjg5ODc2LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTQyLDEuMDIzMSwuOTQyLC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC45MjIyMiwuOTMzNzIsLjkyOTE1LDEuMDE0MTEsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLDEsMSwuOTAyODQsLjk5NzkzLC45MDk3NiwuOTk3OTMsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLDEuMDUzMjYsLjg2MDIzLC44NDIyNCwuODI4NzMsMS4wNzQ2OSwuNzQsMS4wOTM3NywxLDEsLjkzOCwuODQ4NjksMS4wNjIyNiwxLDEsLjg0ODY5LC44MzcwNCwuODQ4NjksLjgxNDQxLC44NTU4OCwxLjA4OTI3LC45MTExNSwuOTk3OTMsMSwxLC45MTExNSwuOTk3OTMsLjkxODg3LC45MDk5MSwuOTk3OTMsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg5NCwuOTE0MzQsLjc0NDk4LC45ODE5NiwxLDEsLjc0NDk4LC45ODE5NiwuNzM5MTQsLjc5MiwuNzM5MTQsLjc5MiwxLDEsLjczOTE0LC43OTIsMSwxLC44MTM2MywuOTA0LC44MTM2MywxLjE5MTM3LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjgxMTEsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsMSwuOTIyNDEsLjkxNzU1LC44NjY2NywuNzg4LC44NjkzNiwuODg1OCwuODk4NzYsMSwxLC44MTM2MywxLjE5MTM3LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDM4OCwxLjAzOTAxLC45MjEzOCwuNzgxMDUsLjcxNTQsLjg2MTY5LC44MDUxMywuOTQwMDcsLjgyNTI4LC45ODYxMiwxLjA2MjI2LC45MTc1NSwuODEyNiwuODE4ODQsLjkyODE5LC43Mzc2NCwuOTA1MzEsLjkwMjg0LC44ODU4LC44NjAyMywuODEyNiwuOTExNzIsLjk2NTE4LC45MTExNSwuODMwODksLjg4NTgsLjg3NzkxLC43OTc2MSwuODkyOTcsLjgxMzYzLC44ODE1NywuODk5OTIsLjg1NjA4LC44MTk5MiwuOTQzMDcsLjg2MDIzLC44ODE1NywuOTUzMDgsLjk4Njk5LC45OTc5MywxLjA2MjI2LC45NTgxNywuOTUzMDgsLjk3MzU4LC45MjgsLjk4MDg4LC45ODY5OSwuOTI3NjEsLjk5NzkzLC45NjAxNywxLjA2MjI2LC45ODYsLjk0NCwuOTU5NzgsLjkzOCwuOTY3MDUsLjk4NzE0LC44MDQ0MiwuOTg5NzIsMSwuODk3NjIsMS4wNDU1MiwuOTU4MTcsLjk5MDA3LC44NzA2NCwuOTE4NzksLjg4ODg4LDEuMDYyMjYsLjk1ODE3LC45ODcxNCwuOTU4MTcsLjg4ODg4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuOTMxNzMsLjkzMTczLC45MzE3MywxLDEuMDYzMDQsMS4wNjMwNCwxLjA2OTA0LC44OTkwMywuODk5MDMsLjgwNTQ5LDEsMS4xNTYsMSwxLC43NjU3NSwuNzY1NzUsMSwxLC43MjQ1OCwxLDEsMSwxLC45MjI0MSwxLDEsMSwuNjE5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNzI1NywxLC43NDcwNSwuNzExMTksMS4wMjA1OCwxLjAyNCwxLjAyMTE5LDEsMSwxLjE1MzYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTYzOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZWdvZXVpUmVndWxhck1ldHJpY3M9dC5TZWdvZXVpUmVndWxhckZhY3RvcnM9dC5TZWdvZXVpSXRhbGljTWV0cmljcz10LlNlZ29ldWlJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRGYWN0b3JzPXZvaWQgMCx0LlNlZ29ldWlCb2xkRmFjdG9ycz1bMS43NjczOCwxLDEsLjk5Mjk3LC45ODI0LDEuMDQwMTYsMS4wNjQ5NywxLjAzNDI0LC45NzUyOSwxLjE3NjQ3LDEuMjMyMDMsMS4xMDg1LDEuMTA4NSwxLjE2OTM5LDEuMjEwNywuOTc1NCwxLjIxNDA4LC45NzU0LDEuNTk1NzgsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwuODEzNzgsLjgxMzc4LDEuMjEwNywxLjIxMDcsMS4yMTA3LC43MTcwMywuOTc4NDcsLjk3MzYzLC44ODc3NiwuODY0MSwxLjAyMDk2LC43OTc5NSwuODUxMzIsLjkxNCwxLjA2MDg1LDEuMTQwNiwuODAwNywuODk4NTgsLjgzNjkzLDEuMTQ4ODksMS4wOTM5OCwuOTc0ODksLjkyMDk0LC45NzQ4OSwuOTAzOTksLjg0MDQxLC45NTkyMywxLjAwMTM1LDEsMS4wNjQ2NywuOTgyNDMsLjkwOTk2LC45OTM2MSwxLjEwODUsMS41Njk0MiwxLjEwODUsMS4yMTA3LC43NDYyNywuOTQyODIsLjk2NzUyLDEuMDE1MTksLjg2MzA0LDEuMDEzNTksLjk3Mjc4LDEuMTUxMDMsMS4wMTM1OSwuOTg1NjEsMS4wMjI4NSwxLjAyMjg1LDEuMDA1MjcsMS4wMjI4NSwxLjAzMDIsLjk5MDQxLDEuMDAwOCwxLjAxNTE5LDEuMDEzNTksMS4wMjI1OCwuNzkxMDQsMS4xNjg2MiwuOTkwNDEsLjk3NDU0LDEuMDI1MTEsLjk5Mjk4LC45Njc1MiwuOTU4MDEsLjk0ODU2LDEuMTY1NzksLjk0ODU2LDEuMjEwNywuOTgyNCwxLjAzNDI0LDEuMDM0MjQsMSwxLjAzNDI0LDEuMTY1NzksLjg3MjcsMS4zODcxLDEuMTg2MjIsMS4xMDgxOCwxLjA0NDc4LDEuMjEwNywxLjE4NjIyLC43NTE1NSwuOTQ5OTQsMS4yODgyNiwxLjIxNDA4LDEuMjE0MDgsLjkxMDU2LDEsLjkxNTcyLC45NzU0LC42NDY2MywxLjE4MzI4LDEuMjQ4NjYsMS4wNDQ3OCwxLjE0MTY5LDEuMTU3NDksMS4xNzM4OSwuNzE3MDMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjkzNTA2LC44NjQxLC43OTc5NSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wMjA5NiwxLjA5Mzk4LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsMS4yMTA3LC45NzQ4OSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MDk5NiwuOTIwOTQsMS4wMjc5OCwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTMxMzYsLjg2MzA0LC45NzI3OCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LC45NzEyMiwuOTkwNDEsMSwxLDEsMSwxLDEuMjg4MjYsMS4wMDA4LC45OTA0MSwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTY3NTIsMS4wMTUxOSwuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LDEuMDIwOTYsMS4wMzA1NywxLjAyMDk2LDEuMDM1MTcsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LDEsMSwxLjA2MDg1LC45ODU2MSwxLjA2MDg1LDEuMDA4NzksMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsLjk3MTM4LDEuMDg2OTIsLjgwMDcsMS4wMjI4NSwxLDEsMS4wMDUyNywuODM2OTMsMS4wMjI4NSwxLDEsLjgzNjkzLC45NDU1LC44MzY5MywuOTA0MTgsLjgzNjkzLDEuMTMwMDUsMS4wOTM5OCwuOTkwNDEsMSwxLDEuMDkzOTgsLjk5MDQxLC45NjY5MiwxLjA5MjUxLC45OTA0MSwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTM5OTQsLjk3OTMxLC45MDM5OSwxLjAyMjU4LDEsMSwuOTAzOTksMS4wMjI1OCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LDEsMSwuOTU5MjMsMS4wNzAzNCwuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwuOTA5OTYsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsMS4wNzczMywxLjAzNDI0LC45NzM2MywuOTY3NTIsLjkzNTA2LC45MzEzNiwuOTc0ODksMS4wMDA4LDEsMSwuOTU5MjMsMS4xNjg2MiwxLjE1MTAzLDEuMTUxMDMsMS4wMTE3MywxLjAzOTU5LC43NTk1MywuODEzNzgsLjc5OTEyLDEuMTUxMDMsMS4yMTk5NCwuOTUxNjEsLjg3ODE1LDEuMDExNDksLjgxNTI1LC43Njc2LC45ODE2NywxLjAxMTM0LDEuMDI1NDYsLjg0MDk3LDEuMDMwODksMS4xODEwMiwuOTczNjMsLjg4Nzc2LC44NTEzNCwuOTc4MjYsLjc5Nzk1LC45OTM2MSwxLjA2MDg1LC45NzQ4OSwxLjE0MDYsLjg5ODU4LDEuMDM4OCwxLjE0ODg5LDEuMDkzOTgsLjg2MDM5LC45NzQ4OSwxLjA1OTUsLjkyMDk0LC45NDc5MywuOTU5MjMsLjkwOTk2LC45OTM0NiwuOTgyNDMsMS4wMjExMiwuOTU0OTMsMS4xNDA2LC45MDk5NiwxLjAzNTc0LDEuMDI1OTcsMS4wMDA4LDEuMTgxMDIsMS4wNjYyOCwxLjAzNTc0LDEuMDE5MiwxLjAxOTMyLDEuMDA4ODYsLjk3NTMxLDEuMDEwNiwxLjAwMDgsMS4xMzE4OSwxLjE4MTAyLDEuMDIyNzcsLjk4NjgzLDEuMDAxNiwuOTk1NjEsMS4wNzIzNywxLjAwMDgsLjkwNDM0LC45OTkyMSwuOTM4MDMsLjg5NjUsMS4yMzA4NSwxLjA2NjI4LDEuMDQ5ODMsLjk2MjY4LDEuMDQ5OSwuOTg0MzksMS4xODEwMiwxLjA2NjI4LDEuMDAwOCwxLjA2NjI4LC45ODQzOSwuNzk3OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTQ2NiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTcyNzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMjA2NSwxLDEsMSwxLDEsMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLDEsMS4yMTQwOCwuODk5MDMsMSwxLC43NTE1NSwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43MzA0NywuNzMwNDcsMS4yMDY0MiwuOTEyMTEsMS4yNTYzNSwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMTI0NTQsLjkzNTAzLDEuMDM0MjQsMS4xOTY4NywxLjAzNDI0LDEsMSwxLC43NzEsMSwxLDEuMTU3NDksMS4xNTc0OSwxLjE1NzQ5LDEuMTA5NDgsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4xNjg5NywxLC45NjA4NSwuOTAxMzcsMS4yMTA3LDEuMTg0MTYsMS4xMzk3MywuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTE3MiwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4ODc0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4wOTE5MywxLjA5MTkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LlNlZ29ldWlCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjAzOTU5LDEuMDQwMTYsMS4wMjgwOSwxLjAzNiwuOTc2MzksMS4xMDk1MywxLjIzMjAzLDEuMTExNDQsMS4xMTE0NCwxLjE2OTM5LDEuMjEyMzcsLjk3NTQsMS4yMTI2MSwuOTc1NCwxLjU5NzU0LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LC44MTM3OCwuODEzNzgsMS4yMTIzNywxLjIxMjM3LDEuMjEyMzcsLjczNTQxLC45Nzg0NywuOTczNjMsLjg5NzIzLC44Nzg5NywxLjA0MjYsLjc5NDI5LC44NTI5MiwuOTExNDksMS4wNTgxNSwxLjE0MDYsLjc5NjMxLC45MDEyOCwuODM4NTMsMS4wNDM5NiwxLjEwNjE1LC45NzU1MiwuOTQ0MzYsLjk3NTUyLC44ODY0MSwuODA1MjcsLjk2MDgzLDEuMDAxMzUsMSwxLjA2Nzc3LC45ODE3LC45MTE0MiwuOTkzNjEsMS4xMTE0NCwxLjU3MjkzLDEuMTExNDQsMS4yMTIzNywuNzQ2MjcsMS4zMTgxOCwxLjA2NTg1LC45NzA0MiwuODMwNTUsLjk3MDQyLC45MzUwMywxLjEyNjEsLjk3MDQyLC45NzkyMiwxLjE0MjM2LC45NDU1MiwxLjAxMDU0LDEuMTQyMzYsMS4wMjQ3MSwuOTc5MjIsLjk0MTY1LC45NzA0MiwuOTcwNDIsMS4wMjc2LC43ODkyOSwxLjEyNjEsLjk3OTIyLC45NTg3NCwxLjAyMTk3LC45ODUwNywuOTY3NTIsLjk3MTY4LC45NTEwNywxLjE2NTc5LC45NTEwNywxLjIxMjM3LDEuMDM5NTksMS4wMzYsMS4wMzYsMSwxLjAzNiwxLjE2NTc5LC44NzM1NywxLjMxODE4LDEuMTg3NTQsMS4yNjc4MSwxLjA1MzU2LDEuMjEyMzcsMS4xODYyMiwuNzk0ODcsLjk0OTk0LDEuMjkwMDQsMS4yNDA0NywxLjI0MDQ3LDEuMzE4MTgsMSwuOTE0ODQsLjk3NTQsMS4zMTgxOCwxLjEzNDksMS4yNDg2NiwxLjA1MzU2LDEuMTM5MzQsMS4xNTU3NCwxLjE3Mzg5LC43MzU0MSwuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTQzODUsLjg3ODk3LC43OTQyOSwuNzk0MjksLjc5NDI5LC43OTQyOSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wNDI2LDEuMTA2MTUsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwxLjIxMjM3LC45NzU1MiwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MTE0MiwuOTQ0MzYsLjk4NzIxLDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LC45NjcwNSwuODMwNTUsLjkzNTAzLC45MzUwMywuOTM1MDMsLjkzNTAzLDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsLjkzMTI1LC45NzkyMiwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LDEuMjkwMDQsLjk0MTY1LC45NzkyMiwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTY3NTIsLjk3MDQyLC45Njc1MiwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LDEuMDQyNiwxLjAwMzMsMS4wNDI2LC45NzA0MiwuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsMSwxLDEuMDU4MTUsLjk3OTIyLDEuMDU4MTUsLjk3OTIyLDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LC45NzQ0MSwxLjA0MzAyLC43OTYzMSwxLjAxNTgyLDEsMSwxLjAxMDU0LC44Mzg1MywxLjE0MjM2LDEsMSwuODM4NTMsMS4wOTEyNSwuODM4NTMsLjkwNDE4LC44Mzg1MywxLjE5NTA4LDEuMTA2MTUsLjk3OTIyLDEsMSwxLjEwNjE1LC45NzkyMiwxLjAxMDM0LDEuMTA0NjYsLjk3OTIyLC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45MTYwMiwuOTE5ODEsLjg4NjQxLDEuMDI3NiwxLDEsLjg4NjQxLDEuMDI3NiwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LDEsMSwuOTYwODMsMS4wNTQwMywuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwuOTExNDIsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsMS4yMzE5OSwxLjAzNiwuOTczNjMsMS4wNjU4NSwuOTQzODUsLjk2NzA1LC45NzU1MiwuOTQxNjUsMSwxLC45NjA4MywxLjEyNjEsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsLjk1MTYxLDEuMjcxMjYsMS4wMDgxMSwuODMyODQsLjc3NzAyLC45OTEzNywuOTUyNTMsMS4wMzQ3LC44NjE0MiwxLjA3MjA1LDEuMTQyMzYsLjk3MzYzLC44OTcyMywuODY4NjksMS4wOTgxOCwuNzk0MjksLjk5MzYxLDEuMDU4MTUsLjk3NTUyLDEuMTQwNiwuOTAxMjgsMS4wNjY2MiwxLjA0Mzk2LDEuMTA2MTUsLjg0OTE4LC45NzU1MiwxLjA0Njk0LC45NDQzNiwuOTgwMTUsLjk2MDgzLC45MTE0MiwxLjAwMzU2LC45ODE3LDEuMDE5NDUsLjk4OTk5LDEuMTQwNiwuOTExNDIsMS4wNDk2MSwuOTg5OCwxLjAwNjM5LDEuMTQyMzYsMS4wNzUxNCwxLjA0OTYxLC45OTYwNywxLjAyODk3LDEuMDA4LC45ODk4LC45NTEzNCwxLjAwNjM5LDEuMTExMjEsMS4xNDIzNiwxLjAwNTE4LC45Nzk4MSwxLjAyMTg2LDEsMS4wODU3OCwuOTQxNjUsLjk5MzE0LC45ODM4NywuOTMwMjgsLjkzMzc3LDEuMzUxMjUsMS4wNzUxNCwxLjEwNjg3LC45MzQ5MSwxLjA0MjMyLDEuMDAzNTEsMS4xNDIzNiwxLjA3NTE0LC45NDE2NSwxLjA3NTE0LDEuMDAzNTEsLjc5NDI5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDkwOTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkzNTAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NjYwOSwxLDEsMSwxLDEsMSwxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLDEsMS4yMTI2MSwuODk5MDMsMSwxLC43NTE1NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43Mjk1OSwuNzI5NTksMS4yMDUwMiwuOTE0MDYsMS4yNjUxNCwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMDkxMjUsLjkzMzI3LDEuMDMzMzYsMS4xNjU0MSwxLjAzNiwxLDEsMSwuNzcxLDEsMSwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LC44NjM2NCwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYyMjQsMSwxLDEuMTY3OTgsMSwuOTYwODUsLjkwMDY4LDEuMjEyMzcsMS4xODQxNiwxLjEzOTA0LC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMzM5LDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg3NzUsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEzMjY5LDEuMTMyNjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSx0LlNlZ29ldWlJdGFsaWNGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4xNDc2MywxLjA1MzY1LDEuMDYyMzQsLjk2OTI3LC45MjU4NiwxLjE1MzczLDEuMTg0MTQsLjkxMzQ5LC45MTM0OSwxLjA3NDAzLDEuMTczMDgsLjc4MzgzLDEuMjAwODgsLjc4MzgzLDEuNDI1MzEsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODM4MywuNzgzODMsMS4xNzMwOCwxLjE3MzA4LDEuMTczMDgsLjc3MzQ5LC45NDU2NSwuOTQ3MjksLjg1OTQ0LC44ODUwNiwuOTg1OCwuNzQ4MTcsLjgwMDE2LC44ODQ0OSwuOTgwMzksLjk1NzgyLC42OTIzOCwuODk4OTgsLjgzMjMxLC45ODE4MywxLjAzOTg5LC45NjkyNCwuODYyMzcsLjk2OTI0LC44MDU5NSwuNzQ1MjQsLjg2MDkxLC45NTQwMiwuOTQxNDMsLjk4NDQ4LC44ODU4LC44MzA4OSwuOTMyODUsMS4wOTQ5LDEuMzkwMTYsMS4wOTQ5LDEuNDU5OTQsLjc0NjI3LDEuMDQ4MzksLjk3NDU0LC45NzQ1NCwuODcyMDcsLjk3NDU0LC44NzUzMywxLjA2MTUxLC45NzQ1NCwxLjAwMTc2LDEuMTY0ODQsMS4wODEzMiwuOTgwNDcsMS4xNjQ4NCwxLjAyOTg5LDEuMDEwNTQsLjk2MjI1LC45NzQ1NCwuOTc0NTQsMS4wNjU5OCwuNzkwMDQsMS4xNjM0NCwxLjAwMzUxLC45NDYyOSwuOTk3MywuOTEwMTYsLjk2Nzc3LC45MDQzLC45MTA4MiwuOTI0ODEsLjkxMDgyLDEuMTczMDgsLjk1NzQ4LC45NjkyNywuOTY5MjcsMSwuOTY5MjcsLjkyNDgxLC44MDU5NywxLjA0ODM5LDEuMjMzOTMsMS4xNzgxLC45MjQ1LDEuMTczMDgsMS4yMDgwOCwuNjMyMTgsLjk0MjYxLDEuMjQ4MjIsMS4wOTk3MSwxLjA5OTcxLDEuMDQ4MzksMSwuODUyNzMsLjc4MDMyLDEuMDQ4MzksMS4wOTk3MSwxLjIyMzI2LC45MjQ1LDEuMDk4MzYsMS4xMzUyNSwxLjE1MjIyLC43MDQyNCwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuODU0OTgsLjg4NTA2LC43NDgxNywuNzQ4MTcsLjc0ODE3LC43NDgxNywuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk4NTgsMS4wMzk4OSwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTczMDgsLjk2OTI0LC45NTQwMiwuOTU0MDIsLjk1NDAyLC45NTQwMiwuODMwODksLjg2MjM3LC44ODQwOSwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTI5MTYsLjg3MjA3LC44NzUzMywuODc1MzMsLjg3NTMzLC44NzUzMywuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzODU0LDEuMDEwNTQsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwxLjI0ODIyLC44NzYxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsLjk2Nzc3LC45NzQ1NCwuOTY3NzcsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuOTg1OCwuOTUzOTEsLjk4NTgsLjk3NDU0LC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwxLDEsLjk4MDM5LDEuMDAxNzYsLjk4MDM5LDEuMDAxNzYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLDEuMTY0ODQsLjk1NzgyLC45MzE0NiwuODQ0MjEsMS4xMjc2MSwuNjkyMzgsMS4wODEzMiwxLDEsLjk4MDQ3LC44MzIzMSwxLjE2NDg0LDEsMSwuODQ3MjMsMS4wNDg2MSwuODQ3MjMsLjc4NzU1LC44MzIzMSwxLjIzNzM2LDEuMDM5ODksMS4wMTA1NCwxLDEsMS4wMzk4OSwxLjAxMDU0LC45ODU3LDEuMDM4NDksMS4wMTA1NCwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTIzODMsLjkwMTcxLC44MDU5NSwxLjA2NTk4LDEsMSwuODA1OTUsMS4wNjU5OCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LDEsMSwuODYwOTEsMS4wMjc1OSwuODU3NzEsMS4xNjM0NCwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywuODMwODksLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsMS4zMTg2OCwuOTY5MjcsLjk0NzI5LC45NzQ1NCwuODU0OTgsLjkyOTE2LC45NjkyNCwuODc2MSwxLDEsLjg2MDkxLDEuMTYzNDQsMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksLjgxOTY1LC44MTk2NSwuOTQ3MjksLjc4MDMyLC43MTAyMiwuOTA4ODMsLjg0MTcxLC45OTg3NywuNzc1OTYsMS4wNTczNCwxLjIsLjk0NzI5LC44NTk0NCwuODI3OTEsLjk2MDcsLjc0ODE3LC45MzI4NSwuOTgwMzksLjk2OTI0LC45NTc4MiwuODk4OTgsLjk4MzE2LC45ODE4MywxLjAzOTg5LC43ODYxNCwuOTY5MjQsLjk3NjQyLC44NjIzNywuODYwNzUsLjg2MDkxLC44MzA4OSwuOTAwODIsLjg4NTgsLjk3Mjk2LDEuMDEyODQsLjk1NzgyLC44MzA4OSwxLjA5NzYsMS4wNCwxLjAzMzQyLDEuMiwxLjA2NzUsMS4wOTc2LC45ODIwNSwxLjAzODA5LDEuMDUwOTcsMS4wNCwuOTUzNjQsMS4wMzM0MiwxLjA1NDAxLDEuMiwxLjAyMTQ4LDEuMDExOSwxLjA0NzI0LDEuMDEyNywxLjAyNzMyLC45NjIyNSwuODk2NSwuOTc3ODMsLjkzNTc0LC45NDgxOCwxLjMwNjc5LDEuMDY3NSwxLjExODI2LC45OTgyMSwxLjA1NTcsMS4wMzI2LDEuMiwxLjA2NzUsLjk2MjI1LDEuMDY3NSwxLjAzMjYsLjc0ODE3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDM3NTQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3NTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45ODcwNSwxLDEsMSwxLDEsMSwuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsMS4xMjMxNywxLjEyMzE3LDEuMTIzMTcsLjY3NjAzLC42NzYwMywxLjE1NjIxLC43MzU4NCwxLjIxMTkxLDEuMjIxMzUsMS4wNjQ4MywuOTQ4NjgsLjk0ODY4LC45NTk5NiwxLjI0NjMzLDEsMS4wNzQ5NywuODc3MDksLjk2OTI3LDEuMDE0NzMsLjk2OTI3LDEsMSwxLC43NzI5NSwxLDEsMS4wOTgzNiwxLjA5ODM2LDEuMDk4MzYsMS4wMTUyMiwuODYzMjEsLjk0NDM0LC44NjQ5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjQzOCwxLjE3MzA4LDEuMTg0MTYsMS4xNDU4OSwuNjk4MjUsLjk3NjIyLDEuOTY3OTEsMS4yNDgyMiwxLjI0ODIyLDEuMTczMDgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xNzk4NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA3NDIsMS4xMDc0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5TZWdvZXVpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpUmVndWxhckZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODU5NCwxLjAyMjg1LDEuMTA0NTQsMS4wNjIzNCwuOTY5MjcsLjkyMDM3LDEuMTk5ODUsMS4yMDQ2LC45MDYxNiwuOTA2MTYsMS4wNzE1MiwxLjE3MTQsLjc4MDMyLDEuMjAwODgsLjc4MDMyLDEuNDAyNDYsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODAzMiwuNzgwMzIsMS4xNzE0LDEuMTcxNCwxLjE3MTQsLjgwNTk3LC45NDA4NCwuOTY3MDYsLjg1OTQ0LC44NTczNCwuOTcwOTMsLjc1ODQyLC43OTkzNiwuODgxOTgsLjk4MzEsLjk1NzgyLC43MTM4NywuODY5NjksLjg0NjM2LDEuMDc3OTYsMS4wMzU4NCwuOTY5MjQsLjgzOTY4LC45NjkyNCwuODI4MjYsLjc5NjQ5LC44NTc3MSwuOTUxMzIsLjkzMTE5LC45ODk2NSwuODg0MzMsLjgyODcsLjkzMzY1LDEuMDg2MTIsMS4zNjM4LDEuMDg2MTIsMS40NTc4NiwuNzQ2MjcsLjgwNDk5LC45MTQ4NCwxLjA1NzA3LC45MjM4MywxLjA1ODgyLC45NDAzLDEuMTI2NTQsMS4wNTg4MiwxLjAxNzU2LDEuMDkwMTEsMS4wOTAxMSwuOTk0MTQsMS4wOTAxMSwxLjAzNCwxLjAxNzU2LDEuMDUzNTYsMS4wNTcwNywxLjA1ODgyLDEuMDQzOTksLjg0ODYzLDEuMjE5NjgsMS4wMTc1NiwuOTU4MDEsMS4wMDA2OCwuOTE3OTcsLjk2Nzc3LC45MDQzLC45MDM1MSwuOTIxMDUsLjkwMzUxLDEuMTcxNCwuODUzMzcsLjk2OTI3LC45NjkyNywuOTk5MTIsLjk2OTI3LC45MjEwNSwuODA1OTcsMS4yNDM0LDEuMjA4MDgsMS4wNTkzNywuOTA5NTcsMS4xNzE0LDEuMjA4MDgsLjc1MTU1LC45NDI2MSwxLjI0NjQ0LDEuMDk5NzEsMS4wOTk3MSwuODQ3NTEsMSwuODUyNzMsLjc4MDMyLC42MTU4NCwxLjA1NDI1LDEuMTc5MTQsLjkwOTU3LDEuMDg2NjUsMS4xMTU5MywxLjE0MTY5LC43MzM4MSwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuODYwMzUsLjg1NzM0LC43NTg0MiwuNzU4NDIsLjc1ODQyLC43NTg0MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk3MDkzLDEuMDM1ODQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MTQsLjk2OTI0LC45NTEzMiwuOTUxMzIsLjk1MTMyLC45NTEzMiwuODI4NywuODM5NjgsLjg5MDQ5LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MzU3NSwuOTIzODMsLjk0MDMsLjk0MDMsLjk0MDMsLjk0MDMsLjg3MTcsLjg3MTcsLjg3MTcsLjg3MTcsMS4wMDUyNywxLjAxNzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjI0NjQ0LC45NTkyMywxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LC45Njc3NywxLjA1NzA3LC45Njc3NywuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC45NzA5MywxLjA5NjksLjk3MDkzLDEuMDU4ODIsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwxLDEsLjk4MzEsMS4wMTc1NiwuOTgzMSwxLjAxNzU2LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwxLjA5MDExLC45NTc4MiwuODcxNywuODQ3ODQsMS4xMTU1MSwuNzEzODcsMS4wOTAxMSwxLDEsLjk5NDE0LC44NDYzNiwxLjA5MDExLDEsMSwuODQ2MzYsMS4wNTM2LC44NDYzNiwuOTQyOTgsLjg0NjM2LDEuMjMyOTcsMS4wMzU4NCwxLjAxNzU2LDEsMSwxLjAzNTg0LDEuMDE3NTYsMS4wMDMyMywxLjAzNDQ0LDEuMDE3NTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjkzMDY2LC45ODI5MywuODI4MjYsMS4wNDM5OSwxLDEsLjgyODI2LDEuMDQzOTksLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywxLDEsLjg1NzcxLDEuMTczMTgsLjg1NzcxLDEuMjE5NjgsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LC44Mjg3LC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLDEuMDg1NzEsLjk2OTI3LC45NjcwNiwuOTE0ODQsLjg2MDM1LC45MzU3NSwuOTY5MjQsLjk1OTIzLDEsMSwuODU3NzEsMS4yMTk2OCwxLjExNDM3LDEuMTE0MzcsLjkzMTA5LC45MTIwMiwuNjA0MTEsLjg0MTY0LC41NTU3MiwxLjAxMTczLC45NzM2MSwuODE4MTgsLjgxODE4LC45NjYzNSwuNzgwMzIsLjcyNzI3LC45MjM2NiwuOTg2MDEsMS4wMzQwNSwuNzc5NjgsMS4wOTc5OSwxLjIsLjk2NzA2LC44NTk0NCwuODU2MzgsLjk2NDkxLC43NTg0MiwuOTMzNjUsLjk4MzEsLjk2OTI0LC45NTc4MiwuODY5NjksLjk0MTUyLDEuMDc3OTYsMS4wMzU4NCwuNzg0MzcsLjk2OTI0LC45ODcxNSwuODM5NjgsLjgzNDkxLC44NTc3MSwuODI4NywuOTQ0OTIsLjg4NDMzLC45Mjg3LDEuMDA5OCwuOTU3ODIsLjgyODcsMS4wNjI1LC45ODI0OCwxLjAzNDI0LDEuMiwxLjAxMDcxLDEuMDYyNSwuOTUyNDYsMS4wMzgwOSwxLjA0OTEyLC45ODI0OCwxLjAwMjIxLDEuMDM0MjQsMS4wNTQ0MywxLjIsMS4wNDc4NSwuOTk2MDksMS4wMDE2OSwxLjA1MTc2LC45OTM0NiwxLjA1MzU2LC45MDg3LDEuMDMwMDQsLjk1NTQyLC45MzExNywxLjIzMzYyLDEuMDEwNzEsMS4wNzgzMSwxLjAyNTEyLDEuMDUyMDUsMS4wMzUwMiwxLjIsMS4wMTA3MSwxLjA1MzU2LDEuMDEwNzEsMS4wMzUwMiwuNzU4NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzcxOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0MDIxLDEsMSwxLDEsMSwxLC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjEzMTk2LDEuMTMxOTYsMS4xMzE5NiwuNjc0MjgsLjY3NDI4LDEuMTYwMzksLjczMjkxLDEuMjA5OTYsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44Nzc5NiwuOTY5MjcsMS4wMTUxOCwuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjEwNTM5LDEuMTA1MzksMS4xMTM1OCwxLjA2OTY3LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjUwNywxLjE3MTQsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njk3LDEuMjQ4MjIsMS4yNDgyMiwxLjE3MjM4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTgwODMsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwOTM4LDEuMTA5MzgsMSwxLDEsMS4wNTQyNSwxLjA5OTcxLDEuMDk5NzEsMS4wOTk3MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvc3RTY3JpcHRFdmFsdWF0b3I9dC5Qb3N0U2NyaXB0Q29tcGlsZXI9dC5QREZGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHQuaXNQREZGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdDtpZigib2JqZWN0IiE9PWcoZSkpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIG4uRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9O3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE4Nyksbz1yKDEzNikscz1yKDE4OCk7ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZihlKTtpZih0KXt2YXIgYT1mKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWcodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9ZnVuY3Rpb24gaChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3AoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHAoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWcoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1nKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIHQmJnkoZS5wcm90b3R5cGUsdCksciYmeShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQueHJlZixuPXQuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bjt2KHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1hfXJldHVybiBtKGUsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7cmV0dXJuIHRoaXMuX2NhY2hlKGUscikscn19LHtrZXk6ImNyZWF0ZUZyb21BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2Ygbi5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTtyZXR1cm4gdGhpcy5fY2FjaGUoZSxyKSxyfX0se2tleToiZ2V0Q2FjaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlIGluc3RhbmNlb2Ygbi5SZWY/dD1lOmUgaW5zdGFuY2VvZiBuLkRpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJih0PWUuZGljdCYmZS5kaWN0Lm9iaklkKSx0KXt2YXIgcj10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYodCk7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH19LHtrZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO3ZhciByO2UgaW5zdGFuY2VvZiBuLlJlZj9yPWU6ZSBpbnN0YW5jZW9mIG4uRGljdD9yPWUub2JqSWQ6ZSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmKHI9ZS5kaWN0JiZlLmRpY3Qub2JqSWQpLHImJnRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCxyLHQpfX0se2tleToiX2xvY2FsRnVuY3Rpb25DYWNoZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLG5ldyBzLkxvY2FsRnVuY3Rpb25DYWNoZSl9fV0pLGV9KCk7ZnVuY3Rpb24gdyhlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5sZW5ndGgscj0wO3I8dDtyKyspaWYoIm51bWJlciIhPXR5cGVvZiBlW3JdKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKW5bYV09K2VbYV07cmV0dXJuIG59cmV0dXJuIGV9dC5QREZGdW5jdGlvbkZhY3Rvcnk9Yjt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2KHRoaXMsZSl9cmV0dXJuIG0oZSxudWxsLFt7a2V5OiJnZXRTYW1wbGVBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvPTE7Zm9yKGE9MCxpPWUubGVuZ3RoO2E8aTthKyspbyo9ZVthXTtvKj10O3ZhciBzPW5ldyBBcnJheShvKSxjPTAsdT0wLGw9MS8oTWF0aC5wb3coMixyKS0xKSxmPW4uZ2V0Qnl0ZXMoKG8qcis3KS84KSxoPTA7Zm9yKGE9MDthPG87YSsrKXtmb3IoO2M8cjspdTw8PTgsdXw9ZltoKytdLGMrPTg7Yy09cixzW2FdPSh1Pj5jKSpsLHUmPSgxPDxjKS0xfXJldHVybiBzfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbixpPW4uZGljdHx8bjtzd2l0Y2goaS5nZXQoIkZ1bmN0aW9uVHlwZSIpKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm4sZGljdDppfSk7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixkaWN0Oml9KTtjYXNlIDM6cmV0dXJuIHRoaXMuY29uc3RydWN0U3RpY2hlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGRpY3Q6aX0pO2Nhc2UgNDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46bixkaWN0Oml9KX10aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uIil9fSx7a2V5OiJwYXJzZUFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZm5PYmo7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuIHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpufSk7dmFyIGEsaT1bXSxvPWgobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO2kucHVzaCh0aGlzLnBhcnNlKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46dC5mZXRjaElmUmVmKHMpfSkpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBhPTAsbz1pLmxlbmd0aDthPG87YSsrKWlbYV0oZSx0LHIsbithKX19fSx7a2V5OiJjb25zdHJ1Y3RTYW1wbGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5mbixyPWUuZGljdDtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLG49MCxhPTA7YTx0O2ErPTIpcltuKytdPVtlW2FdLGVbYSsxXV07cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQscixuLGEpe3JldHVybiBuKyhhLW4pLyhyLXQpKihlLXQpfXZhciBvPXcoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhyLmdldEFycmF5KCJSYW5nZSIpKTtpZighb3x8IXMpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO3ZhciBjPW8ubGVuZ3RoLzIsdT1zLmxlbmd0aC8yO289bihvKSxzPW4ocyk7dmFyIGw9dyhyLmdldEFycmF5KCJTaXplIikpLGY9ci5nZXQoIkJpdHNQZXJTYW1wbGUiKSxoPXIuZ2V0KCJPcmRlciIpfHwxOzEhPT1oJiYoMCxhLmluZm8pKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitoKTt2YXIgZD13KHIuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihkKWQ9bihkKTtlbHNle2Q9W107Zm9yKHZhciBwPTA7cDxjOysrcClkLnB1c2goWzAsbFtwXS0xXSl9dmFyIGc9dyhyLmdldEFycmF5KCJEZWNvZGUiKSk7Zz1nP24oZyk6czt2YXIgdj10aGlzLmdldFNhbXBsZUFycmF5KGwsdSxmLHQpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxmLGg9MTw8YyxwPW5ldyBGbG9hdDY0QXJyYXkoaCkseT1uZXcgVWludDMyQXJyYXkoaCk7Zm9yKGY9MDtmPGg7ZisrKXBbZl09MTt2YXIgbT11LGI9MTtmb3IoYT0wO2E8YzsrK2Epe3ZhciB3PW9bYV1bMF0saz1vW2FdWzFdLFM9aShNYXRoLm1pbihNYXRoLm1heChlW3QrYV0sdyksayksdyxrLGRbYV1bMF0sZFthXVsxXSkseD1sW2FdLE89KFM9TWF0aC5taW4oTWF0aC5tYXgoUywwKSx4LTEpKTx4LTE/TWF0aC5mbG9vcihTKTpTLTEsQT1PKzEtUyxDPVMtTyxGPU8qbSxQPUYrbTtmb3IoZj0wO2Y8aDtmKyspZiZiPyhwW2ZdKj1DLHlbZl0rPVApOihwW2ZdKj1BLHlbZl0rPUYpO20qPXgsYjw8PTF9Zm9yKGY9MDtmPHU7KytmKXt2YXIgVD0wO2ZvcihhPTA7YTxoO2ErKylUKz12W3lbYV0rZl0qcFthXTtUPWkoVCwwLDEsZ1tmXVswXSxnW2ZdWzFdKSxyW24rZl09TWF0aC5taW4oTWF0aC5tYXgoVCxzW2ZdWzBdKSxzW2ZdWzFdKX19fX0se2tleToiY29uc3RydWN0SW50ZXJwb2xhdGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7Zm9yKHZhciB0PWUuZGljdCxyPXcodC5nZXRBcnJheSgiQzAiKSl8fFswXSxuPXcodC5nZXRBcnJheSgiQzEiKSl8fFsxXSxhPXQuZ2V0KCJOIiksaT1bXSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWkucHVzaChuW29dLXJbb10pO3ZhciBjPWkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIHM9MT09PWE/ZVt0XTpNYXRoLnBvdyhlW3RdLGEpLHU9MDt1PGM7Kyt1KW5bbyt1XT1yW3VdK3MqaVt1XX19fSx7a2V5OiJjb25zdHJ1Y3RTdGljaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZGljdCxpPXcobi5nZXRBcnJheSgiRG9tYWluIikpO2lmKCFpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT1pLmxlbmd0aC8yKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7dmFyIG8scz1bXSxjPWgobi5nZXQoIkZ1bmN0aW9ucyIpKTt0cnl7Zm9yKGMucygpOyEobz1jLm4oKSkuZG9uZTspe3ZhciB1PW8udmFsdWU7cy5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjp0LmZldGNoSWZSZWYodSl9KSl9fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXZhciBsPXcobi5nZXRBcnJheSgiQm91bmRzIikpLGY9dyhuLmdldEFycmF5KCJFbmNvZGUiKSksZD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT5yP2U9cjplPHQmJihlPXQpLGV9KGVbdF0saVswXSxpWzFdKSxjPWwubGVuZ3RoO2ZvcihhPTA7YTxjJiYhKG88bFthXSk7KythKTt2YXIgdT1pWzBdO2E+MCYmKHU9bFthLTFdKTt2YXIgaD1pWzFdO2E8bC5sZW5ndGgmJihoPWxbYV0pO3ZhciBwPWZbMiphXSxnPWZbMiphKzFdO2RbMF09dT09PWg/cDpwKyhvLXUpKihnLXApLyhoLXUpLHNbYV0oZCwwLHIsbil9fX0se2tleToiY29uc3RydWN0UG9zdFNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS54cmVmO3ZhciB0PWUuaXNFdmFsU3VwcG9ydGVkLHI9ZS5mbixuPWUuZGljdCxvPXcobi5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhuLmdldEFycmF5KCJSYW5nZSIpKTtpZighbyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFzKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTt2YXIgYz1uZXcgaS5Qb3N0U2NyaXB0TGV4ZXIociksdT1uZXcgaS5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmYS5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBsPShuZXcgUikuY29tcGlsZSh1LG8scyk7aWYobClyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsbCl9KDAsYS5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTt2YXIgZj1zLmxlbmd0aD4+MSxoPW8ubGVuZ3RoPj4xLGQ9bmV3IHgodSkscD1PYmplY3QuY3JlYXRlKG51bGwpLGc9ODE5Mix2PW5ldyBGbG9hdDMyQXJyYXkoaCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz0iIixjPXY7Zm9yKGE9MDthPGg7YSsrKWk9ZVt0K2FdLGNbYV09aSxvKz1pKyJfIjt2YXIgdT1wW29dO2lmKHZvaWQgMD09PXUpe3ZhciBsPW5ldyBGbG9hdDMyQXJyYXkoZikseT1kLmV4ZWN1dGUoYyksbT15Lmxlbmd0aC1mO2ZvcihhPTA7YTxmO2ErKyl7aT15W20rYV07dmFyIGI9c1syKmFdOyhpPGJ8fGk+KGI9c1syKmErMV0pKSYmKGk9YiksbFthXT1pfWc+MCYmKGctLSxwW29dPWwpLHIuc2V0KGwsbil9ZWxzZSByLnNldCh1LG4pfX19XSksZX0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2KHRoaXMsZSksdGhpcy5zdGFjaz10P0FycmF5LmZyb20odCk6W119cmV0dXJuIG0oZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGg+PWUuTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO3RoaXMuc3RhY2sucHVzaCh0KX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfX0se2tleToiY29weSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGgrdD49ZS5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Zm9yKHZhciByPXRoaXMuc3RhY2ssbj1yLmxlbmd0aC10LGE9dC0xO2E+PTA7YS0tLG4rKylyLnB1c2gocltuXSl9fSx7a2V5OiJpbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9fSx7a2V5OiJyb2xsIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLnN0YWNrLG49ci5sZW5ndGgtZSxhPXIubGVuZ3RoLTEsaT1uKyh0LU1hdGguZmxvb3IodC9lKSplKSxvPW4scz1hO288cztvKysscy0tKXt2YXIgYz1yW29dO3Jbb109cltzXSxyW3NdPWN9Zm9yKHZhciB1PW4sbD1pLTE7dTxsO3UrKyxsLS0pe3ZhciBmPXJbdV07clt1XT1yW2xdLHJbbF09Zn1mb3IodmFyIGg9aSxkPWE7aDxkO2grKyxkLS0pe3ZhciBwPXJbaF07cltoXT1yW2RdLHJbZF09cH19fV0sW3trZXk6Ik1BWF9TVEFDS19TSVpFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiTUFYX1NUQUNLX1NJWkUiLDEwMCl9fV0pLGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMub3BlcmF0b3JzPXR9cmV0dXJuIG0oZSxbe2tleToiZXhlY3V0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixpPW5ldyBTKGUpLG89MCxzPXRoaXMub3BlcmF0b3JzLGM9cy5sZW5ndGg7bzxjOylpZigibnVtYmVyIiE9dHlwZW9mKHQ9c1tvKytdKSlzd2l0Y2godCl7Y2FzZSJqeiI6bj1pLnBvcCgpLChyPWkucG9wKCkpfHwobz1uKTticmVhaztjYXNlImoiOm89cj1pLnBvcCgpO2JyZWFrO2Nhc2UiYWJzIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYWJzKHIpKTticmVhaztjYXNlImFkZCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocituKTticmVhaztjYXNlImFuZCI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHImJm4pOmkucHVzaChyJm4pO2JyZWFrO2Nhc2UiYXRhbiI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmF0YW4ocikpO2JyZWFrO2Nhc2UiYml0c2hpZnQiOm49aS5wb3AoKSwocj1pLnBvcCgpKT4wP2kucHVzaChyPDxuKTppLnB1c2gocj4+bik7YnJlYWs7Y2FzZSJjZWlsaW5nIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY2VpbChyKSk7YnJlYWs7Y2FzZSJjb3B5IjpyPWkucG9wKCksaS5jb3B5KHIpO2JyZWFrO2Nhc2UiY29zIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY29zKHIpKTticmVhaztjYXNlImN2aSI6cj0wfGkucG9wKCksaS5wdXNoKHIpO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci9uKTticmVhaztjYXNlImR1cCI6aS5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI9PT1uKTticmVhaztjYXNlImV4Y2giOmkucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChNYXRoLnBvdyhyLG4pKTticmVhaztjYXNlImZhbHNlIjppLnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5mbG9vcihyKSk7YnJlYWs7Y2FzZSJnZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj49bik7YnJlYWs7Y2FzZSJndCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj5uKTticmVhaztjYXNlImlkaXYiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIvbnwwKTticmVhaztjYXNlImluZGV4IjpyPWkucG9wKCksaS5pbmRleChyKTticmVhaztjYXNlImxlIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPD1uKTticmVhaztjYXNlImxuIjpyPWkucG9wKCksaS5wdXNoKE1hdGgubG9nKHIpKTticmVhaztjYXNlImxvZyI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmxvZyhyKS9NYXRoLkxOMTApO2JyZWFrO2Nhc2UibHQiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI8bik7YnJlYWs7Y2FzZSJtb2QiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIlbik7YnJlYWs7Y2FzZSJtdWwiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIqbik7YnJlYWs7Y2FzZSJuZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociE9PW4pO2JyZWFrO2Nhc2UibmVnIjpyPWkucG9wKCksaS5wdXNoKC1yKTticmVhaztjYXNlIm5vdCI6ImJvb2xlYW4iPT10eXBlb2Yocj1pLnBvcCgpKT9pLnB1c2goIXIpOmkucHVzaCh+cik7YnJlYWs7Y2FzZSJvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHJ8fG4pOmkucHVzaChyfG4pO2JyZWFrO2Nhc2UicG9wIjppLnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnJvbGwocixuKTticmVhaztjYXNlInJvdW5kIjpyPWkucG9wKCksaS5wdXNoKE1hdGgucm91bmQocikpO2JyZWFrO2Nhc2Uic2luIjpyPWkucG9wKCksaS5wdXNoKE1hdGguc2luKHIpKTticmVhaztjYXNlInNxcnQiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5zcXJ0KHIpKTticmVhaztjYXNlInN1YiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci1uKTticmVhaztjYXNlInRydWUiOmkucHVzaCghMCk7YnJlYWs7Y2FzZSJ0cnVuY2F0ZSI6cj0ocj1pLnBvcCgpKTwwP01hdGguY2VpbChyKTpNYXRoLmZsb29yKHIpLGkucHVzaChyKTticmVhaztjYXNlInhvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHIhPT1uKTppLnB1c2gocl5uKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIG9wZXJhdG9yICIuY29uY2F0KHQpKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaS5zdGFja319XSksZX0oKTt0LlBvc3RTY3JpcHRFdmFsdWF0b3I9eDt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMudHlwZT10fXJldHVybiBtKGUsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXsoMCxhLnVucmVhY2hhYmxlKSgiYWJzdHJhY3QgbWV0aG9kIil9fV0pLGV9KCksQT1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJhcmdzIikpLmluZGV4PWUsaS5taW49bixpLm1heD1hLGl9cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX19XSkscn0oTyksQz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB2KHRoaXMsciksKG49dC5jYWxsKHRoaXMsImxpdGVyYWwiKSkubnVtYmVyPWUsbi5taW49ZSxuLm1heD1lLG59cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1dKSxyfShPKSxGPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSxvKXt2YXIgcztyZXR1cm4gdih0aGlzLHIpLChzPXQuY2FsbCh0aGlzLCJiaW5hcnkiKSkub3A9ZSxzLmFyZzE9bixzLmFyZzI9YSxzLm1pbj1pLHMubWF4PW8sc31yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19XSkscn0oTyksUD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHYodGhpcyxyKSwoYT10LmNhbGwodGhpcywibWF4IikpLmFyZz1lLGEubWluPWUubWluLGEubWF4PW4sYX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdE1pbih0aGlzKX19XSkscn0oTyksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJ2YXIiKSkuaW5kZXg9ZSxpLm1pbj1uLGkubWF4PWEsaX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdFZhcmlhYmxlKHRoaXMpfX1dKSxyfShPKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJkZWZpbml0aW9uIikpLnZhcmlhYmxlPWUsYS5hcmc9bixhfXJldHVybiBtKHIsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXtlLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpfX1dKSxyfShPKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3YodGhpcyxlKSx0aGlzLnBhcnRzPVtdfXJldHVybiBtKGUsW3trZXk6InZpc2l0QXJndW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5tYXgoIixlLm1pbiwiLCBNYXRoLm1pbigiLGUubWF4LCIsIHNyY1tzcmNPZmZzZXQgKyAiLGUuaW5kZXgsIl0pKSIpfX0se2tleToidmlzaXRWYXJpYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX19LHtrZXk6InZpc2l0TGl0ZXJhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKGUubnVtYmVyKX19LHtrZXk6InZpc2l0QmluYXJ5T3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIigiKSxlLmFyZzEudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgIixlLm9wLCIgIiksZS5hcmcyLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiKSIpfX0se2tleToidmlzaXRWYXJpYWJsZURlZmluaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpLGUudmFyaWFibGUudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgPSAiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIjsiKX19LHtrZXk6InZpc2l0TWluIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWluKCIpLGUuYXJnLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiLCAiLGUubWF4LCIpIil9fSx7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJ0cy5qb2luKCIiKX19XSksZX0oKTtmdW5jdGlvbiBqKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBDKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgRigiKyIsZSx0LGUubWluK3QubWluLGUubWF4K3QubWF4KX1mdW5jdGlvbiBNKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBDKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEMoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fXZhciByPU1hdGgubWluKGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSxuPU1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KTtyZXR1cm4gbmV3IEYoIioiLGUsdCxyLG4pfWZ1bmN0aW9uIF8oZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyLXQubnVtYmVyKX1yZXR1cm4iYmluYXJ5Ij09PXQudHlwZSYmIi0iPT09dC5vcCYmImxpdGVyYWwiPT09ZS50eXBlJiYxPT09ZS5udW1iZXImJiJsaXRlcmFsIj09PXQuYXJnMS50eXBlJiYxPT09dC5hcmcxLm51bWJlcj90LmFyZzI6bmV3IEYoIi0iLGUsdCxlLm1pbi10Lm1heCxlLm1heC10Lm1pbil9ZnVuY3Rpb24gTChlLHQpe3JldHVybiBlLm1pbj49dD9uZXcgQyh0KTplLm1heDw9dD9lOm5ldyBQKGUsdCl9dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dih0aGlzLGUpfXJldHVybiBtKGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4sYSxpLG8scyxjLHUsbCxmPVtdLGg9W10sZz10Lmxlbmd0aD4+MSx2PXIubGVuZ3RoPj4xLHk9MCxtPTA7bTxnO20rKylmLnB1c2gobmV3IEEobSx0WzIqbV0sdFsyKm0rMV0pKTtmb3IodmFyIGI9MCx3PWUubGVuZ3RoO2I8dztiKyspaWYoIm51bWJlciIhPXR5cGVvZihsPWVbYl0pKXN3aXRjaChsKXtjYXNlImFkZCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtvPWYucG9wKCksaT1mLnBvcCgpLGYucHVzaChqKGksbykpO2JyZWFrO2Nhc2UiY3ZyIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2JyZWFrO2Nhc2UibXVsIjppZihmLmxlbmd0aDwyKXJldHVybiBudWxsO289Zi5wb3AoKSxpPWYucG9wKCksZi5wdXNoKE0oaSxvKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7bz1mLnBvcCgpLGk9Zi5wb3AoKSxmLnB1c2goXyhpLG8pKTticmVhaztjYXNlImV4Y2giOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7cz1mLnBvcCgpLGM9Zi5wb3AoKSxmLnB1c2gocyxjKTticmVhaztjYXNlInBvcCI6aWYoZi5sZW5ndGg8MSlyZXR1cm4gbnVsbDtmLnBvcCgpO2JyZWFrO2Nhc2UiaW5kZXgiOmlmKGYubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiIT09KGk9Zi5wb3AoKSkudHlwZSlyZXR1cm4gbnVsbDtpZigobj1pLm51bWJlcik8MHx8IU51bWJlci5pc0ludGVnZXIobil8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiPT09KHM9ZltmLmxlbmd0aC1uLTFdKS50eXBlfHwidmFyIj09PXMudHlwZSl7Zi5wdXNoKHMpO2JyZWFrfXU9bmV3IFQoeSsrLHMubWluLHMubWF4KSxmW2YubGVuZ3RoLW4tMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2UiZHVwIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2lmKCJudW1iZXIiPT10eXBlb2YgZVtiKzFdJiYiZ3QiPT09ZVtiKzJdJiZlW2IrM109PT1iKzcmJiJqeiI9PT1lW2IrNF0mJiJwb3AiPT09ZVtiKzVdJiZlW2IrNl09PT1lW2IrMV0pe2k9Zi5wb3AoKSxmLnB1c2goTChpLGVbYisxXSkpLGIrPTY7YnJlYWt9aWYoImxpdGVyYWwiPT09KHM9Zi5hdCgtMSkpLnR5cGV8fCJ2YXIiPT09cy50eXBlKXtmLnB1c2gocyk7YnJlYWt9dT1uZXcgVCh5Kysscy5taW4scy5tYXgpLGZbZi5sZW5ndGgtMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2Uicm9sbCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtpZihvPWYucG9wKCksaT1mLnBvcCgpLCJsaXRlcmFsIiE9PW8udHlwZXx8ImxpdGVyYWwiIT09aS50eXBlKXJldHVybiBudWxsO2lmKGE9by5udW1iZXIsKG49aS5udW1iZXIpPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoYSl8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoMD09KGE9KGElbituKSVuKSlicmVhaztmLnB1c2guYXBwbHkoZixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShrPWYuc3BsaWNlKGYubGVuZ3RoLW4sbi1hKSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oayl8fGQoayl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBmLnB1c2gobmV3IEMobCkpO3ZhciBrO2lmKGYubGVuZ3RoIT09dilyZXR1cm4gbnVsbDtmb3IodmFyIFM9W10seD0wLE89aDt4PE8ubGVuZ3RoO3grKyl7dmFyIEY9T1t4XSxQPW5ldyBFO0YudmlzaXQoUCksUy5wdXNoKFAudG9TdHJpbmcoKSl9Zm9yKHZhciBSPTAsTj1mLmxlbmd0aDtSPE47UisrKXt2YXIgRD1mW1JdLEI9bmV3IEU7RC52aXNpdChCKTt2YXIgVT1yWzIqUl0sJD1yWzIqUisxXSxYPVtCLnRvU3RyaW5nKCldO1U+RC5taW4mJihYLnVuc2hpZnQoIk1hdGgubWF4KCIsVSwiLCAiKSxYLnB1c2goIikiKSksJDxELm1heCYmKFgudW5zaGlmdCgiTWF0aC5taW4oIiwkLCIsICIpLFgucHVzaCgiKSIpKSxYLnVuc2hpZnQoImRlc3RbZGVzdE9mZnNldCArICIsUiwiXSA9ICIpLFgucHVzaCgiOyIpLFMucHVzaChYLmpvaW4oIiIpKX1yZXR1cm4gUy5qb2luKCJcbiIpfX1dKSxlfSgpO3QuUG9zdFNjcmlwdENvbXBpbGVyPVJ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0UGFyc2VyPXQuUG9zdFNjcmlwdExleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG8oZSl9ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gdCYmYyhlLnByb3RvdHlwZSx0KSxyJiZjKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMubGV4ZXI9dCx0aGlzLm9wZXJhdG9ycz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5wcmV2PW51bGx9cmV0dXJuIHUoZSxbe2tleToibmV4dFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJldj10aGlzLnRva2VuLHRoaXMudG9rZW49dGhpcy5sZXhlci5nZXRUb2tlbigpfX0se2tleToiYWNjZXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2tlbi50eXBlPT09ZSYmKHRoaXMubmV4dFRva2VuKCksITApfX0se2tleToiZXhwZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmFjY2VwdChlKSlyZXR1cm4hMDt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICIuY29uY2F0KHRoaXMudG9rZW4udHlwZSwiIGV4cGVjdGVkICIpLmNvbmNhdChlLCIuIikpfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuKCksdGhpcy5leHBlY3QoZi5MQlJBQ0UpLHRoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLm9wZXJhdG9yc319LHtrZXk6InBhcnNlQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDs7KWlmKHRoaXMuYWNjZXB0KGYuTlVNQkVSKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZSBpZih0aGlzLmFjY2VwdChmLk9QRVJBVE9SKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZXtpZighdGhpcy5hY2NlcHQoZi5MQlJBQ0UpKXJldHVybjt0aGlzLnBhcnNlQ29uZGl0aW9uKCl9fX0se2tleToicGFyc2VDb25kaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO2lmKHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdChmLlJCUkFDRSksdGhpcy5hY2NlcHQoZi5JRikpdGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6IjtlbHNle2lmKCF0aGlzLmFjY2VwdChmLkxCUkFDRSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3ZhciB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dmFyIHI9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLmV4cGVjdChmLklGRUxTRSksdGhpcy5vcGVyYXRvcnNbdF09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW3QrMV09ImoiLHRoaXMub3BlcmF0b3JzW2VdPXIsdGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifX19XSksZX0oKTt0LlBvc3RTY3JpcHRQYXJzZXI9bDt2YXIgZj17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ModGhpcyxlKSx0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPXJ9cmV0dXJuIHUoZSxudWxsLFt7a2V5OiJvcENhY2hlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3BDYWNoZSIsT2JqZWN0LmNyZWF0ZShudWxsKSl9fSx7a2V5OiJnZXRPcGVyYXRvciIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUub3BDYWNoZVt0XXx8KGUub3BDYWNoZVt0XT1uZXcgZShmLk9QRVJBVE9SLHQpKX19LHtrZXk6IkxCUkFDRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IGUoZi5MQlJBQ0UsInsiKSl9fSx7a2V5OiJSQlJBQ0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBlKGYuUkJSQUNFLCJ9IikpfX0se2tleToiSUYiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRiIsbmV3IGUoZi5JRiwiSUYiKSl9fSx7a2V5OiJJRkVMU0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBlKGYuSUZFTFNFLCJJRkVMU0UiKSl9fV0pLGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5uZXh0Q2hhcigpLHRoaXMuc3RyQnVmPVtdfXJldHVybiB1KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6ImdldFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxpLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IGgoZi5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxoLkxCUkFDRTtjYXNlIDEyNTpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGguUkJSQUNFfXZhciByPXRoaXMuc3RyQnVmO2ZvcihyLmxlbmd0aD0wLHJbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYodD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyKTspci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO3ZhciBuPXIuam9pbigiIik7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIGguSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBoLklGRUxTRTtkZWZhdWx0OnJldHVybiBoLmdldE9wZXJhdG9yKG4pfX19LHtrZXk6ImdldE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRDaGFyLHQ9dGhpcy5zdHJCdWY7Zm9yKHQubGVuZ3RoPTAsdFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJihlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lKTspdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3ZhciByPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4ocikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAiLmNvbmNhdChyKSk7cmV0dXJuIHJ9fV0pLGV9KCk7dC5Qb3N0U2NyaXB0TGV4ZXI9ZH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KTtmdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0scyhlLHQpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49dShlKTtpZih0KXt2YXIgYT11KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWwodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbChlKX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1sKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWwoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiB0JiZoKGUucHJvdG90eXBlLHQpLHImJmgoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlTG9jYWxDYWNoZS4iKSx0aGlzLl9vbmx5UmVmcz0hMD09PSh0JiZ0Lm9ubHlSZWZzKSx0aGlzLl9vbmx5UmVmc3x8KHRoaXMuX25hbWVSZWZNYXA9bmV3IE1hcCx0aGlzLl9pbWFnZU1hcD1uZXcgTWFwKSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6ImdldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fb25seVJlZnMmJigwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLiIpO3ZhciB0PXRoaXMuX25hbWVSZWZNYXAuZ2V0KGUpO3JldHVybiB0P3RoaXMuZ2V0QnlSZWYodCk6dGhpcy5faW1hZ2VNYXAuZ2V0KGUpfHxudWxsfX0se2tleToiZ2V0QnlSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChlKXx8bnVsbH19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNldGAgY2FsbGVkLiIpfX1dKSxlfSgpLGc9ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBmKHRoaXMsciksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsSW1hZ2VDYWNoZT1nO3ZhciB2PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gZih0aGlzLHIpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBkKHIsW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiBudWxsIT09ZSYmdGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KSx2b2lkIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQscil9dGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxyKX19XSkscn0ocCk7dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT12O3ZhciB5PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx7b25seVJlZnM6ITB9KX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsRnVuY3Rpb25DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9eTt2YXIgbT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGYodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsR1N0YXRlQ2FjaGU9bTt2YXIgYj1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMse29ubHlSZWZzOiEwfSl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLl9yZWZDYWNoZT1uZXcgYS5SZWZTZXRDYWNoZSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6Il9ieXRlU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD0wLHI9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX0odGhpcy5faW1hZ2VDYWNoZSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXQrPWUudmFsdWUuYnl0ZVNpemV9Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHR9fSx7a2V5OiJfY2FjaGVMaW1pdFJlYWNoZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPGUuTUlOX0lNQUdFU19UT19DQUNIRXx8dGhpcy5fYnl0ZVNpemU8ZS5NQVhfQllURV9TSVpFKX19LHtrZXk6InNob3VsZENhY2hlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtyZXR1cm4hKChuP24uc2l6ZSsobi5oYXMocik/MDoxKToxKTxlLk5VTV9QQUdFU19USFJFU0hPTER8fCF0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSYmdGhpcy5fY2FjaGVMaW1pdFJlYWNoZWQpfX0se2tleToiYWRkUGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3JlZkNhY2hlLmdldChlKTtyfHwocj1uZXcgU2V0LHRoaXMuX3JlZkNhY2hlLnB1dChlLHIpKSxyLmFkZCh0KX19LHtrZXk6ImFkZEJ5dGVTaXplIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO3ImJihyLmJ5dGVTaXplfHwoci5ieXRlU2l6ZT10KSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtpZighbilyZXR1cm4gbnVsbDtpZihuLnNpemU8ZS5OVU1fUEFHRVNfVEhSRVNIT0xEKXJldHVybiBudWxsO3ZhciBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHQpO3JldHVybiBhPyhuLmFkZChyKSxhKTpudWxsfX0se2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fcmVmQ2FjaGUuaGFzKGUpKXRocm93IG5ldyBFcnJvcignR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gZXhwZWN0ZWQgImFkZFBhZ2VJbmRleCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkPygwLG4ud2FybikoIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLl9yZWZDYWNoZS5jbGVhcigpLHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKX19XSxbe2tleToiTlVNX1BBR0VTX1RIUkVTSE9MRCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk5VTV9QQUdFU19USFJFU0hPTEQiLDIpfX0se2tleToiTUlOX0lNQUdFU19UT19DQUNIRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1JTl9JTUFHRVNfVE9fQ0FDSEUiLDEwKX19LHtrZXk6Ik1BWF9CWVRFX1NJWkUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfQllURV9TSVpFIiw0ZTcpfX1dKSxlfSgpO3QuR2xvYmFsSW1hZ2VDYWNoZT13fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYmlkaT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTEscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHA9ITAsZz1lLmxlbmd0aDtpZigwPT09Z3x8cilyZXR1cm4gZihlLHAscik7aC5sZW5ndGg9ZyxkLmxlbmd0aD1nO3ZhciB2LHksbT0wO2Zvcih2PTA7djxnOysrdil7aFt2XT1lLmNoYXJBdCh2KTt2YXIgYj1lLmNoYXJDb2RlQXQodiksdz0iTCI7Yjw9MjU1P3c9YVtiXToxNDI0PD1iJiZiPD0xNTI0P3c9IlIiOjE1MzY8PWImJmI8PTE3OTE/KHc9aVsyNTUmYl0pfHwoMCxuLndhcm4pKCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyICIrYi50b1N0cmluZygxNikpOjE3OTI8PWImJmI8PTIyMjAmJih3PSJBTCIpLCJSIiE9PXcmJiJBTCIhPT13JiYiQU4iIT09d3x8bSsrLGRbdl09d31pZigwPT09bSlyZXR1cm4gZihlLHA9ITApOy0xPT09dCYmKG0vZzwuMyYmZz40PyhwPSEwLHQ9MCk6KHA9ITEsdD0xKSk7dmFyIGs9W107Zm9yKHY9MDt2PGc7Kyt2KWtbdl09dDt2YXIgUyx4PW8odCk/IlIiOiJMIixPPXgsQT1PLEM9Tztmb3Iodj0wO3Y8ZzsrK3YpIk5TTSI9PT1kW3ZdP2Rbdl09QzpDPWRbdl07Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iQUwiPT09Qz8iQU4iOiJFTiI6IlIiIT09UyYmIkwiIT09UyYmIkFMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdikiQUwiPT09KFM9ZFt2XSkmJihkW3ZdPSJSIik7Zm9yKHY9MTt2PGctMTsrK3YpIkVTIj09PWRbdl0mJiJFTiI9PT1kW3YtMV0mJiJFTiI9PT1kW3YrMV0mJihkW3ZdPSJFTiIpLCJDUyIhPT1kW3ZdfHwiRU4iIT09ZFt2LTFdJiYiQU4iIT09ZFt2LTFdfHxkW3YrMV0hPT1kW3YtMV18fChkW3ZdPWRbdi0xXSk7Zm9yKHY9MDt2PGc7Kyt2KWlmKCJFTiI9PT1kW3ZdKXtmb3IodmFyIEY9di0xO0Y+PTAmJiJFVCI9PT1kW0ZdOy0tRilkW0ZdPSJFTiI7Zm9yKHZhciBQPXYrMTtQPGcmJiJFVCI9PT1kW1BdOysrUClkW1BdPSJFTiJ9Zm9yKHY9MDt2PGc7Kyt2KSJXUyIhPT0oUz1kW3ZdKSYmIkVTIiE9PVMmJiJFVCIhPT1TJiYiQ1MiIT09U3x8KGRbdl09Ik9OIik7Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iTCI9PT1DPyJMIjoiRU4iOiJSIiE9PVMmJiJMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdilpZigiT04iPT09ZFt2XSl7dmFyIFQ9YyhkLHYrMSwiT04iKSxJPU87dj4wJiYoST1kW3YtMV0pO3ZhciBFPUE7VCsxPGcmJihFPWRbVCsxXSksIkwiIT09SSYmKEk9IlIiKSwiTCIhPT1FJiYoRT0iUiIpLEk9PT1FJiZ1KGQsdixULEkpLHY9VC0xfWZvcih2PTA7djxnOysrdikiT04iPT09ZFt2XSYmKGRbdl09eCk7Zm9yKHY9MDt2PGc7Kyt2KVM9ZFt2XSxzKGtbdl0pPyJSIj09PVM/a1t2XSs9MToiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0yKToiTCIhPT1TJiYiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0xKTt2YXIgaixNPS0xLF89OTk7Zm9yKHY9MCx5PWsubGVuZ3RoO3Y8eTsrK3YpTTwoaj1rW3ZdKSYmKE09aiksXz5qJiZvKGopJiYoXz1qKTtmb3Ioaj1NO2o+PV87LS1qKXt2YXIgTD0tMTtmb3Iodj0wLHk9ay5sZW5ndGg7djx5OysrdilrW3ZdPGo/TD49MCYmKGwoaCxMLHYpLEw9LTEpOkw8MCYmKEw9dik7TD49MCYmbChoLEwsay5sZW5ndGgpfWZvcih2PTAseT1oLmxlbmd0aDt2PHk7Kyt2KXt2YXIgUj1oW3ZdOyI8IiE9PVImJiI+IiE9PVJ8fChoW3ZdPSIiKX1yZXR1cm4gZihoLmpvaW4oIiIpLHApfTt2YXIgbj1yKDIpLGE9WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLGk9WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gYyhlLHQscil7dmFyIG4sYTtmb3Iobj10LGE9ZS5sZW5ndGg7bjxhOysrbilpZihlW25dIT09cilyZXR1cm4gbjtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCxyLG4pe2Zvcih2YXIgYT10O2E8cjsrK2EpZVthXT1ufWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj10LGE9ci0xO248YTsrK24sLS1hKXt2YXIgaT1lW25dO2Vbbl09ZVthXSxlW2FdPWl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0ibHRyIjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXT9yPSJ0dGIiOnR8fChyPSJydGwiKSx7c3RyOmUsZGlyOnJ9fXZhciBoPVtdLGQ9W119LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigyKTtmdW5jdGlvbiBhKGUpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxhKGUpfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxjPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaDE9dD80Mjk0OTY3Mjk1JnQ6byx0aGlzLmgyPXQ/NDI5NDk2NzI5NSZ0Om99dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpLHI9MDtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTthKyspe3ZhciBvPWUuY2hhckNvZGVBdChhKTtvPD0yNTU/dFtyKytdPW86KHRbcisrXT1vPj4+OCx0W3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKGUpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KHQ9ZS5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGw9ci00KnUsZj1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCx1KSxoPTAsZD0wLHA9dGhpcy5oMSxnPXRoaXMuaDIsdj0zNDMyOTE4MzUzLHk9NDYxODQ1OTA3LG09MTE2MDEsYj0xMzcxNSx3PTA7dzx1O3crKykxJnc/cD01KihwPShwXj1oPShoPShoPShoPWZbd10pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2Omc9NSooZz0oZ149ZD0oZD0oZD0oZD1mW3ddKSp2JnN8ZCptJmMpPDwxNXxkPj4+MTcpKnkmc3xkKmImYyk8PDEzfGc+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goaD0wLGwpe2Nhc2UgMzpoXj10WzQqdSsyXTw8MTY7Y2FzZSAyOmhePXRbNCp1KzFdPDw4O2Nhc2UgMTpoPShoPShoPShoXj10WzQqdV0pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjLDEmdT9wXj1oOmdePWh9dGhpcy5oMT1wLHRoaXMuaDI9Z319LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmgxLHQ9dGhpcy5oMjtyZXR1cm4gZT0zOTgxODA2Nzk3KihlXj10Pj4+MSkmc3wzNjA0NSplJmMsZT00NDQ5ODQ0MDMqKGVePSh0PTQyODM1NDM1MTEqdCZzfCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSplJmMsKChlXj0odD0zMzAxODgyMzY2KnQmc3woMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NdXJtdXJIYXNoM182ND11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuT3BlcmF0b3JMaXN0PXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHMoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYyhlKX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1jKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0LHIsbixhKXtmb3IodmFyIGk9ZSxvPTAscz10Lmxlbmd0aC0xO288cztvKyspe3ZhciBjPXRbb107aT1pW2NdfHwoaVtjXT1bXSl9aVt0LmF0KC0xKV09e2NoZWNrRm46cixpdGVyYXRlRm46bixwcm9jZXNzRm46YX19dmFyIGQ9W107aChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxuLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTpyZXR1cm4gclt0XT09PW4uT1BTLnRyYW5zZm9ybTtjYXNlIDI6cmV0dXJuIHJbdF09PT1uLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfXRocm93IG5ldyBFcnJvcigiaXRlcmF0ZUlubGluZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwyMDApO2lmKHU8MTApcmV0dXJuIHQtKHQtbyklNDtmb3IodmFyIGw9MCxmPVtdLGg9MCxkPTEscD0xLGc9MDtnPHU7ZysrKXt2YXIgdj1hW3MrKGc8PDIpXSx5PWFbYysoZzw8MildWzBdO2QreS53aWR0aD4xZTMmJihsPU1hdGgubWF4KGwsZCkscCs9aCsyLGQ9MCxoPTApLGYucHVzaCh7dHJhbnNmb3JtOnYseDpkLHk6cCx3Onkud2lkdGgsaDp5LmhlaWdodH0pLGQrPXkud2lkdGgrMixoPU1hdGgubWF4KGgseS5oZWlnaHQpfWZvcih2YXIgbT1NYXRoLm1heChsLGQpKzEsYj1wK2grMSx3PW5ldyBVaW50OEFycmF5KG0qYio0KSxrPW08PDIsUz0wO1M8dTtTKyspe3ZhciB4PWFbYysoUzw8MildWzBdLmRhdGEsTz1mW1NdLnc8PDIsQT0wLEM9ZltTXS54K2ZbU10ueSptPDwyO3cuc2V0KHguc3ViYXJyYXkoMCxPKSxDLWspO2Zvcih2YXIgRj0wLFA9ZltTXS5oO0Y8UDtGKyspdy5zZXQoeC5zdWJhcnJheShBLEErTyksQyksQSs9TyxDKz1rO2Zvcih3LnNldCh4LnN1YmFycmF5KEEtTyxBKSxDKTtDPj0wOyl4W0MtNF09eFtDXSx4W0MtM109eFtDKzFdLHhbQy0yXT14W0MrMl0seFtDLTFdPXhbQyszXSx4W0MrT109eFtDK08tNF0seFtDK08rMV09eFtDK08tM10seFtDK08rMl09eFtDK08tMl0seFtDK08rM109eFtDK08tMV0sQy09a31yZXR1cm4gci5zcGxpY2Uobyw0KnUsbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW3t3aWR0aDptLGhlaWdodDpiLGtpbmQ6bi5JbWFnZUtpbmQuUkdCQV8zMkJQUCxkYXRhOnd9LGZdKSxvKzF9KSksaChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsbi5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gclt0XT09PW4uT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5mbG9vcigodC1vKS80KTtpZih1PDEwKXJldHVybiB0LSh0LW8pJTQ7dmFyIGwsZixoPSExLGQ9YVtjXVswXSxwPWFbc11bMF0sZz1hW3NdWzFdLHY9YVtzXVsyXSx5PWFbc11bM107aWYoZz09PXYpe2g9ITAsbD1zKzQ7Zm9yKHZhciBtPWMrNCxiPTE7Yjx1O2IrKyxsKz00LG0rPTQpaWYoZj1hW2xdLGFbbV1bMF0hPT1kfHxmWzBdIT09cHx8ZlsxXSE9PWd8fGZbMl0hPT12fHxmWzNdIT09eSl7YjwxMD9oPSExOnU9YjticmVha319aWYoaCl7dT1NYXRoLm1pbih1LDFlMyk7dmFyIHc9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2w9cztmb3IodmFyIGs9MDtrPHU7aysrLGwrPTQpZj1hW2xdLHdbazw8MV09Zls0XSx3WzErKGs8PDEpXT1mWzVdO3Iuc3BsaWNlKG8sNCp1LG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KnUsW2QscCxnLHYseSx3XSl9ZWxzZXt1PU1hdGgubWluKHUsMTAwKTtmb3IodmFyIFM9W10seD0wO3g8dTt4Kyspe2Y9YVtzKyh4PDwyKV07dmFyIE89YVtjKyh4PDwyKV1bMF07Uy5wdXNoKHtkYXRhOk8uZGF0YSx3aWR0aDpPLndpZHRoLGhlaWdodDpPLmhlaWdodCxpbnRlcnBvbGF0ZTpPLmludGVycG9sYXRlLGNvdW50Ok8uY291bnQsdHJhbnNmb3JtOmZ9KX1yLnNwbGljZShvLDQqdSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW1NdKX1yZXR1cm4gbysxfSkpLGgoZCxbbi5PUFMuc2F2ZSxuLk9QUy50cmFuc2Zvcm0sbi5PUFMucGFpbnRJbWFnZVhPYmplY3Qsbi5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTppZihyW3RdIT09bi5PUFMudHJhbnNmb3JtKXJldHVybiExO3ZhciBvPWUuaUN1cnItMixzPWFbb11bMF0sYz1hW29dWzNdO3JldHVybiBhW3RdWzBdPT09cyYmMD09PWFbdF1bMV0mJjA9PT1hW3RdWzJdJiZhW3RdWzNdPT09YztjYXNlIDI6aWYoclt0XSE9PW4uT1BTLnBhaW50SW1hZ2VYT2JqZWN0KXJldHVybiExO3ZhciB1PWFbZS5pQ3Vyci0xXVswXTtyZXR1cm4gYVt0XVswXT09PXU7Y2FzZSAzOnJldHVybiByW3RdPT09bi5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICIuY29uY2F0KGkpKX0pLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixvPWktMyxzPWktMixjPWFbaS0xXVswXSx1PWFbc11bMF0sbD1hW3NdWzNdLGY9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwxZTMpO2lmKGY8MylyZXR1cm4gdC0odC1vKSU0O2Zvcih2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDIqZiksZD1zLHA9MDtwPGY7cCsrLGQrPTQpe3ZhciBnPWFbZF07aFtwPDwxXT1nWzRdLGhbMSsocDw8MSldPWdbNV19dmFyIHY9W2MsdSxsLGhdO3JldHVybiByLnNwbGljZShvLDQqZixuLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KmYsdiksbysxfSkpLGgoZCxbbi5PUFMuYmVnaW5UZXh0LG4uT1BTLnNldEZvbnQsbi5PUFMuc2V0VGV4dE1hdHJpeCxuLk9QUy5zaG93VGV4dCxuLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLmJlZ2luVGV4dDtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy5zZXRGb250O2Nhc2UgMjpyZXR1cm4gclt0XT09PW4uT1BTLnNldFRleHRNYXRyaXg7Y2FzZSAzOmlmKHJbdF0hPT1uLk9QUy5zaG93VGV4dClyZXR1cm4hMTt2YXIgbz1lLmlDdXJyLTMscz1hW29dWzBdLGM9YVtvXVsxXTtyZXR1cm4gYVt0XVswXT09PXMmJmFbdF1bMV09PT1jO2Nhc2UgNDpyZXR1cm4gclt0XT09PW4uT1BTLmVuZFRleHR9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAiLmNvbmNhdChpKSl9KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxhPWUuaUN1cnIsaT1hLTQsbz1hLTMscz1hLTIsYz1hLTEsdT1hLGw9bltvXVswXSxmPW5bb11bMV0saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LWkpLzUpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LWkpJTU7dmFyIGQ9aTtpPj00JiZyW2ktNF09PT1yW29dJiZyW2ktM109PT1yW3NdJiZyW2ktMl09PT1yW2NdJiZyW2ktMV09PT1yW3VdJiZuW2ktNF1bMF09PT1sJiZuW2ktNF1bMV09PT1mJiYoaCsrLGQtPTUpO2Zvcih2YXIgcD1kKzQsZz0xO2c8aDtnKyspci5zcGxpY2UocCwzKSxuLnNwbGljZShwLDMpLHArPTI7cmV0dXJuIHArMX0pKTt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMucXVldWU9dH1yZXR1cm4gZihlLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKSx0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpLHRoaXMuX29wdGltaXplKCl9fSx7a2V5OiJmbHVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGV9KCksZz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShhLGUpO3ZhciB0LHIsbj0odD1hLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1zKHQpO2lmKHIpe3ZhciBhPXModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Yyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGEoZSl7dmFyIHQ7cmV0dXJuIHUodGhpcyxhKSwodD1uLmNhbGwodGhpcyxlKSkuc3RhdGU9bnVsbCx0LmNvbnRleHQ9e2lDdXJyOjAsZm5BcnJheTplLmZuQXJyYXksYXJnc0FycmF5OmUuYXJnc0FycmF5fSx0Lm1hdGNoPW51bGwsdC5sYXN0UHJvY2Vzc2VkPTAsdH1yZXR1cm4gZihhLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWV1ZS5mbkFycmF5LHQ9dGhpcy5sYXN0UHJvY2Vzc2VkLHI9ZS5sZW5ndGgsbj10aGlzLnN0YXRlLGE9dGhpcy5tYXRjaDtpZihufHxhfHx0KzEhPT1yfHxkW2VbdF1dKXtmb3IodmFyIGk9dGhpcy5jb250ZXh0O3Q8cjspe2lmKGEpe2lmKCgwLGEuaXRlcmF0ZUZuKShpLHQpKXt0Kys7Y29udGludWV9aWYodD0oMCxhLnByb2Nlc3NGbikoaSx0KzEpLGE9bnVsbCxuPW51bGwsdD49KHI9ZS5sZW5ndGgpKWJyZWFrfShuPShufHxkKVtlW3RdXSkmJiFBcnJheS5pc0FycmF5KG4pPyhpLmlDdXJyPXQsdCsrLCFuLmNoZWNrRm58fCgwLG4uY2hlY2tGbikoaSk/KGE9bixuPW51bGwpOm49bnVsbCk6dCsrfXRoaXMuc3RhdGU9bix0aGlzLm1hdGNoPWEsdGhpcy5sYXN0UHJvY2Vzc2VkPXR9ZWxzZSB0aGlzLmxhc3RQcm9jZXNzZWQ9cn19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7dGhpcy5tYXRjaDspe3ZhciBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSksdGhpcy5tYXRjaD1udWxsLHRoaXMuc3RhdGU9bnVsbCx0aGlzLl9vcHRpbWl6ZSgpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdGU9bnVsbCx0aGlzLm1hdGNoPW51bGwsdGhpcy5sYXN0UHJvY2Vzc2VkPTB9fV0pLGF9KHApLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt1KHRoaXMsZSksdGhpcy5fc3RyZWFtU2luaz1yLHRoaXMuZm5BcnJheT1bXSx0aGlzLmFyZ3NBcnJheT1bXSwhcnx8dCZuLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBwKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBnKHRoaXMpLHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5fdG90YWxMZW5ndGg9MCx0aGlzLndlaWdodD0wLHRoaXMuX3Jlc29sdmVkPXI/bnVsbDpQcm9taXNlLnJlc29sdmUoKX1yZXR1cm4gZihlLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9fSx7a2V5OiJyZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fX0se2tleToidG90YWxMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH19LHtrZXk6ImFkZE9wIix2YWx1ZTpmdW5jdGlvbih0LHIpe3RoaXMub3B0aW1pemVyLnB1c2godCxyKSx0aGlzLndlaWdodCsrLHRoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFX0FCT1VUJiYodD09PW4uT1BTLnJlc3RvcmV8fHQ9PT1uLk9QUy5lbmRUZXh0KSkmJnRoaXMuZmx1c2goKX19LHtrZXk6ImFkZEltYWdlT3BzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dm9pZCAwIT09ciYmdGhpcy5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixyXSksdGhpcy5hZGRPcChlLHQpLHZvaWQgMCE9PXImJnRoaXMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSl9fSx7a2V5OiJhZGREZXBlbmRlbmN5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSl8fCh0aGlzLmRlcGVuZGVuY2llcy5hZGQoZSksdGhpcy5hZGRPcChuLk9QUy5kZXBlbmRlbmN5LFtlXSkpfX0se2tleToiYWRkRGVwZW5kZW5jaWVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWEoZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO3RoaXMuYWRkRGVwZW5kZW5jeShuKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9fX0se2tleToiYWRkT3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZSl7dmFyIHIsaT1hKHQuZGVwZW5kZW5jaWVzKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1mb3IodmFyIHM9MCxjPXQubGVuZ3RoO3M8YztzKyspdGhpcy5hZGRPcCh0LmZuQXJyYXlbc10sdC5hcmdzQXJyYXlbc10pfWVsc2UoMCxuLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX19LHtrZXk6Il90cmFuc2ZlcnMiLGdldDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuZm5BcnJheSxyPXRoaXMuYXJnc0FycmF5LGE9dGhpcy5sZW5ndGgsaT0wO2k8YTtpKyspc3dpdGNoKHRbaV0pe2Nhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6Y2FzZSBuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOmNhc2Ugbi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OnZhciBvPXJbaV1bMF07IW8uY2FjaGVkJiZvLmRhdGEmJm8uZGF0YS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKG8uZGF0YS5idWZmZXIpfXJldHVybiBlfX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMub3B0aW1pemVyLmZsdXNoKCk7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6cn0sMSx0aGlzLl90cmFuc2ZlcnMpLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5mbkFycmF5Lmxlbmd0aD0wLHRoaXMuYXJnc0FycmF5Lmxlbmd0aD0wLHRoaXMud2VpZ2h0PTAsdGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19XSxbe2tleToiQ0hVTktfU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkUiLDFlMyl9fSx7a2V5OiJDSFVOS19TSVpFX0FCT1VUIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiQ0hVTktfU0laRV9BQk9VVCIsdGhpcy5DSFVOS19TSVpFLTUpfX1dKSxlfSgpO3QuT3BlcmF0b3JMaXN0PXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTkzKSxpPXIoMTM2KSxvPXIoMTQzKSxzPXIoMTQ4KSxjPXIoMTU2KSx1PXIoMTU5KSxsPXIoMTM0KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWYoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscixuKXtyZXR1cm4oZT10K2Uqcik8MD9lPTA6ZT5uJiYoZT1uKSxlfWZ1bmN0aW9uIHYoZSx0LHIsbixhLGkpe3ZhciBvLHM9YSppO289dDw9OD9uZXcgVWludDhBcnJheShzKTp0PD0xNj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQzMkFycmF5KHMpO3ZhciBjLHUsbCxmLGg9ci9hLGQ9bi9pLHA9MCxnPW5ldyBVaW50MTZBcnJheShhKSx2PXI7Zm9yKGM9MDtjPGE7YysrKWdbY109TWF0aC5mbG9vcihjKmgpO2ZvcihjPTA7YzxpO2MrKylmb3IobD1NYXRoLmZsb29yKGMqZCkqdix1PTA7dTxhO3UrKylmPWwrZ1t1XSxvW3ArK109ZVtmXTtyZXR1cm4gb312YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLGE9dC5yZXMscz10LmltYWdlLGM9dC5pc0lubGluZSxmPXZvaWQgMCE9PWMmJmMsaD10LnNtYXNrLGQ9dm9pZCAwPT09aD9udWxsOmgscD10Lm1hc2ssZz12b2lkIDA9PT1wP251bGw6cCx2PXQuaXNNYXNrLHk9dm9pZCAwIT09diYmdixtPXQucGRmRnVuY3Rpb25GYWN0b3J5LGI9dC5sb2NhbENvbG9yU3BhY2VDYWNoZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmltYWdlPXM7dmFyIHcsaz1zLmRpY3QsUz1rLmdldCgiRiIsIkZpbHRlciIpO2lmKFMgaW5zdGFuY2VvZiBsLk5hbWUpdz1TLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KFMpKXt2YXIgeD1yLmZldGNoSWZSZWYoU1swXSk7eCBpbnN0YW5jZW9mIGwuTmFtZSYmKHc9eC5uYW1lKX1zd2l0Y2godyl7Y2FzZSJKUFhEZWNvZGUiOnZhciBPPW5ldyB1LkpweEltYWdlO08ucGFyc2VJbWFnZVByb3BlcnRpZXMocy5zdHJlYW0pLHMuc3RyZWFtLnJlc2V0KCkscy53aWR0aD1PLndpZHRoLHMuaGVpZ2h0PU8uaGVpZ2h0LHMuYml0c1BlckNvbXBvbmVudD1PLmJpdHNQZXJDb21wb25lbnQscy5udW1Db21wcz1PLmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpzLmJpdHNQZXJDb21wb25lbnQ9MSxzLm51bUNvbXBzPTF9dmFyIEE9ay5nZXQoIlciLCJXaWR0aCIpLEM9ay5nZXQoIkgiLCJIZWlnaHQiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHMud2lkdGgpJiZzLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIocy5oZWlnaHQpJiZzLmhlaWdodD4wJiYocy53aWR0aCE9PUF8fHMuaGVpZ2h0IT09QykmJigoMCxuLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpLEE9cy53aWR0aCxDPXMuaGVpZ2h0KSxBPDF8fEM8MSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBpbWFnZSB3aWR0aDogIi5jb25jYXQoQSwiIG9yIGhlaWdodDogIikuY29uY2F0KEMpKTt0aGlzLndpZHRoPUEsdGhpcy5oZWlnaHQ9Qyx0aGlzLmludGVycG9sYXRlPWsuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSx0aGlzLmltYWdlTWFzaz1rLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITEsdGhpcy5tYXR0ZT1rLmdldCgiTWF0dGUiKXx8ITE7dmFyIEY9cy5iaXRzUGVyQ29tcG9uZW50O2lmKCFGJiYhKEY9ay5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKSkpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICIuY29uY2F0KHRoaXMuaW1hZ2VNYXNrKSk7Rj0xfWlmKHRoaXMuYnBjPUYsIXRoaXMuaW1hZ2VNYXNrKXt2YXIgUD1rLmdldFJhdygiQ1MiKXx8ay5nZXRSYXcoIkNvbG9yU3BhY2UiKTtpZighUClzd2l0Y2goKDAsbi5pbmZvKSgiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKSIpLHMubnVtQ29tcHMpe2Nhc2UgMTpQPWwuTmFtZS5nZXQoIkRldmljZUdyYXkiKTticmVhaztjYXNlIDM6UD1sLk5hbWUuZ2V0KCJEZXZpY2VSR0IiKTticmVhaztjYXNlIDQ6UD1sLk5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkpQWCBpbWFnZXMgd2l0aCAiLmNvbmNhdChzLm51bUNvbXBzLCIgY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLiIpKX10aGlzLmNvbG9yU3BhY2U9by5Db2xvclNwYWNlLnBhcnNlKHtjczpQLHhyZWY6cixyZXNvdXJjZXM6Zj9hOm51bGwscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pLHRoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzfWlmKHRoaXMuZGVjb2RlPWsuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKSx0aGlzLm5lZWRzRGVjb2RlPSExLHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSxGKXx8eSYmIW8uQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO3ZhciBUPSgxPDxGKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdLHRoaXMuZGVjb2RlQWRkZW5kcz1bXTtmb3IodmFyIEk9dGhpcy5jb2xvclNwYWNlJiYiSW5kZXhlZCI9PT10aGlzLmNvbG9yU3BhY2UubmFtZSxFPTAsaj0wO0U8dGhpcy5kZWNvZGUubGVuZ3RoO0UrPTIsKytqKXt2YXIgTT10aGlzLmRlY29kZVtFXSxfPXRoaXMuZGVjb2RlW0UrMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbal09ST8oXy1NKS9UOl8tTSx0aGlzLmRlY29kZUFkZGVuZHNbal09ST9NOlQqTX19ZD90aGlzLnNtYXNrPW5ldyBlKHt4cmVmOnIscmVzOmEsaW1hZ2U6ZCxpc0lubGluZTpmLHBkZkZ1bmN0aW9uRmFjdG9yeTptLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmJ9KTpnJiYoZyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9nLmRpY3QuZ2V0KCJJTSIsIkltYWdlTWFzayIpP3RoaXMubWFzaz1uZXcgZSh7eHJlZjpyLHJlczphLGltYWdlOmcsaXNJbmxpbmU6Zixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pOigwLG4ud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKTp0aGlzLm1hc2s9Zyl9dmFyIHQscixmLHksbTtyZXR1cm4gdD1lLHI9W3trZXk6ImRyYXdXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMud2lkdGgsdGhpcy5zbWFzayYmdGhpcy5zbWFzay53aWR0aHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay53aWR0aHx8MCl9fSx7a2V5OiJkcmF3SGVpZ2h0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsdGhpcy5zbWFzayYmdGhpcy5zbWFzay5oZWlnaHR8fDAsdGhpcy5tYXNrJiZ0aGlzLm1hc2suaGVpZ2h0fHwwKX19LHtrZXk6ImRlY29kZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxpPXRoaXMuZGVjb2RlQWRkZW5kcyxvPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLHM9KDE8PG4pLTE7aWYoMSE9PW4pe3ZhciBjPTA7Zm9yKHQ9MCxyPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7dDxyO3QrKylmb3IodmFyIHU9MDt1PGE7dSsrKWVbY109ZyhlW2NdLGlbdV0sb1t1XSxzKSxjKyt9ZWxzZSBmb3IodD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyllW3RdPSshZVt0XX19LHtrZXk6ImdldENvbXBvbmVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO3ZhciByLG49dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LGk9dGhpcy5udW1Db21wcyxvPW4qYSppLHM9MDtyPXQ8PTg/bmV3IFVpbnQ4QXJyYXkobyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KG8pOm5ldyBVaW50MzJBcnJheShvKTt2YXIgYyx1LGw9bippLGY9KDE8PHQpLTEsaD0wO2lmKDE9PT10KWZvcih2YXIgZCxwLGcsdj0wO3Y8YTt2Kyspe2ZvcihwPWgrKC04JmwpLGc9aCtsO2g8cDspdT1lW3MrK10scltoXT11Pj43JjEscltoKzFdPXU+PjYmMSxyW2grMl09dT4+NSYxLHJbaCszXT11Pj40JjEscltoKzRdPXU+PjMmMSxyW2grNV09dT4+MiYxLHJbaCs2XT11Pj4xJjEscltoKzddPTEmdSxoKz04O2lmKGg8Zylmb3IodT1lW3MrK10sZD0xMjg7aDxnOylyW2grK109KyEhKHUmZCksZD4+PTF9ZWxzZXt2YXIgeT0wO2Zvcih1PTAsaD0wLGM9bztoPGM7KytoKXtmb3IoaCVsPT0wJiYodT0wLHk9MCk7eTx0Oyl1PXU8PDh8ZVtzKytdLHkrPTg7dmFyIG09eS10LGI9dT4+bTtiPDA/Yj0wOmI+ZiYmKGI9ZikscltoXT1iLHUmPSgxPDxtKS0xLHk9bX19cmV0dXJuIHJ9fSx7a2V5OiJmaWxsT3BhY2l0eSIsdmFsdWU6ZnVuY3Rpb24odCxyLGEsaSxvKXt2YXIgcyxjLHUsbCxmLGgsZD10aGlzLnNtYXNrLHA9dGhpcy5tYXNrO2lmKGQpYz1kLndpZHRoLHU9ZC5oZWlnaHQscz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYyp1KSxkLmZpbGxHcmF5QnVmZmVyKHMpLGM9PT1yJiZ1PT09YXx8KHM9dihzLGQuYnBjLGMsdSxyLGEpKTtlbHNlIGlmKHApaWYocCBpbnN0YW5jZW9mIGUpe2ZvcihjPXAud2lkdGgsdT1wLmhlaWdodCxzPW5ldyBVaW50OENsYW1wZWRBcnJheShjKnUpLHAubnVtQ29tcHM9MSxwLmZpbGxHcmF5QnVmZmVyKHMpLGw9MCxmPWMqdTtsPGY7KytsKXNbbF09MjU1LXNbbF07Yz09PXImJnU9PT1hfHwocz12KHMscC5icGMsYyx1LHIsYSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkocCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7cz1uZXcgVWludDhDbGFtcGVkQXJyYXkociphKTt2YXIgZz10aGlzLm51bUNvbXBzO2ZvcihsPTAsZj1yKmE7bDxmOysrbCl7dmFyIHk9MCxtPWwqZztmb3IoaD0wO2g8ZzsrK2gpe3ZhciBiPW9bbStoXSx3PTIqaDtpZihiPHBbd118fGI+cFt3KzFdKXt5PTI1NTticmVha319c1tsXT15fX1pZihzKWZvcihsPTAsaD0zLGY9cippO2w8ZjsrK2wsaCs9NCl0W2hdPXNbbF07ZWxzZSBmb3IobD0wLGg9MyxmPXIqaTtsPGY7KytsLGgrPTQpdFtoXT0yNTV9fSx7a2V5OiJ1bmRvUHJlYmxlbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLm1hdHRlO2lmKG4pZm9yKHZhciBhPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IobiwwKSxpPWFbMF0sbz1hWzFdLHM9YVsyXSxjPXQqcio0LHU9MDt1PGM7dSs9NCl7dmFyIGw9ZVt1KzNdO2lmKDAhPT1sKXt2YXIgZj0yNTUvbDtlW3VdPShlW3VdLWkpKmYraSxlW3UrMV09KGVbdSsxXS1vKSpmK28sZVt1KzJdPShlW3UrMl0tcykqZitzfWVsc2UgZVt1XT0yNTUsZVt1KzFdPTI1NSxlW3UrMl09MjU1fX19LHtrZXk6ImNyZWF0ZUltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9dGhpcy5kcmF3V2lkdGgscj10aGlzLmRyYXdIZWlnaHQsYT17d2lkdGg6dCxoZWlnaHQ6cixpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LGk9dGhpcy5udW1Db21wcyxvPXRoaXMud2lkdGgscz10aGlzLmhlaWdodCx1PXRoaXMuYnBjLGw9byppKnUrNz4+MztpZighZSl7dmFyIGY7aWYoIkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT11P2Y9bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PXV8fHRoaXMubmVlZHNEZWNvZGV8fChmPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCksZiYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnQ9PT1vJiZyPT09cyl7aWYoYS5raW5kPWYsYS5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhzKmwse30pLHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShmPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2Zvcih2YXIgaD1hLmRhdGEsZD0wLHA9aC5sZW5ndGg7ZDxwO2QrKyloW2RdXj0yNTV9cmV0dXJuIGF9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe3ZhciBnPXMqbDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6Zyo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gYS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxhLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGcse2RyYXdXaWR0aDp0LGRyYXdIZWlnaHQ6cixmb3JjZVJHQjohMH0pLGF9fX12YXIgdix5LG09dGhpcy5nZXRJbWFnZUJ5dGVzKHMqbCx7aW50ZXJuYWw6ITB9KSxiPTB8bS5sZW5ndGgvbCpyL3Msdz10aGlzLmdldENvbXBvbmVudHMobSk7cmV0dXJuIGV8fHRoaXMuc21hc2t8fHRoaXMubWFzaz8oYS5raW5kPW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFAsYS5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KnIqNCksdj0xLHk9ITAsdGhpcy5maWxsT3BhY2l0eShhLmRhdGEsdCxyLGIsdykpOihhLmtpbmQ9bi5JbWFnZUtpbmQuUkdCXzI0QlBQLGEuZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCpyKjMpLHY9MCx5PSExKSx0aGlzLm5lZWRzRGVjb2RlJiZ0aGlzLmRlY29kZUJ1ZmZlcih3KSx0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihhLmRhdGEsbyxzLHQscixiLHUsdyx2KSx5JiZ0aGlzLnVuZG9QcmVibGVuZChhLmRhdGEsdCxiKSxhfX0se2tleToiZmlsbEdyYXlCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICIuY29uY2F0KHQpKTt2YXIgcixhLGk9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LHM9dGhpcy5icGMsYz1pKnQqcys3Pj4zLHU9dGhpcy5nZXRJbWFnZUJ5dGVzKG8qYyx7aW50ZXJuYWw6ITB9KSxsPXRoaXMuZ2V0Q29tcG9uZW50cyh1KTtpZigxIT09cyl7dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobCksYT1pKm87dmFyIGY9MjU1LygoMTw8cyktMSk7Zm9yKHI9MDtyPGE7KytyKWVbcl09ZipsW3JdfWVsc2UgaWYoYT1pKm8sdGhpcy5uZWVkc0RlY29kZSlmb3Iocj0wO3I8YTsrK3IpZVtyXT1sW3JdLTEmMjU1O2Vsc2UgZm9yKHI9MDtyPGE7KytyKWVbcl09MjU1Ji1sW3JdfX0se2tleToiZ2V0SW1hZ2VCeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmRyYXdXaWR0aCxhPXQuZHJhd0hlaWdodCxpPXQuZm9yY2VSR0Isbz12b2lkIDAhPT1pJiZpLGM9dC5pbnRlcm5hbCx1PXZvaWQgMCE9PWMmJmM7dGhpcy5pbWFnZS5yZXNldCgpLHRoaXMuaW1hZ2UuZHJhd1dpZHRoPXJ8fHRoaXMud2lkdGgsdGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0LHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFvO3ZhciBsPXRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSk7cmV0dXJuIHV8fHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBzLkRlY29kZVN0cmVhbT9sOigoMCxuLmFzc2VydCkobCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksJ1BERkltYWdlLmdldEltYWdlQnl0ZXM6IFVuc3VwcG9ydGVkICJpbWFnZUJ5dGVzIiB0eXBlLicpLG5ldyBVaW50OEFycmF5KGwpKX19XSxmPVt7a2V5OiJidWlsZEltYWdlIix2YWx1ZTooeT1oKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgYSxvLHMsYyx1LGwsZixkLHAsZyx2LHk7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gYT1yLnhyZWYsbz1yLnJlcyxzPXIuaW1hZ2UsYz1yLmlzSW5saW5lLHU9dm9pZCAwIT09YyYmYyxsPXIucGRmRnVuY3Rpb25GYWN0b3J5LGY9ci5sb2NhbENvbG9yU3BhY2VDYWNoZSxkPXMscD1udWxsLGc9bnVsbCx2PXMuZGljdC5nZXQoIlNNYXNrIikseT1zLmRpY3QuZ2V0KCJNYXNrIiksdj92IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP3A9djooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOnkmJih5IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KHkpP2c9eTooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpLHQuYWJydXB0KCJyZXR1cm4iLG5ldyBlKHt4cmVmOmEscmVzOm8saW1hZ2U6ZCxpc0lubGluZTp1LHNtYXNrOnAsbWFzazpnLHBkZkZ1bmN0aW9uRmFjdG9yeTpsLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSksbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXkuYXBwbHkoZSx0KTtmdW5jdGlvbiBpKGUpe2QoYSxyLG4saSxvLCJuZXh0IixlKX1mdW5jdGlvbiBvKGUpe2QoYSxyLG4saSxvLCJ0aHJvdyIsZSl9aSh2b2lkIDApfSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY3JlYXRlUmF3TWFzayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUuaW1nQXJyYXksYT1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PShhKzc+PjMpKmksbD1uLmJ5dGVMZW5ndGg7aWYoIW98fHMmJnUhPT1sP3M/KCh0PW5ldyBVaW50OEFycmF5KHUpKS5zZXQobiksdC5maWxsKDI1NSxsKSk6dD1uZXcgVWludDhBcnJheShuKTp0PW4scylmb3Iocj0wO3I8bDtyKyspdFtyXV49MjU1O3JldHVybntkYXRhOnQsd2lkdGg6YSxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpjfX19LHtrZXk6ImNyZWF0ZU1hc2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW1nQXJyYXkscj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PWUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsbD12b2lkIDA9PT11fHx1LGY9MT09PXImJjE9PT1pJiZzPT09KDA9PT10Lmxlbmd0aHx8ISEoMTI4JnRbMF0pKTtpZihmKXJldHVybntpc1NpbmdsZU9wYXF1ZVBpeGVsOmZ9O2lmKGwmJm4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe3ZhciBoPW5ldyBPZmZzY3JlZW5DYW52YXMocixpKSxkPWguZ2V0Q29udGV4dCgiMmQiKSxwPWQuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7cmV0dXJuKDAsYS5hcHBseU1hc2tJbWFnZURhdGEpKHtzcmM6dCxkZXN0OnAuZGF0YSx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6c30pLGQucHV0SW1hZ2VEYXRhKHAsMCwwKSx7ZGF0YTpudWxsLHdpZHRoOnIsaGVpZ2h0OmksaW50ZXJwb2xhdGU6YyxiaXRtYXA6aC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX19cmV0dXJuIHRoaXMuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6dCx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6cyxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpvLGludGVycG9sYXRlOmN9KX19XSxyJiZwKHQucHJvdG90eXBlLHIpLGYmJnAodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuUERGSW1hZ2U9eX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFwcGx5TWFza0ltYWdlRGF0YT1mdW5jdGlvbihlKXt2YXIgdCxyPWUuc3JjLGk9ZS5zcmNQb3Msbz12b2lkIDA9PT1pPzA6aSxzPWUuZGVzdCxjPWUuZGVzdFBvcyx1PXZvaWQgMD09PWM/MDpjLGw9ZS53aWR0aCxmPWUuaGVpZ2h0LGg9ZS5pbnZlcnNlRGVjb2RlLGQ9dm9pZCAwIT09aCYmaCxwPW4uRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsZz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0PWQ/WzAscF06W3AsMF0pfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLDIpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSwyKTp2b2lkIDB9fSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpLHY9Z1swXSx5PWdbMV0sbT1sPj4zLGI9NyZsLHc9ci5sZW5ndGg7cz1uZXcgVWludDMyQXJyYXkocy5idWZmZXIpO2Zvcih2YXIgaz0wO2s8ZjtrKyspe2Zvcih2YXIgUz1vK207bzxTO28rKyl7dmFyIHg9bzx3P3Jbb106MjU1O3NbdSsrXT0xMjgmeD95OnYsc1t1KytdPTY0Jng/eTp2LHNbdSsrXT0zMiZ4P3k6dixzW3UrK109MTYmeD95OnYsc1t1KytdPTgmeD95OnYsc1t1KytdPTQmeD95OnYsc1t1KytdPTImeD95OnYsc1t1KytdPTEmeD95OnZ9aWYoMCE9PWIpZm9yKHZhciBPPW88dz9yW28rK106MjU1LEE9MDtBPGI7QSsrKXNbdSsrXT1PJjE8PDctQT95OnZ9cmV0dXJue3NyY1BvczpvLGRlc3RQb3M6dX19O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmluY3JlbWVudGFsVXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luYWxEYXRhLHI9ZS54cmVmSW5mbyxzPWUubmV3UmVmcyx1PWUueHJlZixoPXZvaWQgMD09PXU/bnVsbDp1LGc9ZS5oYXNYZmEsdj12b2lkIDAhPT1nJiZnLGI9ZS54ZmFEYXRhc2V0c1JlZix3PXZvaWQgMD09PWI/bnVsbDpiLGs9ZS5oYXNYZmFEYXRhc2V0c0VudHJ5LFM9dm9pZCAwIT09ayYmayx4PWUubmVlZEFwcGVhcmFuY2VzLE89ZS5hY3JvRm9ybVJlZixBPXZvaWQgMD09PU8/bnVsbDpPLEM9ZS5hY3JvRm9ybSxGPXZvaWQgMD09PUM/bnVsbDpDLFA9ZS54ZmFEYXRhLFQ9dm9pZCAwPT09UD9udWxsOlA7KGZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuYWNyb0Zvcm0saT1lLmFjcm9Gb3JtUmVmLG89ZS5oYXNYZmEscz1lLmhhc1hmYURhdGFzZXRzRW50cnksYz1lLnhmYURhdGFzZXRzUmVmLHU9ZS5uZWVkQXBwZWFyYW5jZXMsZj1lLm5ld1JlZnM7aWYoIW98fHN8fGN8fCgwLG4ud2FybikoIlhGQSAtIENhbm5vdCBzYXZlIGl0IiksdXx8byYmYyl7dmFyIGgscD1uZXcgYS5EaWN0KHQpLGc9bChyLmdldEtleXMoKSk7dHJ5e2ZvcihnLnMoKTshKGg9Zy5uKCkpLmRvbmU7KXt2YXIgdj1oLnZhbHVlO3Auc2V0KHYsci5nZXRSYXcodikpfX1jYXRjaChlKXtnLmUoZSl9ZmluYWxseXtnLmYoKX1pZihvJiYhcyl7dmFyIHk9ci5nZXQoIlhGQSIpLnNsaWNlKCk7eS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpLHkuc3BsaWNlKDMsMCxjKSxwLnNldCgiWEZBIix5KX11JiZwLnNldCgiTmVlZEFwcGVhcmFuY2VzIiwhMCk7dmFyIG09dC5lbmNyeXB0LGI9bnVsbDttJiYoYj1tLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShpLm51bSxpLmdlbikpO3ZhciB3PVtdO2QoaSxwLHcsYiksZi5wdXNoKHtyZWY6aSxkYXRhOncuam9pbigiIil9KX19KSh7eHJlZjpoLGFjcm9Gb3JtOkYsYWNyb0Zvcm1SZWY6QSxoYXNYZmE6dixoYXNYZmFEYXRhc2V0c0VudHJ5OlMseGZhRGF0YXNldHNSZWY6dyxuZWVkQXBwZWFyYW5jZXM6eCxuZXdSZWZzOnN9KSx2JiZmdW5jdGlvbihlKXt2YXIgdD1lLnhmYURhdGEscj1lLnhmYURhdGFzZXRzUmVmLGE9ZS5uZXdSZWZzLHM9ZS54cmVmO251bGw9PT10JiYodD1mdW5jdGlvbihlLHQpe3ZhciByLGE9bmV3IG8uU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpLHM9bCh0KTt0cnl7Zm9yKHMucygpOyEocj1zLm4oKSkuZG9uZTspe3ZhciBjPXIudmFsdWUueGZhO2lmKGMpe3ZhciB1PWMucGF0aCxmPWMudmFsdWU7aWYodSl7dmFyIGg9YS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZSgoMCxpLnBhcnNlWEZBUGF0aCkodSksMCk7aD9BcnJheS5pc0FycmF5KGYpP2guY2hpbGROb2Rlcz1mLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKX0pKTpoLmNoaWxkTm9kZXM9W25ldyBvLlNpbXBsZURPTU5vZGUoIiN0ZXh0IixmKV06KDAsbi53YXJuKSgiTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICIuY29uY2F0KHUpKX19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgZD1bXTtyZXR1cm4gYS5kb2N1bWVudEVsZW1lbnQuZHVtcChkKSxkLmpvaW4oIiIpfShzLmZldGNoSWZSZWYocikuZ2V0U3RyaW5nKCksYSkpO3ZhciBjPXMuZW5jcnlwdDtjJiYodD1jLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLm51bSxyLmdlbikuZW5jcnlwdFN0cmluZyh0KSk7dmFyIHU9IiIuY29uY2F0KHIubnVtLCIgIikuY29uY2F0KHIuZ2VuLCIgb2JqXG4iKSsiPDwgL1R5cGUgL0VtYmVkZGVkRmlsZSAvTGVuZ3RoICIuY29uY2F0KHQubGVuZ3RoLCI+Plxuc3RyZWFtXG4iKSt0KyJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iO2EucHVzaCh7cmVmOnIsZGF0YTp1fSl9KHt4ZmFEYXRhOlQseGZhRGF0YXNldHNSZWY6dyxuZXdSZWZzOnMseHJlZjpofSk7dmFyIEksRSxqPW5ldyBhLkRpY3QobnVsbCksTT1yLm5ld1JlZixfPXQuYXQoLTEpOzEwPT09X3x8MTM9PT1fPyhJPVtdLEU9dC5sZW5ndGgpOihJPVsiXG4iXSxFPXQubGVuZ3RoKzEpLGouc2V0KCJTaXplIixNLm51bSsxKSxqLnNldCgiUHJldiIsci5zdGFydFhSZWYpLGouc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYUmVmIikpLG51bGwhPT1yLnJvb3RSZWYmJmouc2V0KCJSb290IixyLnJvb3RSZWYpLG51bGwhPT1yLmluZm9SZWYmJmouc2V0KCJJbmZvIixyLmluZm9SZWYpLG51bGwhPT1yLmVuY3J5cHRSZWYmJmouc2V0KCJFbmNyeXB0IixyLmVuY3J5cHRSZWYpLHMucHVzaCh7cmVmOk0sZGF0YToiIn0pO3ZhciBMLFI9W1swLDEsNjU1MzVdXSxOPVswLDFdLEQ9MCxCPWwocz1zLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVmLm51bS10LnJlZi5udW19KSkpO3RyeXtmb3IoQi5zKCk7IShMPUIubigpKS5kb25lOyl7dmFyIFU9TC52YWx1ZSwkPVUucmVmLFg9VS5kYXRhO0Q9TWF0aC5tYXgoRCxFKSxSLnB1c2goWzEsRSxNYXRoLm1pbigkLmdlbiw2NTUzNSldKSxFKz1YLmxlbmd0aCxOLnB1c2goJC5udW0sMSksSS5wdXNoKFgpfX1jYXRjaChlKXtCLmUoZSl9ZmluYWxseXtCLmYoKX1pZihqLnNldCgiSW5kZXgiLE4pLEFycmF5LmlzQXJyYXkoci5maWxlSWRzKSYmci5maWxlSWRzLmxlbmd0aD4wKXt2YXIgSD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxhPXQuZmlsZW5hbWV8fCIiLGk9W3IudG9TdHJpbmcoKSxhLGUudG9TdHJpbmcoKV0sbz1pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLHM9MCx1PU9iamVjdC52YWx1ZXModC5pbmZvKTtzPHUubGVuZ3RoO3MrKyl7dmFyIGw9dVtzXTtpLnB1c2gobCksbys9bC5sZW5ndGh9Zm9yKHZhciBmPW5ldyBVaW50OEFycmF5KG8pLGg9MCxkPTAscD1pO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1wW2RdO20oZyxoLGYpLGgrPWcubGVuZ3RofXJldHVybigwLG4uYnl0ZXNUb1N0cmluZykoKDAsYy5jYWxjdWxhdGVNRDUpKGYpKX0oRSxyKTtqLnNldCgiSUQiLFtyLmZpbGVJZHNbMF0sSF0pfXZhciBxPVsxLE1hdGguY2VpbChNYXRoLmxvZzIoRCkvOCksMl0sRz0ocVswXStxWzFdK3FbMl0pKlIubGVuZ3RoO2ouc2V0KCJXIixxKSxqLnNldCgiTGVuZ3RoIixHKSxJLnB1c2goIiIuY29uY2F0KE0ubnVtLCIgIikuY29uY2F0KE0uZ2VuLCIgb2JqXG4iKSkscChqLEksbnVsbCksSS5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgej1JLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLFc9IlxuZW5kc3RyZWFtXG5lbmRvYmpcbnN0YXJ0eHJlZlxuIi5jb25jYXQoRSwiXG4lJUVPRlxuIiksVj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCt6K0crVy5sZW5ndGgpO1Yuc2V0KHQpO3ZhciBZLEssSj10Lmxlbmd0aCxaPWwoSSk7dHJ5e2ZvcihaLnMoKTshKFk9Wi5uKCkpLmRvbmU7KXt2YXIgUT1ZLnZhbHVlO20oUSxKLFYpLEorPVEubGVuZ3RofX1jYXRjaChlKXtaLmUoZSl9ZmluYWxseXtaLmYoKX1mb3IodmFyIGVlPTAsdGU9UjtlZTx0ZS5sZW5ndGg7ZWUrKyl7dmFyIHJlPSgzLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KEs9dGVbZWVdKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwzIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KEspfHxmKEssMyl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksbmU9cmVbMF0sYWU9cmVbMV0saWU9cmVbMl07Sj15KG5lLHFbMF0sSixWKSxKPXkoYWUscVsxXSxKLFYpLEo9eShpZSxxWzJdLEosVil9cmV0dXJuIG0oVyxKLFYpLFZ9LHQud3JpdGVEaWN0PXAsdC53cml0ZU9iamVjdD1kO3ZhciBuPXIoMiksYT1yKDEzNCksaT1yKDEzNSksbz1yKDE5NSkscz1yKDEzNiksYz1yKDE5Nik7ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sdShlKX1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBoKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gaChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGQoZSx0LHIsbil7ci5wdXNoKCIiLmNvbmNhdChlLm51bSwiICIpLmNvbmNhdChlLmdlbiwiIG9ialxuIikpLHQgaW5zdGFuY2VvZiBhLkRpY3Q/cCh0LHIsbik6dCBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSYmZyh0LHIsbiksci5wdXNoKCJcbmVuZG9ialxuIil9ZnVuY3Rpb24gcChlLHQscil7dC5wdXNoKCI8PCIpO3ZhciBuLGE9bChlLmdldEtleXMoKSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO3QucHVzaCgiIC8iLmNvbmNhdCgoMCxpLmVzY2FwZVBERk5hbWUpKG8pLCIgIikpLHYoZS5nZXRSYXcobyksdCxyKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dC5wdXNoKCI+PiIpfWZ1bmN0aW9uIGcoZSx0LHIpe3AoZS5kaWN0LHQsciksdC5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgbj1lLmdldFN0cmluZygpO251bGwhPT1yJiYobj1yLmVuY3J5cHRTdHJpbmcobikpLHQucHVzaChuLCJcbmVuZHN0cmVhbSIpfWZ1bmN0aW9uIHYoZSx0LHIpe2UgaW5zdGFuY2VvZiBhLk5hbWU/dC5wdXNoKCIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShlLm5hbWUpKSk6ZSBpbnN0YW5jZW9mIGEuUmVmP3QucHVzaCgiIi5jb25jYXQoZS5udW0sIiAiKS5jb25jYXQoZS5nZW4sIiBSIikpOkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24oZSx0LHIpe3QucHVzaCgiWyIpO3ZhciBuLGE9ITAsaT1sKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTthP2E9ITE6dC5wdXNoKCIgIiksdihvLHQscil9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXQucHVzaCgiXSIpfShlLHQscik6InN0cmluZyI9PXR5cGVvZiBlPyhudWxsIT09ciYmKGU9ci5lbmNyeXB0U3RyaW5nKGUpKSx0LnB1c2goIigiLmNvbmNhdCgoMCxpLmVzY2FwZVN0cmluZykoZSksIikiKSkpOiJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIGEuRGljdD9wKGUsdCxyKTplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtP2coZSx0LHIpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLG4ud2FybikoIlVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICIuY29uY2F0KHUoZSksIiwgcGxlYXNlIGZpbGUgYSBidWcuIikpfWZ1bmN0aW9uIHkoZSx0LHIsbil7Zm9yKHZhciBhPXQrci0xO2E+ci0xO2EtLSluW2FdPTI1NSZlLGU+Pj04O3JldHVybiByK3R9ZnVuY3Rpb24gbShlLHQscil7Zm9yKHZhciBuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXJbdCtuXT0yNTUmZS5jaGFyQ29kZUF0KG4pfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhNTFBhcnNlckVycm9yQ29kZT10LlhNTFBhcnNlckJhc2U9dC5TaW1wbGVYTUxQYXJzZXI9dC5TaW1wbGVET01Ob2RlPXZvaWQgMDt2YXIgbj1yKDEzNSk7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYShlLHQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9YyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxjKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBjKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB1KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dShlLHQpOnZvaWQgMH19ZnVuY3Rpb24gdShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGwoZSl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1sKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgcD17Tm9FcnJvcjowLEVuZE9mRG9jdW1lbnQ6LTEsVW50ZXJtaW5hdGVkQ2RhdDotMixVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjotMyxVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246LTQsVW50ZXJtaW5hdGVkQ29tbWVudDotNSxNYWxmb3JtZWRFbGVtZW50Oi02LE91dE9mTWVtb3J5Oi03LFVudGVybWluYXRlZEF0dHJpYnV0ZVZhbHVlOi04LFVudGVybWluYXRlZEVsZW1lbnQ6LTksRWxlbWVudE5ldmVyQmVndW46LTEwfTtmdW5jdGlvbiBnKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4iICI9PT1yfHwiXG4iPT09cnx8IlxyIj09PXJ8fCJcdCI9PT1yfXQuWE1MUGFyc2VyRXJyb3JDb2RlPXA7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6Il9yZXNvbHZlRW50aXRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUucmVwbGFjZSgvJihbXjtdKyk7L2csKGZ1bmN0aW9uKGUscil7aWYoIiN4Ij09PXIuc3Vic3RyaW5nKDAsMikpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHIuc3Vic3RyaW5nKDIpLDE2KSk7aWYoIiMiPT09ci5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoci5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2gocil7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInO2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiB0Lm9uUmVzb2x2ZUVudGl0eShyKX0pKX19LHtrZXk6Il9wYXJzZUNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj10O2Z1bmN0aW9uIGEoKXtmb3IoO248ZS5sZW5ndGgmJmcoZSxuKTspKytufWZvcig7bjxlLmxlbmd0aCYmIWcoZSxuKSYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXTspKytuO3ZhciBpPWUuc3Vic3RyaW5nKHQsbik7Zm9yKGEoKTtuPGUubGVuZ3RoJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dJiYiPyIhPT1lW25dOyl7YSgpO2Zvcih2YXIgbyxzPSIiO248ZS5sZW5ndGgmJiFnKGUsbikmJiI9IiE9PWVbbl07KXMrPWVbbl0sKytuO2lmKGEoKSwiPSIhPT1lW25dKXJldHVybiBudWxsOysrbixhKCk7dmFyIGM9ZVtuXTtpZignIichPT1jJiYiJyIhPT1jKXJldHVybiBudWxsO3ZhciB1PWUuaW5kZXhPZihjLCsrbik7aWYodTwwKXJldHVybiBudWxsO289ZS5zdWJzdHJpbmcobix1KSxyLnB1c2goe25hbWU6cyx2YWx1ZTp0aGlzLl9yZXNvbHZlRW50aXRpZXMobyl9KSxuPXUrMSxhKCl9cmV0dXJue25hbWU6aSxhdHRyaWJ1dGVzOnIscGFyc2VkOm4tdH19fSx7a2V5OiJfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQ7cjxlLmxlbmd0aCYmIWcoZSxyKSYmIj4iIT09ZVtyXSYmIj8iIT09ZVtyXSYmIi8iIT09ZVtyXTspKytyO3ZhciBuPWUuc3Vic3RyaW5nKHQscik7IWZ1bmN0aW9uKCl7Zm9yKDtyPGUubGVuZ3RoJiZnKGUscik7KSsrcn0oKTtmb3IodmFyIGE9cjtyPGUubGVuZ3RoJiYoIj8iIT09ZVtyXXx8Ij4iIT09ZVtyKzFdKTspKytyO3JldHVybntuYW1lOm4sdmFsdWU6ZS5zdWJzdHJpbmcoYSxyKSxwYXJzZWQ6ci10fX19LHtrZXk6InBhcnNlWG1sIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOyl7dmFyIHI9dDtpZigiPCI9PT1lW3RdKXt2YXIgbj12b2lkIDA7c3dpdGNoKGVbKytyXSl7Y2FzZSIvIjppZigrK3IsKG49ZS5pbmRleE9mKCI+IixyKSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhyLG4pKSxyPW4rMTticmVhaztjYXNlIj8iOisrcjt2YXIgYT10aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHIpO2lmKCI/PiIhPT1lLnN1YnN0cmluZyhyK2EucGFyc2VkLHIrYS5wYXJzZWQrMikpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO3RoaXMub25QaShhLm5hbWUsYS52YWx1ZSkscis9YS5wYXJzZWQrMjticmVhaztjYXNlIiEiOmlmKCItLSI9PT1lLnN1YnN0cmluZyhyKzEsciszKSl7aWYoKG49ZS5pbmRleE9mKCItLVx4M2UiLHIrMykpPDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkQ29tbWVudCk7dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcociszLG4pKSxyPW4rM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXtpZigobj1lLmluZGV4T2YoIl1dPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRDZGF0KTt0aGlzLm9uQ2RhdGEoZS5zdWJzdHJpbmcocis4LG4pKSxyPW4rM31lbHNle2lmKCJET0NUWVBFIiE9PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciBpPWUuaW5kZXhPZigiWyIscis4KSxvPSExO2lmKChuPWUuaW5kZXhPZigiPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO2lmKGk+MCYmbj5pKXtpZigobj1lLmluZGV4T2YoIl0+IixyKzgpKTwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7bz0hMH12YXIgcz1lLnN1YnN0cmluZyhyKzgsbisobz8xOjApKTt0aGlzLm9uRG9jdHlwZShzKSxyPW4rKG8/MjoxKX1icmVhaztkZWZhdWx0OnZhciBjPXRoaXMuX3BhcnNlQ29udGVudChlLHIpO2lmKG51bGw9PT1jKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciB1PSExO2lmKCIvPiI9PT1lLnN1YnN0cmluZyhyK2MucGFyc2VkLHIrYy5wYXJzZWQrMikpdT0hMDtlbHNlIGlmKCI+IiE9PWUuc3Vic3RyaW5nKHIrYy5wYXJzZWQscitjLnBhcnNlZCsxKSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uQmVnaW5FbGVtZW50KGMubmFtZSxjLmF0dHJpYnV0ZXMsdSkscis9Yy5wYXJzZWQrKHU/MjoxKX19ZWxzZXtmb3IoO3I8ZS5sZW5ndGgmJiI8IiE9PWVbcl07KXIrKzt2YXIgbD1lLnN1YnN0cmluZyh0LHIpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhsKSl9dD1yfX19LHtrZXk6Im9uUmVzb2x2ZUVudGl0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIiYiLmNvbmNhdChlLCI7Iil9fSx7a2V5OiJvblBpIix2YWx1ZTpmdW5jdGlvbihlLHQpe319LHtrZXk6Im9uQ29tbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25DZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25Eb2N0eXBlIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvblRleHQiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uQmVnaW5FbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7fX0se2tleToib25FbmRFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt9fV0pLGV9KCk7dC5YTUxQYXJzZXJCYXNlPXY7dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubm9kZU5hbWU9dCx0aGlzLm5vZGVWYWx1ZT1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwYXJlbnROb2RlIix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pfXJldHVybiBkKGUsW3trZXk6ImZpcnN0Q2hpbGQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX19LHtrZXk6Im5leHRTaWJsaW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZihlKXt2YXIgdD1lLmluZGV4T2YodGhpcyk7aWYoLTEhPT10KXJldHVybiBlW3QrMV19fX0se2tleToidGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifX0se2tleToiY2hpbGRyZW4iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN8fFtdfX0se2tleToiaGFzQ2hpbGROb2RlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzJiZ0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPjB9fSx7a2V5OiJzZWFyY2hOb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHQ+PWUubGVuZ3RoKXJldHVybiB0aGlzO2Zvcih2YXIgcj1lW3RdLG49W10sYT10aGlzOzspe2lmKHIubmFtZT09PWEubm9kZU5hbWUpe2lmKDAhPT1yLnBvcyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBpLGM9MCx1PW8ocyhuLnBvcCgpLDEpWzBdLmNoaWxkTm9kZXMpO3RyeXtmb3IodS5zKCk7IShpPXUubigpKS5kb25lOyl7dmFyIGw9aS52YWx1ZTtpZihyLm5hbWU9PT1sLm5vZGVOYW1lKXtpZihjPT09ci5wb3MpcmV0dXJuIGwuc2VhcmNoTm9kZShlLHQrMSk7YysrfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJuIGEuc2VhcmNoTm9kZShlLHQrMSl9dmFyIGY9YS5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09ZilyZXR1cm4gZn1pZihhLmNoaWxkTm9kZXMmJjAhPT1hLmNoaWxkTm9kZXMubGVuZ3RoKW4ucHVzaChbYSwwXSksYT1hLmNoaWxkTm9kZXNbMF07ZWxzZXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKDswIT09bi5sZW5ndGg7KXt2YXIgaD1zKG4ucG9wKCksMiksZD1oWzBdLHA9aFsxXSsxO2lmKHA8ZC5jaGlsZE5vZGVzLmxlbmd0aCl7bi5wdXNoKFtkLHBdKSxhPWQuY2hpbGROb2Rlc1twXTticmVha319aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsfX19fSx7a2V5OiJkdW1wIix2YWx1ZTpmdW5jdGlvbihlKXtpZigiI3RleHQiIT09dGhpcy5ub2RlTmFtZSl7aWYoZS5wdXNoKCI8Ii5jb25jYXQodGhpcy5ub2RlTmFtZSkpLHRoaXMuYXR0cmlidXRlcyl7dmFyIHQscj1vKHRoaXMuYXR0cmlidXRlcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlO2UucHVzaCgiICIuY29uY2F0KGEubmFtZSwnPSInKS5jb25jYXQoKDAsbi5lbmNvZGVUb1htbFN0cmluZykoYS52YWx1ZSksJyInKSl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX1pZih0aGlzLmhhc0NoaWxkTm9kZXMoKSl7ZS5wdXNoKCI+Iik7dmFyIGkscz1vKHRoaXMuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KWkudmFsdWUuZHVtcChlKX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1lLnB1c2goIjwvIi5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKX1lbHNlIHRoaXMubm9kZVZhbHVlP2UucHVzaCgiPiIuY29uY2F0KCgwLG4uZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSwiPC8iKS5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKTplLnB1c2goIi8+Iil9ZWxzZSBlLnB1c2goKDAsbi5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpKX19XSksZX0oKTt0LlNpbXBsZURPTU5vZGU9eTt2YXIgbT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYShlLHQpfShjLGUpO3ZhciB0LHIsbj0odD1jLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1pKHQpO2lmKHIpe3ZhciBhPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoZSl7dmFyIHQscj1lLmhhc0F0dHJpYnV0ZXMsYT12b2lkIDAhPT1yJiZyLGk9ZS5sb3dlckNhc2VOYW1lLG89dm9pZCAwIT09aSYmaTtyZXR1cm4gZih0aGlzLGMpLCh0PW4uY2FsbCh0aGlzKSkuX2N1cnJlbnRGcmFnbWVudD1udWxsLHQuX3N0YWNrPW51bGwsdC5fZXJyb3JDb2RlPXAuTm9FcnJvcix0Ll9oYXNBdHRyaWJ1dGVzPWEsdC5fbG93ZXJDYXNlTmFtZT1vLHR9cmV0dXJuIGQoYyxbe2tleToicGFyc2VGcm9tU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W10sdGhpcy5fc3RhY2s9W10sdGhpcy5fZXJyb3JDb2RlPXAuTm9FcnJvcix0aGlzLnBhcnNlWG1sKGUpLHRoaXMuX2Vycm9yQ29kZT09PXAuTm9FcnJvcil7dmFyIHQ9cyh0aGlzLl9jdXJyZW50RnJhZ21lbnQsMSlbMF07aWYodClyZXR1cm57ZG9jdW1lbnRFbGVtZW50OnR9fX19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZighZyhlLHQpKXJldHVybiExO3JldHVybiEwfShlKSl7dmFyIHQ9bmV3IHkoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX19fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgeSgiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9sb3dlckNhc2VOYW1lJiYoZT1lLnRvTG93ZXJDYXNlKCkpO3ZhciBuPW5ldyB5KGUpO24uY2hpbGROb2Rlcz1bXSx0aGlzLl9oYXNBdHRyaWJ1dGVzJiYobi5hdHRyaWJ1dGVzPXQpLHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG4pLHJ8fCh0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCksdGhpcy5fY3VycmVudEZyYWdtZW50PW4uY2hpbGROb2Rlcyl9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107dmFyIHQ9dGhpcy5fY3VycmVudEZyYWdtZW50LmF0KC0xKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPW8odC5jaGlsZE5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5wYXJlbnROb2RlPXR9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHR9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lcnJvckNvZGU9ZX19XSksY30odik7dC5TaW1wbGVYTUxQYXJzZXI9bX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGN1bGF0ZVNIQTI1Nj10LmNhbGN1bGF0ZU1ENT10LlBERjIwPXQuUERGMTc9dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PXQuQVJDRm91ckNpcGhlcj10LkFFUzI1NkNpcGhlcj10LkFFUzEyOENpcGhlcj12b2lkIDAsdC5jYWxjdWxhdGVTSEEzODQ9ayx0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTk3KTtmdW5jdGlvbiBvKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnMoZSx0KX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj11KGUpO2lmKHQpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxsKGUpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWwoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1sKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09bChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLmE9MCx0aGlzLmI9MDtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMjU2KSxuPXQubGVuZ3RoLGE9MDthPDI1NjsrK2EpclthXT1hO2Zvcih2YXIgaT0wLG89MDtpPDI1NjsrK2kpe3ZhciBzPXJbaV07bz1vK3MrdFtpJW5dJjI1NSxyW2ldPXJbb10scltvXT1zfXRoaXMucz1yfXJldHVybiBkKGUsW3trZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYSxyPXRoaXMuYixuPXRoaXMucyxhPWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkoYSksbz0wO288YTsrK28pe3ZhciBzPW5bdD10KzEmMjU1XSxjPW5bcj1yK3MmMjU1XTtuW3RdPWMsbltyXT1zLGlbb109ZVtvXV5uW3MrYyYyNTVdfXJldHVybiB0aGlzLmE9dCx0aGlzLmI9cixpfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fV0pLGV9KCk7dC5BUkNGb3VyQ2lwaGVyPXA7dmFyIGcsdix5PShnPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx2PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9MTczMjU4NDE5MyxvPS0yNzE3MzM4Nzkscz0tMTczMjU4NDE5NCxjPTI3MTczMzg3OCx1PXIrNzImLTY0LGw9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKG49MDtuPHI7KytuKWxbbl09ZVt0KytdO2xbbisrXT0xMjg7Zm9yKHZhciBmPXUtODtuPGY7KWxbbisrXT0wO2xbbisrXT1yPDwzJjI1NSxsW24rK109cj4+NSYyNTUsbFtuKytdPXI+PjEzJjI1NSxsW24rK109cj4+MjEmMjU1LGxbbisrXT1yPj4+MjkmMjU1LGxbbisrXT0wLGxbbisrXT0wLGxbbisrXT0wO3ZhciBoPW5ldyBJbnQzMkFycmF5KDE2KTtmb3Iobj0wO248dTspe2ZvcihhPTA7YTwxNjsrK2Esbis9NCloW2FdPWxbbl18bFtuKzFdPDw4fGxbbisyXTw8MTZ8bFtuKzNdPDwyNDt2YXIgZD1pLHA9byx5PXMsbT1jLGI9dm9pZCAwLHc9dm9pZCAwO2ZvcihhPTA7YTw2NDsrK2Epe2E8MTY/KGI9cCZ5fH5wJm0sdz1hKTphPDMyPyhiPW0mcHx+bSZ5LHc9NSphKzEmMTUpOmE8NDg/KGI9cF55Xm0sdz0zKmErNSYxNSk6KGI9eV4ocHx+bSksdz03KmEmMTUpO3ZhciBrPW0sUz1kK2IrdlthXStoW3ddfDAseD1nW2FdO209eSx5PXAscD1wKyhTPDx4fFM+Pj4zMi14KXwwLGQ9a31pPWkrZHwwLG89bytwfDAscz1zK3l8MCxjPWMrbXwwfXJldHVybiBuZXcgVWludDhBcnJheShbMjU1JmksaT4+OCYyNTUsaT4+MTYmMjU1LGk+Pj4yNCYyNTUsMjU1Jm8sbz4+OCYyNTUsbz4+MTYmMjU1LG8+Pj4yNCYyNTUsMjU1JnMscz4+OCYyNTUscz4+MTYmMjU1LHM+Pj4yNCYyNTUsMjU1JmMsYz4+OCYyNTUsYz4+MTYmMjU1LGM+Pj4yNCYyNTVdKX0pO3QuY2FsY3VsYXRlTUQ1PXk7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMuaGlnaD0wfHQsdGhpcy5sb3c9MHxyfXJldHVybiBkKGUsW3trZXk6ImFuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoJj1lLmhpZ2gsdGhpcy5sb3cmPWUubG93fX0se2tleToieG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmhpZ2hePWUuaGlnaCx0aGlzLmxvd149ZS5sb3d9fSx7a2V5OiJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdofD1lLmhpZ2gsdGhpcy5sb3d8PWUubG93fX0se2tleToic2hpZnRSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT49MzI/KHRoaXMubG93PXRoaXMuaGlnaD4+PmUtMzJ8MCx0aGlzLmhpZ2g9MCk6KHRoaXMubG93PXRoaXMubG93Pj4+ZXx0aGlzLmhpZ2g8PDMyLWUsdGhpcy5oaWdoPXRoaXMuaGlnaD4+PmV8MCl9fSx7a2V5OiJzaGlmdExlZnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2U+PTMyPyh0aGlzLmhpZ2g9dGhpcy5sb3c8PGUtMzIsdGhpcy5sb3c9MCk6KHRoaXMuaGlnaD10aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lLHRoaXMubG93PDw9ZSl9fSx7a2V5OiJyb3RhdGVSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscjszMiZlPyhyPXRoaXMubG93LHQ9dGhpcy5oaWdoKToodD10aGlzLmxvdyxyPXRoaXMuaGlnaCksZSY9MzEsdGhpcy5sb3c9dD4+PmV8cjw8MzItZSx0aGlzLmhpZ2g9cj4+PmV8dDw8MzItZX19LHtrZXk6Im5vdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaCx0aGlzLmxvdz1+dGhpcy5sb3d9fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSh0aGlzLmxvdz4+PjApKyhlLmxvdz4+PjApLHI9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihyKz0xKSx0aGlzLmxvdz0wfHQsdGhpcy5oaWdoPTB8cn19LHtrZXk6ImNvcHlUbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NSxlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTUsZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTUsZVt0KzNdPTI1NSZ0aGlzLmhpZ2gsZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1LGVbdCs1XT10aGlzLmxvdz4+MTYmMjU1LGVbdCs2XT10aGlzLmxvdz4+OCYyNTUsZVt0KzddPTI1NSZ0aGlzLmxvd319LHtrZXk6ImFzc2lnbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoPWUuaGlnaCx0aGlzLmxvdz1lLmxvd319XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlJnRefmUmcn1mdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZSZ0XmUmcl50JnJ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gZSh0LDIpXmUodCwxMyleZSh0LDIyKX1mdW5jdGlvbiBhKHQpe3JldHVybiBlKHQsNileZSh0LDExKV5lKHQsMjUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUodCw3KV5lKHQsMTgpXnQ+Pj4zfXZhciBvPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoPTE3NzkwMzM3MDMsZD0zMTQ0MTM0Mjc3LHA9MTAxMzkwNDI0MixnPTI3NzM0ODA3NjIsdj0xMzU5ODkzMTE5LHk9MjYwMDgyMjkyNCxtPTUyODczNDYzNSxiPTE1NDE0NTkyMjUsdz02NCpNYXRoLmNlaWwoKHUrOSkvNjQpLGs9bmV3IFVpbnQ4QXJyYXkodyk7Zm9yKGw9MDtsPHU7KytsKWtbbF09c1tjKytdO2tbbCsrXT0xMjg7Zm9yKHZhciBTPXctODtsPFM7KWtbbCsrXT0wO2tbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT11Pj4+MjkmMjU1LGtbbCsrXT11Pj4yMSYyNTUsa1tsKytdPXU+PjEzJjI1NSxrW2wrK109dT4+NSYyNTUsa1tsKytdPXU8PDMmMjU1O3ZhciB4LE89bmV3IFVpbnQzMkFycmF5KDY0KTtmb3IobD0wO2w8dzspe2ZvcihmPTA7ZjwxNjsrK2YpT1tmXT1rW2xdPDwyNHxrW2wrMV08PDE2fGtbbCsyXTw8OHxrW2wrM10sbCs9NDtmb3IoZj0xNjtmPDY0OysrZilPW2ZdPTB8KGUoeD1PW2YtMl0sMTcpXmUoeCwxOSleeD4+PjEwKStPW2YtN10raShPW2YtMTVdKStPW2YtMTZdO3ZhciBBPWgsQz1kLEY9cCxQPWcsVD12LEk9eSxFPW0saj1iLE09dm9pZCAwLF89dm9pZCAwO2ZvcihmPTA7Zjw2NDsrK2YpTT1qK2EoVCkrdChULEksRSkrb1tmXStPW2ZdLF89bihBKStyKEEsQyxGKSxqPUUsRT1JLEk9VCxUPVArTXwwLFA9RixGPUMsQz1BLEE9TStffDA7aD1oK0F8MCxkPWQrQ3wwLHA9cCtGfDAsZz1nK1B8MCx2PXYrVHwwLHk9eStJfDAsbT1tK0V8MCxiPWIranwwfXJldHVybiBuZXcgVWludDhBcnJheShbaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCxkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHA+PjI0JjI1NSxwPj4xNiYyNTUscD4+OCYyNTUsMjU1JnAsZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyx2Pj4yNCYyNTUsdj4+MTYmMjU1LHY+PjgmMjU1LDI1NSZ2LHk+PjI0JjI1NSx5Pj4xNiYyNTUseT4+OCYyNTUsMjU1JnksbT4+MjQmMjU1LG0+PjE2JjI1NSxtPj44JjI1NSwyNTUmbSxiPj4yNCYyNTUsYj4+MTYmMjU1LGI+PjgmMjU1LDI1NSZiXSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9dmFyIG89W25ldyBtKDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IG0oMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBtKDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IG0oMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgbSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IG0oMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgbSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyBtKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IG0oMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgbSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IG0oNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBtKDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IG0oMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgbSgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IG0oMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyBtKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IG0oMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgbSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IG0oMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyBtKDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgbSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IG0oMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgbSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBtKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IG0oMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgbSgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IG0oMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgbSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyBtKDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IG0oMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgbSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IG0oMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IG0oNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyBtKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgbSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBtKDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IG0oMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgbSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBtKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IG0oMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyBtKDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IG0oMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgbSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyBtKDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgbSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyBtKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IG0oNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgbSgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgbSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IG0oNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBtKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgbSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IG0oOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBtKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IG0oMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgbSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBtKDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IG0oMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgbSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBtKDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgbSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IG0oMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgbSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyBtKDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IG0oMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgbSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IG0oMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgbSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBtKDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgbSgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IG0oMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBtKDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyBtKDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyBtKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgbSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IG0oMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgbSgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBtKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IG0oMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyBtKDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoLGQscCxnLHYseSxiPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Yj8obD1uZXcgbSgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpLGY9bmV3IG0oMTY1NDI3MDI1MCw5MTQxNTA2NjMpLGg9bmV3IG0oMjQzODUyOTM3MCw4MTI3MDI5OTkpLGQ9bmV3IG0oMzU1NDYyMzYwLDQxNDQ5MTI2OTcpLHA9bmV3IG0oMTczMTQwNTQxNSw0MjkwNzc1ODU3KSxnPW5ldyBtKDIzOTQxODAyMzEsMTc1MDYwMzAyNSksdj1uZXcgbSgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpLHk9bmV3IG0oMTIwMzA2MjgxMywzMjA0MDc1NDI4KSk6KGw9bmV3IG0oMTc3OTAzMzcwMyw0MDg5MjM1NzIwKSxmPW5ldyBtKDMxNDQxMzQyNzcsMjIyNzg3MzU5NSksaD1uZXcgbSgxMDEzOTA0MjQyLDQyNzExNzU3MjMpLGQ9bmV3IG0oMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KSxwPW5ldyBtKDEzNTk4OTMxMTksMjkxNzU2NTEzNyksZz1uZXcgbSgyNjAwODIyOTI0LDcyNTUxMTE5OSksdj1uZXcgbSg1Mjg3MzQ2MzUsNDIxNTM4OTU0NykseT1uZXcgbSgxNTQxNDU5MjI1LDMyNzAzMzIwOSkpO3ZhciB3LGssUz0xMjgqTWF0aC5jZWlsKCh1KzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkoUyk7Zm9yKHc9MDt3PHU7Kyt3KXhbd109c1tjKytdO3hbdysrXT0xMjg7Zm9yKHZhciBPPVMtMTY7dzxPOyl4W3crK109MDt4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109dT4+PjI5JjI1NSx4W3crK109dT4+MjEmMjU1LHhbdysrXT11Pj4xMyYyNTUseFt3KytdPXU+PjUmMjU1LHhbdysrXT11PDwzJjI1NTt2YXIgQT1uZXcgQXJyYXkoODApO2Zvcih3PTA7dzw4MDt3KyspQVt3XT1uZXcgbSgwLDApO3ZhciBDLEYsUD1uZXcgbSgwLDApLFQ9bmV3IG0oMCwwKSxJPW5ldyBtKDAsMCksRT1uZXcgbSgwLDApLGo9bmV3IG0oMCwwKSxNPW5ldyBtKDAsMCksXz1uZXcgbSgwLDApLEw9bmV3IG0oMCwwKSxSPW5ldyBtKDAsMCksTj1uZXcgbSgwLDApLEQ9bmV3IG0oMCwwKSxCPW5ldyBtKDAsMCk7Zm9yKHc9MDt3PFM7KXtmb3Ioaz0wO2s8MTY7KytrKUFba10uaGlnaD14W3ddPDwyNHx4W3crMV08PDE2fHhbdysyXTw8OHx4W3crM10sQVtrXS5sb3c9eFt3KzRdPDwyNHx4W3crNV08PDE2fHhbdys2XTw8OHx4W3crN10sdys9ODtmb3Ioaz0xNjtrPDgwOysraylpKEM9QVtrXSxBW2stMl0sQiksQy5hZGQoQVtrLTddKSxhKEQsQVtrLTE1XSxCKSxDLmFkZChEKSxDLmFkZChBW2stMTZdKTtmb3IoUC5hc3NpZ24obCksVC5hc3NpZ24oZiksSS5hc3NpZ24oaCksRS5hc3NpZ24oZCksai5hc3NpZ24ocCksTS5hc3NpZ24oZyksXy5hc3NpZ24odiksTC5hc3NpZ24oeSksaz0wO2s8ODA7KytrKVIuYXNzaWduKEwpLG4oRCxqLEIpLFIuYWRkKEQpLGUoRCxqLE0sXyxCKSxSLmFkZChEKSxSLmFkZChvW2tdKSxSLmFkZChBW2tdKSxyKE4sUCxCKSx0KEQsUCxULEksQiksTi5hZGQoRCksQz1MLEw9XyxfPU0sTT1qLEUuYWRkKFIpLGo9RSxFPUksST1ULFQ9UCxDLmFzc2lnbihSKSxDLmFkZChOKSxQPUM7bC5hZGQoUCksZi5hZGQoVCksaC5hZGQoSSksZC5hZGQoRSkscC5hZGQoaiksZy5hZGQoTSksdi5hZGQoXykseS5hZGQoTCl9cmV0dXJuIGI/KEY9bmV3IFVpbnQ4QXJyYXkoNDgpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSk6KEY9bmV3IFVpbnQ4QXJyYXkoNjQpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSx2LmNvcHlUbyhGLDQ4KSx5LmNvcHlUbyhGLDU2KSksRn19KCk7ZnVuY3Rpb24gayhlLHQscil7cmV0dXJuIHcoZSx0LHIsITApfXQuY2FsY3VsYXRlU0hBNTEyPXc7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSksZX0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8MjU2O3QrKyl0aGlzLl9taXhDb2xbdF09dDwxMjg/dDw8MTp0PDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9cmV0dXJuIGQoZSxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfX0se2tleToiX2RlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2Zvcih2YXIgbz0wLHM9dGhpcy5fa2V5U2l6ZTtvPDE2OysrbywrK3MpaVtvXV49dFtzXTtmb3IodmFyIGM9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7Yz49MTstLWMpe3I9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHU9MDt1PDE2OysrdSlpW3VdPXRoaXMuX2ludl9zW2lbdV1dO2Zvcih2YXIgbD0wLGY9MTYqYztsPDE2OysrbCwrK2YpaVtsXV49dFtmXTtmb3IodmFyIGg9MDtoPDE2O2grPTQpe3ZhciBkPXRoaXMuX21peFtpW2hdXSxwPXRoaXMuX21peFtpW2grMV1dLGc9dGhpcy5fbWl4W2lbaCsyXV0sdj10aGlzLl9taXhbaVtoKzNdXTtyPWRecD4+PjhecDw8MjReZz4+PjE2Xmc8PDE2XnY+Pj4yNF52PDw4LGlbaF09cj4+PjI0JjI1NSxpW2grMV09cj4+MTYmMjU1LGlbaCsyXT1yPj44JjI1NSxpW2grM109MjU1JnJ9fXI9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHk9MDt5PDE2OysreSlpW3ldPXRoaXMuX2ludl9zW2lbeV1dLGlbeV1ePXRbeV07cmV0dXJuIGl9fSx7a2V5OiJfZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10aGlzLl9zLG89bmV3IFVpbnQ4QXJyYXkoMTYpO28uc2V0KGUpO2Zvcih2YXIgcz0wO3M8MTY7KytzKW9bc11ePXRbc107Zm9yKHZhciBjPTE7Yzx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247YysrKXtmb3IodmFyIHU9MDt1PDE2OysrdSlvW3VdPWlbb1t1XV07YT1vWzFdLG9bMV09b1s1XSxvWzVdPW9bOV0sb1s5XT1vWzEzXSxvWzEzXT1hLGE9b1syXSxuPW9bNl0sb1syXT1vWzEwXSxvWzZdPW9bMTRdLG9bMTBdPWEsb1sxNF09bixhPW9bM10sbj1vWzddLHI9b1sxMV0sb1szXT1vWzE1XSxvWzddPWEsb1sxMV09bixvWzE1XT1yO2Zvcih2YXIgbD0wO2w8MTY7bCs9NCl7dmFyIGY9b1tsKzBdLGg9b1tsKzFdLGQ9b1tsKzJdLHA9b1tsKzNdO3I9Zl5oXmRecCxvW2wrMF1ePXJedGhpcy5fbWl4Q29sW2ZeaF0sb1tsKzFdXj1yXnRoaXMuX21peENvbFtoXmRdLG9bbCsyXV49cl50aGlzLl9taXhDb2xbZF5wXSxvW2wrM11ePXJedGhpcy5fbWl4Q29sW3BeZl19Zm9yKHZhciBnPTAsdj0xNipjO2c8MTY7KytnLCsrdilvW2ddXj10W3ZdfWZvcih2YXIgeT0wO3k8MTY7Kyt5KW9beV09aVtvW3ldXTthPW9bMV0sb1sxXT1vWzVdLG9bNV09b1s5XSxvWzldPW9bMTNdLG9bMTNdPWEsYT1vWzJdLG49b1s2XSxvWzJdPW9bMTBdLG9bNl09b1sxNF0sb1sxMF09YSxvWzE0XT1uLGE9b1szXSxuPW9bN10scj1vWzExXSxvWzNdPW9bMTVdLG9bN109YSxvWzExXT1uLG9bMTVdPXI7Zm9yKHZhciBtPTAsYj10aGlzLl9rZXlTaXplO208MTY7KyttLCsrYilvW21dXj10W2JdO3JldHVybiBvfX0se2tleToiX2RlY3J5cHRCbG9jazIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W10sbz10aGlzLml2LHM9MDtzPHI7KytzKWlmKG5bYV09ZVtzXSwhKCsrYTwxNikpe2Zvcih2YXIgYz10aGlzLl9kZWNyeXB0KG4sdGhpcy5fa2V5KSx1PTA7dTwxNjsrK3UpY1t1XV49b1t1XTtvPW4saS5wdXNoKGMpLG49bmV3IFVpbnQ4QXJyYXkoMTYpLGE9MH1pZih0aGlzLmJ1ZmZlcj1uLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5pdj1vLDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGw9MTYqaS5sZW5ndGg7aWYodCl7dmFyIGY9aS5hdCgtMSksaD1mWzE1XTtpZihoPD0xNil7Zm9yKHZhciBkPTE1LHA9MTYtaDtkPj1wOy0tZClpZihmW2RdIT09aCl7aD0wO2JyZWFrfWwtPWgsaVtpLmxlbmd0aC0xXT1mLnN1YmFycmF5KDAsMTYtaCl9fWZvcih2YXIgZz1uZXcgVWludDhBcnJheShsKSx2PTAseT0wLG09aS5sZW5ndGg7djxtOysrdix5Kz0xNilnLnNldChpW3ZdLHkpO3JldHVybiBnfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLG49ZS5sZW5ndGgsYT10aGlzLmJ1ZmZlcixpPXRoaXMuYnVmZmVyUG9zaXRpb247aWYocil0aGlzLml2PXI7ZWxzZXtmb3IodmFyIG89MDtpPDE2JiZvPG47KytvLCsraSlhW2ldPWVbb107aWYoaTwxNilyZXR1cm4gdGhpcy5idWZmZXJMZW5ndGg9aSxuZXcgVWludDhBcnJheSgwKTt0aGlzLml2PWEsZT1lLnN1YmFycmF5KDE2KX1yZXR1cm4gdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5kZWNyeXB0QmxvY2s9dGhpcy5fZGVjcnlwdEJsb2NrMix0aGlzLmRlY3J5cHRCbG9jayhlLHQpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCxuPXRoaXMuYnVmZmVyLGE9dGhpcy5idWZmZXJQb3NpdGlvbixpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKHZhciBvPTA7bzxyOysrbylpZihuW2FdPWVbb10sISgrK2E8MTYpKXtmb3IodmFyIHM9MDtzPDE2OysrcyluW3NdXj10W3NdO3ZhciBjPXRoaXMuX2VuY3J5cHQobix0aGlzLl9rZXkpO3Q9YyxpLnB1c2goYyksbj1uZXcgVWludDhBcnJheSgxNiksYT0wfWlmKHRoaXMuYnVmZmVyPW4sdGhpcy5idWZmZXJMZW5ndGg9YSx0aGlzLml2PXQsMD09PWkubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHU9MTYqaS5sZW5ndGgsbD1uZXcgVWludDhBcnJheSh1KSxmPTAsaD0wLGQ9aS5sZW5ndGg7ZjxkOysrZixoKz0xNilsLnNldChpW2ZdLGgpO3JldHVybiBsfX1dKSxlfSgpLE89ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzKSkuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMCxuLl9rZXlTaXplPTE2MCxuLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSksbi5fa2V5PW4uX2V4cGFuZEtleShlKSxufXJldHVybiBkKHIsW3trZXk6Il9leHBhbmRLZXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Mscj10aGlzLl9yY29uLG49bmV3IFVpbnQ4QXJyYXkoMTc2KTtuLnNldChlKTtmb3IodmFyIGE9MTYsaT0xO2E8MTc2OysraSl7dmFyIG89blthLTNdLHM9blthLTJdLGM9blthLTFdLHU9blthLTRdO289dFtvXSxzPXRbc10sYz10W2NdLHU9dFt1XSxvXj1yW2ldO2Zvcih2YXIgbD0wO2w8NDsrK2wpblthXT1vXj1uW2EtMTZdLG5bKythXT1zXj1uW2EtMTZdLG5bKythXT1jXj1uW2EtMTZdLG5bKythXT11Xj1uW2EtMTZdLGErK31yZXR1cm4gbn19XSkscn0oeCk7dC5BRVMxMjhDaXBoZXI9Tzt2YXIgQT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMpKS5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0LG4uX2tleVNpemU9MjI0LG4uX2tleT1uLl9leHBhbmRLZXkoZSksbn1yZXR1cm4gZChyLFt7a2V5OiJfZXhwYW5kS2V5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zLHI9bmV3IFVpbnQ4QXJyYXkoMjQwKTtyLnNldChlKTtmb3IodmFyIG4sYSxpLG8scz0xLGM9MzIsdT0xO2M8MjQwOysrdSl7YyUzMj09MTY/KG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSk6YyUzMj09MCYmKG49cltjLTNdLGE9cltjLTJdLGk9cltjLTFdLG89cltjLTRdLG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSxuXj1zLChzPDw9MSk+PTI1NiYmKHM9MjU1JigyN15zKSkpO2Zvcih2YXIgbD0wO2w8NDsrK2wpcltjXT1uXj1yW2MtMzJdLHJbKytjXT1hXj1yW2MtMzJdLHJbKytjXT1pXj1yW2MtMzJdLHJbKytjXT1vXj1yW2MtMzJdLGMrK31yZXR1cm4gcn19XSkscn0oeCk7dC5BRVMyNTZDaXBoZXI9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKSxpLnNldCh0LGUubGVuZ3RoKSxpLnNldChyLGUubGVuZ3RoK3QubGVuZ3RoKTt2YXIgbz1iKGksMCxpLmxlbmd0aCk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJjaGVja1VzZXJQYXNzd29yZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCk7dmFyIGk9YihhLDAsYS5sZW5ndGgpO3JldHVybigwLG4uaXNBcnJheUVxdWFsKShpLHIpfX0se2tleToiZ2V0T3duZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTthLnNldChlLDApLGEuc2V0KHQsZS5sZW5ndGgpLGEuc2V0KHIsZS5sZW5ndGgrdC5sZW5ndGgpO3ZhciBpPWIoYSwwLGEubGVuZ3RoKTtyZXR1cm4gbmV3IEEoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHtrZXk6ImdldFVzZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApLG4uc2V0KHQsZS5sZW5ndGgpO3ZhciBhPWIobiwwLG4ubGVuZ3RoKTtyZXR1cm4gbmV3IEEoYSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19XSksZX0oKTt0LlBERjE3PUM7dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtmb3IodmFyIG49Yih0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLGE9WzBdLGk9MDtpPDY0fHxhLmF0KC0xKT5pLTMyOyl7dmFyIG89ZS5sZW5ndGgrbi5sZW5ndGgrci5sZW5ndGgscz1uZXcgVWludDhBcnJheShvKSxjPTA7cy5zZXQoZSxjKSxjKz1lLmxlbmd0aCxzLnNldChuLGMpLGMrPW4ubGVuZ3RoLHMuc2V0KHIsYyk7Zm9yKHZhciB1PW5ldyBVaW50OEFycmF5KDY0Km8pLGw9MCxmPTA7bDw2NDtsKyssZis9byl1LnNldChzLGYpO3ZhciBoPShhPW5ldyBPKG4uc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQodSxuLnN1YmFycmF5KDE2LDMyKSkpLnNsaWNlKDAsMTYpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCklMzswPT09aD9uPWIoYSwwLGEubGVuZ3RoKToxPT09aD9uPWsoYSwwLGEubGVuZ3RoKToyPT09aCYmKG49dyhhLDAsYS5sZW5ndGgpKSxpKyt9cmV0dXJuIG4uc3ViYXJyYXkoMCwzMil9cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KX1yZXR1cm4gZCh0LFt7a2V5OiJoYXNoIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUodCxyLG4pfX0se2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSxpKXt2YXIgbz1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs1Nik7by5zZXQodCwwKSxvLnNldChyLHQubGVuZ3RoKSxvLnNldChhLHQubGVuZ3RoK3IubGVuZ3RoKTt2YXIgcz1lKHQsbyxhKTtyZXR1cm4oMCxuLmlzQXJyYXlFcXVhbCkocyxpKX19LHtrZXk6ImNoZWNrVXNlclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7aS5zZXQodCwwKSxpLnNldChyLHQubGVuZ3RoKTt2YXIgbz1lKHQsaSxbXSk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJnZXRPd25lcktleSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrNTYpO2kuc2V0KHQsMCksaS5zZXQocix0Lmxlbmd0aCksaS5zZXQobix0Lmxlbmd0aCtyLmxlbmd0aCk7dmFyIG89ZSh0LGksbik7cmV0dXJuIG5ldyBBKG8pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fSx7a2V5OiJnZXRVc2VyS2V5Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7YS5zZXQodCwwKSxhLnNldChyLHQubGVuZ3RoKTt2YXIgaT1lKHQsYSxbXSk7cmV0dXJuIG5ldyBBKGkpLmRlY3J5cHRCbG9jayhuLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fV0pLHR9KCl9KCk7dC5QREYyMD1GO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2YodGhpcyxlKSx0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yPXQsdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcj1yfXJldHVybiBkKGUsW3trZXk6ImNyZWF0ZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVjcnlwdEJsb2NrKGUsdCl9KSl9fSx7a2V5OiJkZWNyeXB0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcixyPSgwLG4uc3RyaW5nVG9CeXRlcykoZSk7cmV0dXJuIHI9dC5kZWNyeXB0QmxvY2sociwhMCksKDAsbi5ieXRlc1RvU3RyaW5nKShyKX19LHtrZXk6ImVuY3J5cHRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2lmKHQgaW5zdGFuY2VvZiB4KXt2YXIgcj0xNi1lLmxlbmd0aCUxNjtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLnJlcGVhdChyKTt2YXIgYT1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhKTtlbHNlIGZvcih2YXIgaT0wO2k8MTY7aSsrKWFbaV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7dmFyIG89KDAsbi5zdHJpbmdUb0J5dGVzKShlKTtvPXQuZW5jcnlwdChvLGEpO3ZhciBzPW5ldyBVaW50OEFycmF5KDE2K28ubGVuZ3RoKTtyZXR1cm4gcy5zZXQoYSkscy5zZXQobywxNiksKDAsbi5ieXRlc1RvU3RyaW5nKShzKX12YXIgYz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO3JldHVybiBjPXQuZW5jcnlwdChjKSwoMCxuLmJ5dGVzVG9TdHJpbmcpKGMpfX1dKSxlfSgpLFQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHQodCxyLG4sYSxpLG8scyxjKXt2YXIgdSxsLGY9NDArbi5sZW5ndGgrdC5sZW5ndGgsaD1uZXcgVWludDhBcnJheShmKSxkPTA7aWYocilmb3IobD1NYXRoLm1pbigzMixyLmxlbmd0aCk7ZDxsOysrZCloW2RdPXJbZF07Zm9yKHU9MDtkPDMyOyloW2QrK109ZVt1KytdO2Zvcih1PTAsbD1uLmxlbmd0aDt1PGw7Kyt1KWhbZCsrXT1uW3VdO2ZvcihoW2QrK109MjU1JmksaFtkKytdPWk+PjgmMjU1LGhbZCsrXT1pPj4xNiYyNTUsaFtkKytdPWk+Pj4yNCYyNTUsdT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTtvPj00JiYhYyYmKGhbZCsrXT0yNTUsaFtkKytdPTI1NSxoW2QrK109MjU1LGhbZCsrXT0yNTUpO3ZhciBnPXkoaCwwLGQpLHY9cz4+MztpZihvPj0zKWZvcih1PTA7dTw1MDsrK3UpZz15KGcsMCx2KTt2YXIgbSxiPWcuc3ViYXJyYXkoMCx2KTtpZihvPj0zKXtmb3IoZD0wO2Q8MzI7KytkKWhbZF09ZVtkXTtmb3IodT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTttPW5ldyBwKGIpLmVuY3J5cHRCbG9jayh5KGgsMCxkKSksbD1iLmxlbmd0aDt2YXIgdz1uZXcgVWludDhBcnJheShsKTtmb3IodT0xO3U8PTE5OysrdSl7Zm9yKHZhciBrPTA7azxsOysrayl3W2tdPWJba11edTttPW5ldyBwKHcpLmVuY3J5cHRCbG9jayhtKX1mb3IodT0wLGw9bS5sZW5ndGg7dTxsOysrdSlpZihhW3VdIT09bVt1XSlyZXR1cm4gbnVsbH1lbHNlIGZvcih1PTAsbD0obT1uZXcgcChiKS5lbmNyeXB0QmxvY2soZSkpLmxlbmd0aDt1PGw7Kyt1KWlmKGFbdV0hPT1tW3VdKXJldHVybiBudWxsO3JldHVybiBifXZhciByPWEuTmFtZS5nZXQoIklkZW50aXR5Iik7ZnVuY3Rpb24gaShlLHQscil7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrOSksbz1yLmxlbmd0aDtmb3Iobj0wO248bzsrK24paVtuXT1yW25dO3JldHVybiBpW24rK109MjU1JmUsaVtuKytdPWU+PjgmMjU1LGlbbisrXT1lPj4xNiYyNTUsaVtuKytdPTI1NSZ0LGlbbisrXT10Pj44JjI1NSxhJiYoaVtuKytdPTExNSxpW24rK109NjUsaVtuKytdPTEwOCxpW24rK109ODQpLHkoaSwwLG4pLnN1YmFycmF5KDAsTWF0aC5taW4oci5sZW5ndGgrNSwxNikpfWZ1bmN0aW9uIG8oZSx0LHIsbyxzKXtpZighKHQgaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLiIpO3ZhciBjLHU9ZS5nZXQodC5uYW1lKTtpZihudWxsIT11JiYoYz11LmdldCgiQ0ZNIikpLCFjfHwiTm9uZSI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcChpKHIsbyxzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPKGkocixvLHMsITApKX07aWYoIkFFU1YzIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEocyl9O3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoaSxvLGMpe2YodGhpcyxzKTt2YXIgdT1pLmdldCgiRmlsdGVyIik7aWYoISgwLGEuaXNOYW1lKSh1LCJTdGFuZGFyZCIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPXUubmFtZSx0aGlzLmRpY3Q9aTt2YXIgbD1pLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHwxIT09bCYmMiE9PWwmJjQhPT1sJiY1IT09bCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1sO3ZhciBoPWkuZ2V0KCJMZW5ndGgiKTtpZighaClpZihsPD0zKWg9NDA7ZWxzZXt2YXIgZD1pLmdldCgiQ0YiKSxnPWkuZ2V0KCJTdG1GIik7aWYoZCBpbnN0YW5jZW9mIGEuRGljdCYmZyBpbnN0YW5jZW9mIGEuTmFtZSl7ZC5zdXBwcmVzc0VuY3J5cHRpb249ITA7dmFyIHY9ZC5nZXQoZy5uYW1lKTsoaD12JiZ2LmdldCgiTGVuZ3RoIil8fDEyOCk8NDAmJihoPDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKGgpfHxoPDQwfHxoJTghPTApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBtPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMCwzMiksYj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsMzIpLHc9aS5nZXQoIlAiKSxrPWkuZ2V0KCJSIiksUz0oND09PWx8fDU9PT1sKSYmITEhPT1pLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9Uzt2YXIgeCxPLEE9KDAsbi5zdHJpbmdUb0J5dGVzKShvKTtpZihjKXtpZig2PT09ayl0cnl7Yz0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykoYyl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfXg9KDAsbi5zdHJpbmdUb0J5dGVzKShjKX1pZig1IT09bClPPXQoQSx4LG0sYix3LGssaCxTKTtlbHNle3ZhciBQPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMzIsNDApLFQ9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiTyIpKS5zdWJhcnJheSg0MCw0OCksST0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsNDgpLEU9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgzMiw0MCksaj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDQwLDQ4KSxNPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk9FIikpLF89KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVUUiKSk7KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiUGVybXMiKSksTz1mdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyx1LGwsZil7aWYodCl7dmFyIGg9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxoKX1lbHNlIHQ9W107dmFyIGQ7cmV0dXJuKGQ9Nj09PWU/bmV3IEY6bmV3IEMpLmNoZWNrVXNlclBhc3N3b3JkKHQscyxvKT9kLmdldFVzZXJLZXkodCxjLGwpOnQubGVuZ3RoJiZkLmNoZWNrT3duZXJQYXNzd29yZCh0LG4saSxyKT9kLmdldE93bmVyS2V5KHQsYSxpLHUpOm51bGx9KGsseCxtLFAsVCxJLGIsRSxqLE0sXyl9aWYoIU8mJiFjKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJObyBwYXNzd29yZCBnaXZlbiIsbi5QYXNzd29yZFJlc3BvbnNlcy5ORUVEX1BBU1NXT1JEKTtpZighTyYmYyl7dmFyIEw9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KDMyKSxvPTAscz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7bzxzOysrbylpW29dPXRbb107Zm9yKHZhciBjPTA7bzwzMjspaVtvKytdPWVbYysrXTt2YXIgdSxsPXkoaSwwLG8pLGY9YT4+MztpZihuPj0zKWZvcihjPTA7Yzw1MDsrK2MpbD15KGwsMCxsLmxlbmd0aCk7aWYobj49Myl7dT1yO3ZhciBoPW5ldyBVaW50OEFycmF5KGYpO2ZvcihjPTE5O2M+PTA7Yy0tKXtmb3IodmFyIGQ9MDtkPGY7KytkKWhbZF09bFtkXV5jO3U9bmV3IHAoaCkuZW5jcnlwdEJsb2NrKHUpfX1lbHNlIHU9bmV3IHAobC5zdWJhcnJheSgwLGYpKS5lbmNyeXB0QmxvY2socik7cmV0dXJuIHV9KHgsbSxrLGgpO089dChBLEwsbSxiLHcsayxoLFMpfWlmKCFPKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJJbmNvcnJlY3QgUGFzc3dvcmQiLG4uUGFzc3dvcmRSZXNwb25zZXMuSU5DT1JSRUNUX1BBU1NXT1JEKTtpZih0aGlzLmVuY3J5cHRpb25LZXk9TyxsPj00KXt2YXIgUj1pLmdldCgiQ0YiKTtSIGluc3RhbmNlb2YgYS5EaWN0JiYoUi5zdXBwcmVzc0VuY3J5cHRpb249ITApLHRoaXMuY2Y9Uix0aGlzLnN0bWY9aS5nZXQoIlN0bUYiKXx8cix0aGlzLnN0cmY9aS5nZXQoIlN0ckYiKXx8cix0aGlzLmVmZj1pLmdldCgiRUZGIil8fHRoaXMuc3RtZn19cmV0dXJuIGQocyxbe2tleToiY3JlYXRlQ2lwaGVyVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgUChvKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpLG8odGhpcy5jZix0aGlzLnN0bWYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSkpO3ZhciByPWkoZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSksbj1mdW5jdGlvbigpe3JldHVybiBuZXcgcChyKX07cmV0dXJuIG5ldyBQKG4sbil9fV0pLHN9KCk7cmV0dXJuIHN9KCk7dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PVR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmRlY3J5cHQ9cixuLm5leHRDaHVuaz1udWxsLG4uaW5pdGlhbGl6ZWQ9ITEsbn1yZXR1cm4gdD1sLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5pbml0aWFsaXplZD9lPXRoaXMubmV4dENodW5rOihlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMiksdGhpcy5pbml0aWFsaXplZD0hMCksZSYmMCE9PWUubGVuZ3RoKXt0aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO3ZhciB0PXRoaXMubmV4dENodW5rJiZ0aGlzLm5leHRDaHVuay5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7dmFyIHI9dGhpcy5idWZmZXJMZW5ndGgsbj1yK2UubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKG4pLnNldChlLHIpLHRoaXMuYnVmZmVyTGVuZ3RoPW59ZWxzZSB0aGlzLmVvZj0hMH19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5EZWNyeXB0U3RyZWFtPXN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DYXRhbG9nPXZvaWQgMDt2YXIgbj1yKDEzNSksYT1yKDIpLGk9cigxMzQpLG89cigxOTkpLHM9cigxMzYpLGM9cigyMDApLHU9cigxNDMpLGw9cigyMDEpLGY9cigxODgpLGg9cigyMDIpLGQ9cigyMDMpO2Z1bmN0aW9uIHAoZSl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHAoZSl9ZnVuY3Rpb24gZygpe2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gdihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7dihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7dihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9dyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gdyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gayhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2soZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGsoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBTKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PXAoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1wKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09cChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24geChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuRGljdCYmKGU9ZS5nZXQoIkQiKSksQXJyYXkuaXNBcnJheShlKT9lOm51bGx9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnhyZWY9cix0aGlzLl9jYXREaWN0PXIuZ2V0Q2F0YWxvZ09iaigpLCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdCx0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsLHRoaXMuZm9udENhY2hlPW5ldyBpLlJlZlNldENhY2hlLHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwLHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXAsdGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyBmLkdsb2JhbEltYWdlQ2FjaGUsdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGUsdGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZSx0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IGkuUmVmU2V0fXZhciB0LHIsdixPLEEsQyxGO3JldHVybiB0PWUscj1be2tleToidmVyc2lvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXtpZihuLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGUubmFtZSkpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZlcnNpb24iLGUubmFtZSk7KDAsYS53YXJuKSgiSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAiLmNvbmNhdChlLm5hbWUpKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmVyc2lvbiIsbnVsbCl9fSx7a2V5OiJsYW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9fSx7a2V5OiJuZWVkc1JlbmRlcmluZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5lZWRzUmVuZGVyaW5nIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm5lZWRzUmVuZGVyaW5nIiwiYm9vbGVhbiI9PXR5cGVvZiBlJiZlKX19LHtrZXk6ImNvbGxlY3Rpb24iLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e3ZhciB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY29sbGVjdGlvbiIsZSl9fSx7a2V5OiJhY3JvRm9ybSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfX0se2tleToiYWNyb0Zvcm1SZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJBY3JvRm9ybSIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIGkuUmVmP2U6bnVsbCl9fSx7a2V5OiJtZXRhZGF0YSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7dmFyIHQ9bnVsbDt0cnl7dmFyIHI9ISh0aGlzLnhyZWYuZW5jcnlwdCYmdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKSxvPXRoaXMueHJlZi5mZXRjaChlLHIpO2lmKG8gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0mJm8uZGljdCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGM9by5kaWN0LmdldCgiVHlwZSIpLHU9by5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLGkuaXNOYW1lKShjLCJNZXRhZGF0YSIpJiYoMCxpLmlzTmFtZSkodSwiWE1MIikpe3ZhciBsPSgwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShvLmdldFN0cmluZygpKTtsJiYodD1uZXcgaC5NZXRhZGF0YVBhcnNlcihsKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLmluZm8pKCdTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIix0KX19LHtrZXk6Im1hcmtJbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtYXJrSW5mbyIsZSl9fSx7a2V5OiJfcmVhZE1hcmtJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9e01hcmtlZDohMSxVc2VyUHJvcGVydGllczohMSxTdXNwZWN0czohMX07Zm9yKHZhciByIGluIHQpe3ZhciBuPWUuZ2V0KHIpOyJib29sZWFuIj09dHlwZW9mIG4mJih0W3JdPW4pfXJldHVybiB0fX0se2tleToic3RydWN0VHJlZVJvb3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9fSx7a2V5OiJfcmVhZFN0cnVjdFRyZWVSb290Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IGQuU3RydWN0VHJlZVJvb3QoZSk7cmV0dXJuIHQuaW5pdCgpLHR9fSx7a2V5OiJ0b3BsZXZlbFBhZ2VzRGljdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfX0se2tleToiZG9jdW1lbnRPdXRsaW5lIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9fSx7a2V5OiJfcmVhZERvY3VtZW50T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2lmKCEoKHQ9dC5nZXRSYXcoIkZpcnN0IikpaW5zdGFuY2VvZiBpLlJlZikpcmV0dXJuIG51bGw7dmFyIHI9e2l0ZW1zOltdfSxuPVt7b2JqOnQscGFyZW50OnJ9XSxvPW5ldyBpLlJlZlNldDtvLnB1dCh0KTtmb3IodmFyIHM9dGhpcy54cmVmLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO24ubGVuZ3RoPjA7KXt2YXIgbD1uLnNoaWZ0KCksZj1zLmZldGNoSWZSZWYobC5vYmopO2lmKG51bGwhPT1mKXtpZighZi5oYXMoIlRpdGxlIikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLiIpO3ZhciBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O2UucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZixyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTt2YXIgZD1mLmdldCgiVGl0bGUiKSxwPWYuZ2V0KCJGIil8fDAsZz1mLmdldEFycmF5KCJDIiksdj1mLmdldCgiQ291bnQiKSx5PWM7IUFycmF5LmlzQXJyYXkoZyl8fDMhPT1nLmxlbmd0aHx8MD09PWdbMF0mJjA9PT1nWzFdJiYwPT09Z1syXXx8KHk9dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihnLDApKTt2YXIgbT17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZCksY29sb3I6eSxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKHYpP3Y6dm9pZCAwLGJvbGQ6ISEoMiZwKSxpdGFsaWM6ISEoMSZwKSxpdGVtczpbXX07bC5wYXJlbnQuaXRlbXMucHVzaChtKSwodD1mLmdldFJhdygiRmlyc3QiKSlpbnN0YW5jZW9mIGkuUmVmJiYhby5oYXModCkmJihuLnB1c2goe29iajp0LHBhcmVudDptfSksby5wdXQodCkpLCh0PWYuZ2V0UmF3KCJOZXh0IikpaW5zdGFuY2VvZiBpLlJlZiYmIW8uaGFzKHQpJiYobi5wdXNoKHtvYmo6dCxwYXJlbnQ6bC5wYXJlbnR9KSxvLnB1dCh0KSl9fXJldHVybiByLml0ZW1zLmxlbmd0aD4wP3IuaXRlbXM6bnVsbH19LHtrZXk6InBlcm1pc3Npb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX19LHtrZXk6Il9yZWFkUGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz1NYXRoLnBvdygyLDMyKTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gYS5QZXJtaXNzaW9uRmxhZyl7dmFyIG89YS5QZXJtaXNzaW9uRmxhZ1tuXTt0Jm8mJnIucHVzaChvKX1yZXR1cm4gcn19LHtrZXk6Im9wdGlvbmFsQ29udGVudENvbmZpZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9DUHJvcGVydGllcyIpO2lmKCF0KXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO3ZhciByPXQuZ2V0KCJEIik7aWYoIXIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7dmFyIG89dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShvKSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTt2YXIgcyxjPVtdLHU9W10sbD1iKG8pO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZihmIGluc3RhbmNlb2YgaS5SZWYpe3UucHVzaChmKTt2YXIgaD10aGlzLnhyZWYuZmV0Y2hJZlJlZihmKTtjLnB1c2goe2lkOmYudG9TdHJpbmcoKSxuYW1lOiJzdHJpbmciPT10eXBlb2YgaC5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiTmFtZSIpKTpudWxsLGludGVudDoic3RyaW5nIj09dHlwZW9mIGguZ2V0KCJJbnRlbnQiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiSW50ZW50IikpOm51bGx9KX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfShlPXRoaXMuX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcocix1KSkuZ3JvdXBzPWN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogIi5jb25jYXQoZSkpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfX0se2tleToiX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlKXt2YXIgcj1bXTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbixhPWIoZSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28gaW5zdGFuY2VvZiBpLlJlZiYmdC5pbmNsdWRlcyhvKSYmci5wdXNoKG8udG9TdHJpbmcoKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfX1yZXR1cm4gcn1mdW5jdGlvbiBuKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO3ZhciBuLGE9W10scz1iKGUpO3RyeXtmb3Iocy5zKCk7IShuPXMubigpKS5kb25lOyl7dmFyIHU9bi52YWx1ZTtpZih1IGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXModSkpYy5wdXQodSksYS5wdXNoKHUudG9TdHJpbmcoKSk7ZWxzZXt2YXIgbD1vKHUscik7bCYmYS5wdXNoKGwpfX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYocj4wKXJldHVybiBhO3ZhciBmLGg9W10sZD1iKHQpO3RyeXtmb3IoZC5zKCk7IShmPWQubigpKS5kb25lOyl7dmFyIHA9Zi52YWx1ZTtjLmhhcyhwKXx8aC5wdXNoKHAudG9TdHJpbmcoKSl9fWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfXJldHVybiBoLmxlbmd0aCYmYS5wdXNoKHtuYW1lOm51bGwsb3JkZXI6aH0pLGF9ZnVuY3Rpb24gbyhlLHQpe2lmKCsrdD51KXJldHVybigwLGEud2FybikoInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpLG51bGw7dmFyIHI9cy5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO3ZhciBpPXMuZmV0Y2hJZlJlZihyWzBdKTtpZigic3RyaW5nIiE9dHlwZW9mIGkpcmV0dXJuIG51bGw7dmFyIG89bihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxhLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfXZhciBzPXRoaXMueHJlZixjPW5ldyBpLlJlZlNldCx1PTEwO3JldHVybntuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiTmFtZSIpKTpudWxsLGNyZWF0b3I6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiQ3JlYXRvciIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJDcmVhdG9yIikpOm51bGwsYmFzZVN0YXRlOmUuZ2V0KCJCYXNlU3RhdGUiKWluc3RhbmNlb2YgaS5OYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cihlLmdldCgiT04iKSksb2ZmOnIoZS5nZXQoIk9GRiIpKSxvcmRlcjpuKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6bnVsbH19fSx7a2V5OiJzZXRBY3R1YWxOdW1QYWdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1lfX0se2tleToiaGFzQWN0dWFsTnVtUGFnZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWN0dWFsTnVtUGFnZXN9fSx7a2V5OiJfcGFnZXNDb3VudCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9wYWdlc0NvdW50IixlKX19LHtrZXk6Im51bVBhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLl9hY3R1YWxOdW1QYWdlczp0aGlzLl9wYWdlc0NvdW50fX0se2tleToiZGVzdGluYXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByLG49YihlLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT14KHNbMV0pO3UmJih0WygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGMpXT11KX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9fWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPXgocik7biYmKHRbZV09bil9KSk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRlc3RpbmF0aW9ucyIsdCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZERlc3RzKCk7aWYodCBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByPXgodC5nZXQoZSkpO2lmKHIpcmV0dXJuIHI7dmFyIG49dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYobilyZXR1cm4oMCxhLndhcm4pKCdGb3VuZCAiJy5jb25jYXQoZSwnIiBhdCBhbiBpbmNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIE5hbWVUcmVlLicpKSxufWVsc2UgaWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIHM9eCh0LmdldChlKSk7aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH19LHtrZXk6Il9yZWFkRGVzdHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIik/dGhpcy5fY2F0RGljdC5nZXQoIkRlc3RzIik6dm9pZCAwfX0se2tleToicGFnZUxhYmVscyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGFnZUxhYmVscygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYWJlbHMiLGUpfX0se2tleToiX3JlYWRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKSxyPW51bGwscz0iIixjPW5ldyBvLk51bWJlclRyZWUoZSx0aGlzLnhyZWYpLmdldEFsbCgpLHU9IiIsbD0xLGY9MCxoPXRoaXMubnVtUGFnZXM7ZjxoO2YrKyl7dmFyIGQ9Yy5nZXQoZik7aWYodm9pZCAwIT09ZCl7aWYoIShkIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYoZC5oYXMoIlR5cGUiKSYmISgwLGkuaXNOYW1lKShkLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0eXBlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2lmKGQuaGFzKCJTIikpe3ZhciBwPWQuZ2V0KCJTIik7aWYoIShwIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtyPXAubmFtZX1lbHNlIHI9bnVsbDtpZihkLmhhcygiUCIpKXt2YXIgZz1kLmdldCgiUCIpO2lmKCJzdHJpbmciIT10eXBlb2YgZyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7cz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShnKX1lbHNlIHM9IiI7aWYoZC5oYXMoIlN0Iikpe3ZhciB2PWQuZ2V0KCJTdCIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih2KSYmdj49MSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7bD12fWVsc2UgbD0xfXN3aXRjaChyKXtjYXNlIkQiOnU9bDticmVhaztjYXNlIlIiOmNhc2UiciI6dT0oMCxuLnRvUm9tYW5OdW1lcmFscykobCwiciI9PT1yKTticmVhaztjYXNlIkEiOmNhc2UiYSI6dmFyIHk9ImEiPT09cj85Nzo2NSxtPWwtMTt1PVN0cmluZy5mcm9tQ2hhckNvZGUoeSttJTI2KS5yZXBlYXQoTWF0aC5mbG9vcihtLzI2KSsxKTticmVhaztkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgIicuY29uY2F0KHIsJyIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJykpO3U9IiJ9dFtmXT1zK3UsbCsrfXJldHVybiB0fX0se2tleToicGFnZUxheW91dCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKSx0PSIiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfX0se2tleToicGFnZU1vZGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpLHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfX0se2tleToidmlld2VyUHJlZmVyZW5jZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl9jYXREaWN0LmdldCgiVmlld2VyUHJlZmVyZW5jZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsbnVsbCk7dmFyIHIsbj1udWxsLG89Yih0LmdldEtleXMoKSk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlLGM9dC5nZXQocyksdT12b2lkIDA7c3dpdGNoKHMpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiBjJiYodT1jKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihjIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChjLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6dT1jLm5hbWU7YnJlYWs7ZGVmYXVsdDp1PSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJTI9PTAmJmMuZXZlcnkoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0KSYmdD4wJiYoMD09PXJ8fHQ+PW5bci0xXSkmJnQ8PWUubnVtUGFnZXN9KSkmJih1PWMpO2JyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPjAmJih1PWMpO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogIi5jb25jYXQocywiLiIpKTtjb250aW51ZX12b2lkIDAhPT11PyhufHwobj1PYmplY3QuY3JlYXRlKG51bGwpKSxuW3NdPXUpOigwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICcpLmNvbmNhdChjLCIuIikpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG4pfX0se2tleToib3BlbkFjdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIG49bmV3IGkuRGljdCh0aGlzLnhyZWYpO24uc2V0KCJBIix0KTt2YXIgbz17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtlLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0Om4scmVzdWx0T2JqOm99KSxBcnJheS5pc0FycmF5KG8uZGVzdCk/ci5kZXN0PW8uZGVzdDpvLmFjdGlvbiYmKHIuYWN0aW9uPW8uYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkodCkmJihyLmRlc3Q9dCk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLGEub2JqZWN0U2l6ZSkocik+MD9yOm51bGwpfX0se2tleToiYXR0YWNobWVudHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpLHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXt2YXIgcixuPWIobmV3IG8uTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdLGY9bmV3IGwuRmlsZVNwZWModSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpLHRbKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyldPWYuc2VyaWFsaXphYmxlfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImF0dGFjaG1lbnRzIix0KX19LHtrZXk6InhmYUltYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIiksdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJYRkFJbWFnZXMiKSl7dmFyIHIsbj1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdO3R8fCh0PW5ldyBpLkRpY3QodGhpcy54cmVmKSksdC5zZXQoKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyksdSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywieGZhSW1hZ2VzIix0KX19LHtrZXk6Il9jb2xsZWN0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKSx0PW51bGw7ZnVuY3Rpb24gcihlLHIpe2lmKHIgaW5zdGFuY2VvZiBpLkRpY3QmJigwLGkuaXNOYW1lKShyLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe3ZhciBuPXIuZ2V0KCJKUyIpO2lmKG4gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pbj1uLmdldFN0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybjtudWxsPT09dCYmKHQ9bmV3IE1hcCksbj0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShuKS5yZXBsYWNlKC9cdTAwMDAvZywiIiksdC5zZXQoZSxuKX19aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7dmFyIG4sYz1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJKYXZhU2NyaXB0IiksdGhpcy54cmVmKS5nZXRBbGwoKSk7dHJ5e2ZvcihjLnMoKTshKG49Yy5uKCkpLmRvbmU7KXt2YXIgdT1tKG4udmFsdWUsMiksbD11WzBdLGY9dVsxXTtyKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGwpLGYpfX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX19dmFyIGg9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTtyZXR1cm4gaCYmcigiT3BlbkFjdGlvbiIsaCksdH19LHtrZXk6ImphdmFTY3JpcHQiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsdD9mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBrKGUpfShlPXQudmFsdWVzKCkpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHx3KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpOm51bGwpfX0se2tleToianNBY3Rpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpLHQ9KDAsbi5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMuX2NhdERpY3QsYS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSk7aWYoZSl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHIsaT1iKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89bShyLnZhbHVlLDIpLHM9b1swXSxjPW9bMV07cyBpbiB0P3Rbc10ucHVzaChjKTp0W3NdPVtjXX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLHQpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTooRj15KGcoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG87cmV0dXJuIGcoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgMjpuPWUuc2VudCxhPWIobiksZS5wcmV2PTQsYS5zKCk7Y2FzZSA2OmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTM7YnJlYWt9aWYoKG89aS52YWx1ZSkubG9hZGVkTmFtZSE9PXQpe2UubmV4dD0xMTticmVha31yZXR1cm4gby5mYWxsYmFjayhyKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMTplLm5leHQ9NjticmVhaztjYXNlIDEzOmUubmV4dD0xODticmVhaztjYXNlIDE1OmUucHJldj0xNSxlLnQwPWUuY2F0Y2goNCksYS5lKGUudDApO2Nhc2UgMTg6cmV0dXJuIGUucHJldj0xOCxhLmYoKSxlLmZpbmlzaCgxOCk7Y2FzZSAyMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzQsMTUsMTgsMjFdXSl9KSkpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNsZWFudXAiLHZhbHVlOihDPXkoZygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYSxpPWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PWkubGVuZ3RoPjAmJnZvaWQgMCE9PWlbMF0mJmlbMF0sKDAsYy5jbGVhckdsb2JhbENhY2hlcykoKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIodCksdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKSx0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCksdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCksZS5uZXh0PTgsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgODpyPWUuc2VudCxuPWIocik7dHJ5e2ZvcihuLnMoKTshKGE9bi5uKCkpLmRvbmU7KWRlbGV0ZSBhLnZhbHVlLmRpY3QuY2FjaGVLZXl9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dGhpcy5mb250Q2FjaGUuY2xlYXIoKSx0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKSx0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlRGljdCIsdmFsdWU6KEE9eShnKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8scyxjLHUsbCxmLGgsZCxwLHYseSxtLGIsdztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnI9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLG49bmV3IGkuUmVmU2V0LChvPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpKWluc3RhbmNlb2YgaS5SZWYmJm4ucHV0KG8pLHM9dGhpcy54cmVmLGM9dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsdT10aGlzLnBhZ2VJbmRleENhY2hlLGw9MDtjYXNlIDY6aWYoIXIubGVuZ3RoKXtlLm5leHQ9Njc7YnJlYWt9aWYoISgoZj1yLnBvcCgpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9MzQ7YnJlYWt9aWYoISgoaD1jLmdldChmKSk+PTAmJmwraDw9dCkpe2UubmV4dD0xMzticmVha31yZXR1cm4gbCs9aCxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgMTM6aWYoIW4uaGFzKGYpKXtlLm5leHQ9MTU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpO2Nhc2UgMTU6cmV0dXJuIG4ucHV0KGYpLGUubmV4dD0xOCxzLmZldGNoQXN5bmMoZik7Y2FzZSAxODppZighKChkPWUuc2VudClpbnN0YW5jZW9mIGkuRGljdCkpe2UubmV4dD0zMjticmVha31pZighKChwPWQuZ2V0UmF3KCJUeXBlIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5uZXh0PTI0LHMuZmV0Y2hBc3luYyhwKTtjYXNlIDI0OnA9ZS5zZW50O2Nhc2UgMjU6aWYoISgwLGkuaXNOYW1lKShwLCJQYWdlIikmJmQuaGFzKCJLaWRzIikpe2UubmV4dD0zMjticmVha31pZihjLmhhcyhmKXx8Yy5wdXQoZiwxKSx1LmhhcyhmKXx8dS5wdXQoZixsKSxsIT09dCl7ZS5uZXh0PTMwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbZCxmXSk7Y2FzZSAzMDpyZXR1cm4gbCsrLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzMjpyZXR1cm4gci5wdXNoKGQpLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzNDppZihmIGluc3RhbmNlb2YgaS5EaWN0KXtlLm5leHQ9MzY7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjYXNlIDM2OmlmKHY9Zi5vYmpJZCwhKCh5PWYuZ2V0UmF3KCJDb3VudCIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUubmV4dD00MSxzLmZldGNoQXN5bmMoeSk7Y2FzZSA0MTp5PWUuc2VudDtjYXNlIDQyOmlmKCEoTnVtYmVyLmlzSW50ZWdlcih5KSYmeT49MCkpe2UubmV4dD00NzticmVha31pZih2JiYhYy5oYXModikmJmMucHV0KHYseSksIShsK3k8PXQpKXtlLm5leHQ9NDc7YnJlYWt9cmV0dXJuIGwrPXksZS5hYnJ1cHQoImNvbnRpbnVlIiw2KTtjYXNlIDQ3OmlmKCEoKG09Zi5nZXRSYXcoIktpZHMiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUyO2JyZWFrfXJldHVybiBlLm5leHQ9NTEscy5mZXRjaEFzeW5jKG0pO2Nhc2UgNTE6bT1lLnNlbnQ7Y2FzZSA1MjppZihBcnJheS5pc0FycmF5KG0pKXtlLm5leHQ9NjQ7YnJlYWt9aWYoISgoYj1mLmdldFJhdygiVHlwZSIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NTg7YnJlYWt9cmV0dXJuIGUubmV4dD01NyxzLmZldGNoQXN5bmMoYik7Y2FzZSA1NzpiPWUuc2VudDtjYXNlIDU4OmlmKCEoMCxpLmlzTmFtZSkoYiwiUGFnZSIpJiZmLmhhcygiS2lkcyIpKXtlLm5leHQ9NjM7YnJlYWt9aWYobCE9PXQpe2UubmV4dD02MTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsW2YsbnVsbF0pO2Nhc2UgNjE6cmV0dXJuIGwrKyxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgNjM6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIik7Y2FzZSA2NDpmb3Iodz1tLmxlbmd0aC0xO3c+PTA7dy0tKXIucHVzaChtW3ddKTtlLm5leHQ9NjticmVhaztjYXNlIDY3OnRocm93IG5ldyBFcnJvcigiUGFnZSBpbmRleCAiLmNvbmNhdCh0LCIgbm90IGZvdW5kLiIpKTtjYXNlIDY4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFsbFBhZ2VEaWN0cyIsdmFsdWU6KE89eShnKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4PWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnA9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG4uWFJlZkVudHJ5RXhjZXB0aW9uJiYhdCl0aHJvdyBlO3QmJnImJjA9PT1oJiYoKDAsYS53YXJuKSgnZ2V0QWxsUGFnZURpY3RzIC0gU2tpcHBpbmcgaW52YWxpZCBmaXJzdCBwYWdlOiAiJy5jb25jYXQoZSwnIi4nKSksZT1pLkRpY3QuZW1wdHkpLHUuc2V0KGgrKyxbZSxudWxsXSl9LGQ9ZnVuY3Rpb24oZSx0KXt0JiYhZi5oYXModCkmJmYucHV0KHQsaCksdS5zZXQoaCsrLFtlLHRdKX0sdD14Lmxlbmd0aD4wJiZ2b2lkIDAhPT14WzBdJiZ4WzBdLHI9dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzLG89W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0scz1uZXcgaS5SZWZTZXQsKGM9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIikpaW5zdGFuY2VvZiBpLlJlZiYmcy5wdXQoYyksdT1uZXcgTWFwLGw9dGhpcy54cmVmLGY9dGhpcy5wYWdlSW5kZXhDYWNoZSxoPTA7Y2FzZSAxMDppZighKG8ubGVuZ3RoPjApKXtlLm5leHQ9NzA7YnJlYWt9aWYodj1vLmF0KC0xKSx5PXYuY3VycmVudE5vZGUsbT12LnBvc0luS2lkcywhKChiPXkuZ2V0UmF3KCJLaWRzIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5wcmV2PTE1LGUubmV4dD0xOCxsLmZldGNoQXN5bmMoYik7Y2FzZSAxODpiPWUuc2VudCxlLm5leHQ9MjU7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gZS5wcmV2PTIxLGUudDA9ZS5jYXRjaCgxNSkscChlLnQwKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDI1OmlmKEFycmF5LmlzQXJyYXkoYikpe2UubmV4dD0yODticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAyODppZighKG0+PWIubGVuZ3RoKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBvLnBvcCgpLGUuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgMzE6aWYodz1iW21dLGs9dm9pZCAwLCEodyBpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUwO2JyZWFrfWlmKCFzLmhhcyh3KSl7ZS5uZXh0PTM3O2JyZWFrfXJldHVybiBwKG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAzNzpyZXR1cm4gcy5wdXQodyksZS5wcmV2PTM4LGUubmV4dD00MSxsLmZldGNoQXN5bmModyk7Y2FzZSA0MTprPWUuc2VudCxlLm5leHQ9NDg7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gZS5wcmV2PTQ0LGUudDE9ZS5jYXRjaCgzOCkscChlLnQxKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDQ4OmUubmV4dD01MTticmVhaztjYXNlIDUwOms9dztjYXNlIDUxOmlmKGsgaW5zdGFuY2VvZiBpLkRpY3Qpe2UubmV4dD01NDticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDU0OmlmKCEoKFM9ay5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTY2O2JyZWFrfXJldHVybiBlLnByZXY9NTYsZS5uZXh0PTU5LGwuZmV0Y2hBc3luYyhTKTtjYXNlIDU5OlM9ZS5zZW50LGUubmV4dD02NjticmVhaztjYXNlIDYyOnJldHVybiBlLnByZXY9NjIsZS50Mj1lLmNhdGNoKDU2KSxwKGUudDIpLGUuYWJydXB0KCJicmVhayIsNzApO2Nhc2UgNjY6KDAsaS5pc05hbWUpKFMsIlBhZ2UiKXx8IWsuaGFzKCJLaWRzIik/ZChrLHcgaW5zdGFuY2VvZiBpLlJlZj93Om51bGwpOm8ucHVzaCh7Y3VycmVudE5vZGU6ayxwb3NJbktpZHM6MH0pLHYucG9zSW5LaWRzKyssZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNzA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxNSwyMV0sWzM4LDQ0XSxbNTYsNjJdXSl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KGUpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTt2YXIgbj10aGlzLnhyZWYsbz0wO3JldHVybiBmdW5jdGlvbiByKHMpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcixvPTA7cmV0dXJuIG4uZmV0Y2hBc3luYyh0KS50aGVuKChmdW5jdGlvbihuKXtpZigoMCxpLmlzUmVmc0VxdWFsKSh0LGUpJiYhKDAsaS5pc0RpY3QpKG4sIlBhZ2UiKSYmIShuIGluc3RhbmNlb2YgaS5EaWN0JiYhbi5oYXMoIlR5cGUiKSYmbi5oYXMoIkNvbnRlbnRzIikpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS4iKTtpZighbilyZXR1cm4gbnVsbDtpZighKG4gaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybiByPW4uZ2V0UmF3KCJQYXJlbnQiKSxuLmdldEFzeW5jKCJQYXJlbnQiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgcyxjPVtdLHU9ITEsbD1iKGUpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZighKGYgaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLiIpO2lmKCgwLGkuaXNSZWZzRXF1YWwpKGYsdCkpe3U9ITA7YnJlYWt9Yy5wdXNoKG4uZmV0Y2hBc3luYyhmKS50aGVuKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9vKz1lLmdldCgiQ291bnQiKTpvKyt9KSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1pZighdSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwoYykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bbyxyXX0pKX0pKX0ocykudGhlbigoZnVuY3Rpb24obil7aWYoIW4pcmV0dXJuIHQucGFnZUluZGV4Q2FjaGUucHV0KGUsbyksbzt2YXIgYT1tKG4sMiksaT1hWzBdLHM9YVsxXTtyZXR1cm4gbys9aSxyKHMpfSkpfShlKX19LHtrZXk6ImJhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJVUkkiKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXt2YXIgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9KDAsYS5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKHIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLHIuaHJlZil9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJiYXNlVXJsIixudWxsKX19XSx2PVt7a2V5OiJwYXJzZURlc3REaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRlc3REaWN0O2lmKHQgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciByPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiPT09cChyKSl7dmFyIG8sYyx1PWUuZG9jQmFzZVVybHx8bnVsbCxsPWUuZG9jQXR0YWNobWVudHN8fG51bGwsZj10LmdldCgiQSIpO2lmKGYgaW5zdGFuY2VvZiBpLkRpY3R8fCh0LmhhcygiRGVzdCIpP2Y9dC5nZXQoIkRlc3QiKTooZj10LmdldCgiQUEiKSlpbnN0YW5jZW9mIGkuRGljdCYmKGYuaGFzKCJEIik/Zj1mLmdldCgiRCIpOmYuaGFzKCJVIikmJihmPWYuZ2V0KCJVIikpKSksZiBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGg9Zi5nZXQoIlMiKTtpZighKGggaW5zdGFuY2VvZiBpLk5hbWUpKXJldHVybiB2b2lkKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LiIpO3ZhciBkPWgubmFtZTtzd2l0Y2goZCl7Y2FzZSJSZXNldEZvcm0iOnZhciBnLHY9Zi5nZXQoIkZsYWdzIikseT0wPT0oMSYoIm51bWJlciI9PXR5cGVvZiB2P3Y6MCkpLG09W10sdz1bXSxrPWIoZi5nZXQoIkZpZWxkcyIpfHxbXSk7dHJ5e2ZvcihrLnMoKTshKGc9ay5uKCkpLmRvbmU7KXt2YXIgUz1nLnZhbHVlO1MgaW5zdGFuY2VvZiBpLlJlZj93LnB1c2goUy50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIFMmJm0ucHVzaCgoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShTKSl9fWNhdGNoKGUpe2suZShlKX1maW5hbGx5e2suZigpfXIucmVzZXRGb3JtPXtmaWVsZHM6bSxyZWZzOncsaW5jbHVkZTp5fTticmVhaztjYXNlIlVSSSI6KG89Zi5nZXQoIlVSSSIpKWluc3RhbmNlb2YgaS5OYW1lJiYobz0iLyIrby5uYW1lKTticmVhaztjYXNlIkdvVG8iOmM9Zi5nZXQoIkQiKTticmVhaztjYXNlIkxhdW5jaCI6Y2FzZSJHb1RvUiI6dmFyIHg9Zi5nZXQoIkYiKTt4IGluc3RhbmNlb2YgaS5EaWN0P289eC5nZXQoIkYiKXx8bnVsbDoic3RyaW5nIj09dHlwZW9mIHgmJihvPXgpO3ZhciBPPWYuZ2V0KCJEIik7aWYoTyYmKE8gaW5zdGFuY2VvZiBpLk5hbWUmJihPPU8ubmFtZSksInN0cmluZyI9PXR5cGVvZiBvKSl7dmFyIEE9by5zcGxpdCgiIyIpWzBdOyJzdHJpbmciPT10eXBlb2YgTz9vPUErIiMiK086QXJyYXkuaXNBcnJheShPKSYmKG89QSsiIyIrSlNPTi5zdHJpbmdpZnkoTykpfXZhciBDPWYuZ2V0KCJOZXdXaW5kb3ciKTsiYm9vbGVhbiI9PXR5cGVvZiBDJiYoci5uZXdXaW5kb3c9Qyk7YnJlYWs7Y2FzZSJHb1RvRSI6dmFyIEYsUD1mLmdldCgiVCIpO2lmKGwmJlAgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBUPVAuZ2V0KCJSIiksST1QLmdldCgiTiIpOygwLGkuaXNOYW1lKShULCJDIikmJiJzdHJpbmciPT10eXBlb2YgSSYmKEY9bFsoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShJKV0pfUY/ci5hdHRhY2htZW50PUY6KDAsYS53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6dmFyIEU9Zi5nZXQoIk4iKTtFIGluc3RhbmNlb2YgaS5OYW1lJiYoci5hY3Rpb249RS5uYW1lKTticmVhaztjYXNlIlNldE9DR1N0YXRlIjp2YXIgaj1mLmdldCgiU3RhdGUiKSxNPWYuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkoail8fDA9PT1qLmxlbmd0aClicmVhazt2YXIgXyxMPVtdLFI9YihqKTt0cnl7Zm9yKFIucygpOyEoXz1SLm4oKSkuZG9uZTspe3ZhciBOPV8udmFsdWU7aWYoTiBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goTi5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6Y2FzZSJUb2dnbGUiOkwucHVzaChOLm5hbWUpfWVsc2UgTiBpbnN0YW5jZW9mIGkuUmVmJiZMLnB1c2goTi50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9aWYoTC5sZW5ndGghPT1qLmxlbmd0aClicmVhaztyLnNldE9DR1N0YXRlPXtzdGF0ZTpMLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgTXx8TX07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijp2YXIgRCxCPWYuZ2V0KCJKUyIpO0IgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0/RD1CLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgQiYmKEQ9Qik7dmFyIFU9RCYmKDAsbi5yZWNvdmVySnNVUkwpKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKEQpKTtpZihVKXtvPVUudXJsLHIubmV3V2luZG93PVUubmV3V2luZG93O2JyZWFrfWRlZmF1bHQ6aWYoIkphdmFTY3JpcHQiPT09ZHx8IlN1Ym1pdEZvcm0iPT09ZClicmVhazsoMCxhLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiAiJy5jb25jYXQoZCwnIi4nKSl9fWVsc2UgdC5oYXMoIkRlc3QiKSYmKGM9dC5nZXQoIkRlc3QiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgJD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKG8sdSx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pOyQmJihyLnVybD0kLmhyZWYpLHIudW5zYWZlVXJsPW99YyYmKGMgaW5zdGFuY2VvZiBpLk5hbWUmJihjPWMubmFtZSksInN0cmluZyI9PXR5cGVvZiBjP3IuZGVzdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTpBcnJheS5pc0FycmF5KGMpJiYoci5kZXN0PWMpKX1lbHNlKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIil9ZWxzZSgwLGEud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIil9fV0sciYmUyh0LnByb3RvdHlwZSxyKSx2JiZTKHQsdiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkNhdGFsb2c9T30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk51bWJlclRyZWU9dC5OYW1lVHJlZT12b2lkIDA7dmFyIG49cigxMzQpLGE9cigyKTtmdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxvKGUsdCl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1jKGUpO2lmKHQpe3ZhciBhPWModGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09dSh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX1mdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09dShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXUobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT11KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gdCYmZChlLnByb3RvdHlwZSx0KSxyJiZkKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2godGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIiksdGhpcy5yb290PXQsdGhpcy54cmVmPXIsdGhpcy5fdHlwZT1ufXJldHVybiBwKGUsW3trZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7dmFyIHQ9dGhpcy54cmVmLHI9bmV3IG4uUmVmU2V0O3IucHV0KHRoaXMucm9vdCk7Zm9yKHZhciBpPVt0aGlzLnJvb3RdO2kubGVuZ3RoPjA7KXt2YXIgbz10LmZldGNoSWZSZWYoaS5zaGlmdCgpKTtpZihvIGluc3RhbmNlb2Ygbi5EaWN0KWlmKG8uaGFzKCJLaWRzIikpe3ZhciBzPW8uZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkocykpY29udGludWU7dmFyIGMsdT1sKHMpO3RyeXtmb3IodS5zKCk7IShjPXUubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZihyLmhhcyhmKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcignRHVwbGljYXRlIGVudHJ5IGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpO2kucHVzaChmKSxyLnB1dChmKX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9fWVsc2V7dmFyIGg9by5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IodmFyIGQ9MCxwPWgubGVuZ3RoO2Q8cDtkKz0yKWUuc2V0KHQuZmV0Y2hJZlJlZihoW2RdKSx0LmZldGNoSWZSZWYoaFtkKzFdKSl9fXJldHVybiBlfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZighdGhpcy5yb290KXJldHVybiBudWxsO2Zvcih2YXIgdD10aGlzLnhyZWYscj10LmZldGNoSWZSZWYodGhpcy5yb290KSxuPTA7ci5oYXMoIktpZHMiKTspe2lmKCsrbj4xMClyZXR1cm4oMCxhLndhcm4pKCdTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIicuY29uY2F0KHRoaXMuX3R5cGUsJyIgdHJlZS4nKSksbnVsbDt2YXIgaT1yLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2Zvcih2YXIgbz0wLHM9aS5sZW5ndGgtMTtvPD1zOyl7dmFyIGM9bytzPj4xLHU9dC5mZXRjaElmUmVmKGlbY10pLGw9dS5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGxbMF0pKXM9Yy0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihsWzFdKSkpe3I9dTticmVha31vPWMrMX19aWYobz5zKXJldHVybiBudWxsfXZhciBmPXIuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKHZhciBoPTAsZD1mLmxlbmd0aC0yO2g8PWQ7KXt2YXIgcD1oK2Q+PjEsZz1wKygxJnApLHY9dC5mZXRjaElmUmVmKGZbZ10pO2lmKGU8dilkPWctMjtlbHNle2lmKCEoZT52KSlyZXR1cm4gdC5mZXRjaElmUmVmKGZbZysxXSk7aD1nKzJ9fXJldHVybiBudWxsfX1dKSxlfSgpLHY9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOYW1lcyIpfXJldHVybiBwKHIpfShnKTt0Lk5hbWVUcmVlPXY7dmFyIHk9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOdW1zIil9cmV0dXJuIHAocil9KGcpO3QuTnVtYmVyVHJlZT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24oKXsoMCxuLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpLCgwLGEuY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgbj1yKDEzNCksYT1yKDE2OSl9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWxlU3BlYz12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTM0KTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsfXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHQgaW5zdGFuY2VvZiBpLkRpY3QmJih0aGlzLnhyZWY9cix0aGlzLnJvb3Q9dCx0LmhhcygiRlMiKSYmKHRoaXMuZnM9dC5nZXQoIkZTIikpLHRoaXMuZGVzY3JpcHRpb249dC5oYXMoIkRlc2MiKT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiRGVzYyIpKToiIix0LmhhcygiUkYiKSYmKDAsbi53YXJuKSgiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIiksdGhpcy5jb250ZW50QXZhaWxhYmxlPSEwLHQuaGFzKCJFRiIpfHwodGhpcy5jb250ZW50QXZhaWxhYmxlPSExLCgwLG4ud2FybikoIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIikpKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7dmFyIGU9Yyh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZSgvXFxcXC9nLCJcXCIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1xcL2csIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJjb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jb250ZW50QXZhaWxhYmxlKXJldHVybiBudWxsOyF0aGlzLmNvbnRlbnRSZWYmJnRoaXMucm9vdCYmKHRoaXMuY29udGVudFJlZj1jKHRoaXMucm9vdC5nZXQoIkVGIikpKTt2YXIgZT1udWxsO2lmKHRoaXMuY29udGVudFJlZil7dmFyIHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2YgYS5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLG4ud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxuLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuRmlsZVNwZWM9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1ldGFkYXRhUGFyc2VyPXZvaWQgMDt2YXIgbj1yKDE5NSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1vKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGkscz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBzKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gcyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdD10aGlzLl9yZXBhaXIodCk7dmFyIHI9bmV3IG4uU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKHQpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXAsdGhpcy5fZGF0YT10LHImJnRoaXMuX3BhcnNlKHIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX3JlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZSgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQucmVwbGFjZSgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KnIrMSpuKX0pKS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKCJfcmVwYWlyOiAiLmNvbmNhdCh0LCIgaXNuJ3QgZGVmaW5lZC4iKSl9KSksbj1bXSxhPTAsaT1yLmxlbmd0aDthPGk7YSs9Mil7dmFyIG89MjU2KnIuY2hhckNvZGVBdChhKStyLmNoYXJDb2RlQXQoYSsxKTtvPj0zMiYmbzwxMjcmJjYwIT09byYmNjIhPT1vJiYzOCE9PW8/bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpOm4ucHVzaCgiJiN4IisoNjU1MzYrbykudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyIpfXJldHVybiI+IituLmpvaW4oIiIpfSkpfX0se2tleToiX2dldFNlcXVlbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4icmRmOmxpIj09PWUubm9kZU5hbWV9KSl9fSx7a2V5OiJfcGFyc2VBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNDaGlsZE5vZGVzKCkpe3ZhciB0PShuPWUuY2hpbGROb2RlcyxhPTEsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0obixhKXx8byhuLGEpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpWzBdLHI9dGhpcy5fZ2V0U2VxdWVuY2UodCl8fFtdO3RoaXMuX21ldGFkYXRhTWFwLnNldChlLm5vZGVOYW1lLHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudC50cmltKCl9KSkpfXZhciBuLGF9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUpZm9yKHQ9dC5maXJzdENoaWxkO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZztpZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSl7dmFyIHIsbj1pKHQuY2hpbGROb2Rlcyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO2lmKCJyZGY6ZGVzY3JpcHRpb24iPT09YS5ub2RlTmFtZSl7dmFyIG8scz1pKGEuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9Yy5ub2RlTmFtZTtzd2l0Y2godSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkoYyk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KHUsYy50ZXh0Q29udGVudC50cmltKCkpfX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX19fX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX1dKSYmYyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuTWV0YWRhdGFQYXJzZXI9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cnVjdFRyZWVSb290PXQuU3RydWN0VHJlZVBhZ2U9dm9pZCAwO3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE5OSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGg9IlBBR0VfQ09OVEVOVCIsZD0iU1RSRUFNX0NPTlRFTlQiLHA9Ik9CSkVDVCIsZz0iRUxFTUVOVCIsdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMuZGljdD10LHRoaXMucm9sZU1hcD1uZXcgTWFwfXJldHVybiBmKGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZWFkUm9sZU1hcCgpfX0se2tleToicmVhZFJvbGVNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZGljdC5nZXQoIlJvbGVNYXAiKTt0IGluc3RhbmNlb2Ygbi5EaWN0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7ciBpbnN0YW5jZW9mIG4uTmFtZSYmZS5yb2xlTWFwLnNldCh0LHIubmFtZSl9KSl9fV0pLGV9KCk7dC5TdHJ1Y3RUcmVlUm9vdD12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnRyZWU9dCx0aGlzLmRpY3Q9cix0aGlzLmtpZHM9W10sdGhpcy5wYXJzZUtpZHMoKX1yZXR1cm4gZihlLFt7a2V5OiJyb2xlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpY3QuZ2V0KCJTIiksdD1lIGluc3RhbmNlb2Ygbi5OYW1lP2UubmFtZToiIixyPXRoaXMudHJlZS5yb290O3JldHVybiByLnJvbGVNYXAuaGFzKHQpP3Iucm9sZU1hcC5nZXQodCk6dH19LHtrZXk6InBhcnNlS2lkcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1udWxsLHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2Ygbi5SZWYmJihlPXQudG9TdHJpbmcoKSk7dmFyIHI9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLGk9byhyKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsYz10aGlzLnBhcnNlS2lkKGUscyk7YyYmdGhpcy5raWRzLnB1c2goYyl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX1lbHNle3ZhciB1PXRoaXMucGFyc2VLaWQoZSxyKTt1JiZ0aGlzLmtpZHMucHVzaCh1KX19fSx7a2V5OiJwYXJzZUtpZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IG0oe3R5cGU6aCxtY2lkOnQscGFnZU9iaklkOmV9KTt2YXIgcj1udWxsO2lmKHQgaW5zdGFuY2VvZiBuLlJlZj9yPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiBuLkRpY3QmJihyPXQpLCFyKXJldHVybiBudWxsO3ZhciBhPXIuZ2V0UmF3KCJQZyIpO2EgaW5zdGFuY2VvZiBuLlJlZiYmKGU9YS50b1N0cmluZygpKTt2YXIgaT1yLmdldCgiVHlwZSIpaW5zdGFuY2VvZiBuLk5hbWU/ci5nZXQoIlR5cGUiKS5uYW1lOm51bGw7cmV0dXJuIk1DUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpkLHJlZk9iaklkOnIuZ2V0UmF3KCJTdG0iKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIlN0bSIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZSxtY2lkOnIuZ2V0KCJNQ0lEIil9KToiT0JKUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpwLHJlZk9iaklkOnIuZ2V0UmF3KCJPYmoiKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIk9iaiIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pOm5ldyBtKHt0eXBlOmcsZGljdDpyfSl9fV0pLGV9KCksbT1mKChmdW5jdGlvbiBlKHQpe3ZhciByPXQudHlwZSxuPXQuZGljdCxhPXZvaWQgMD09PW4/bnVsbDpuLGk9dC5tY2lkLG89dm9pZCAwPT09aT9udWxsOmkscz10LnBhZ2VPYmpJZCxjPXZvaWQgMD09PXM/bnVsbDpzLGw9dC5yZWZPYmpJZCxmPXZvaWQgMD09PWw/bnVsbDpsO3UodGhpcyxlKSx0aGlzLnR5cGU9cix0aGlzLmRpY3Q9YSx0aGlzLm1jaWQ9byx0aGlzLnBhZ2VPYmpJZD1jLHRoaXMucmVmT2JqSWQ9Zix0aGlzLnBhcmVudE5vZGU9bnVsbH0pKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnJvb3Q9dCx0aGlzLnJvb3REaWN0PXQ/dC5kaWN0Om51bGwsdGhpcy5wYWdlRGljdD1yLHRoaXMubm9kZXM9W119cmV0dXJuIGYoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5yb290JiZ0aGlzLnJvb3REaWN0KXt2YXIgZT10aGlzLnJvb3REaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKGUpe3ZhciB0PXRoaXMucGFnZURpY3QuZ2V0KCJTdHJ1Y3RQYXJlbnRzIik7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7dmFyIHI9bmV3IGkuTnVtYmVyVHJlZShlLHRoaXMucm9vdERpY3QueHJlZikuZ2V0KHQpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLHM9bmV3IE1hcCxjPW8ocik7dHJ5e2ZvcihjLnMoKTshKGE9Yy5uKCkpLmRvbmU7KXt2YXIgdT1hLnZhbHVlO3UgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaCh1KSxzKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19fX19LHtrZXk6ImFkZE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYocj40MClyZXR1cm4oMCxhLndhcm4pKCJTdHJ1Y3RUcmVlIE1BWF9ERVBUSCByZWFjaGVkLiIpLG51bGw7aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO3ZhciBpPW5ldyB5KHRoaXMsZSk7dC5zZXQoZSxpKTt2YXIgcz1lLmdldCgiUCIpO2lmKCFzfHwoMCxuLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiU3RydWN0VHJlZVJvb3QiKSlyZXR1cm4gdGhpcy5hZGRUb3BMZXZlbE5vZGUoZSxpKXx8dC5kZWxldGUoZSksaTt2YXIgYz10aGlzLmFkZE5vZGUocyx0LHIrMSk7aWYoIWMpcmV0dXJuIGk7dmFyIHUsbD0hMSxmPW8oYy5raWRzKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aC50eXBlPT09ZyYmaC5kaWN0PT09ZSYmKGgucGFyZW50Tm9kZT1pLGw9ITApfX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX1yZXR1cm4gbHx8dC5kZWxldGUoZSksaX19LHtrZXk6ImFkZFRvcExldmVsTm9kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnJvb3REaWN0LmdldCgiSyIpO2lmKCFyKXJldHVybiExO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3QpcmV0dXJuIHIub2JqSWQ9PT1lLm9iaklkJiYodGhpcy5ub2Rlc1swXT10LCEwKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4hMDtmb3IodmFyIGE9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO28mJm8udG9TdHJpbmcoKT09PWUub2JqSWQmJih0aGlzLm5vZGVzW2ldPXQsYT0hMCl9cmV0dXJuIGF9fSx7a2V5OiJzZXJpYWxpemFibGUiLGdldDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtpZihuPjQwKSgwLGEud2FybikoIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtlbHNle3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7aS5yb2xlPXQucm9sZSxpLmNoaWxkcmVuPVtdLHIuY2hpbGRyZW4ucHVzaChpKTt2YXIgcz10LmRpY3QuZ2V0KCJBbHQiKTsic3RyaW5nIj09dHlwZW9mIHMmJihpLmFsdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShzKSk7dmFyIGM9dC5kaWN0LmdldCgiTGFuZyIpOyJzdHJpbmciPT10eXBlb2YgYyYmKGkubGFuZz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKSk7dmFyIHUsbD1vKHQua2lkcyk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlLHY9Zi50eXBlPT09Zz9mLnBhcmVudE5vZGU6bnVsbDt2P2UodixpLG4rMSk6Zi50eXBlPT09aHx8Zi50eXBlPT09ZD9pLmNoaWxkcmVuLnB1c2goe3R5cGU6ImNvbnRlbnQiLGlkOiJwYWdlIi5jb25jYXQoZi5wYWdlT2JqSWQsIl9tY2lkIikuY29uY2F0KGYubWNpZCl9KTpmLnR5cGU9PT1wJiZpLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6Zi5yZWZPYmpJZH0pfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX19fXZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7dC5jaGlsZHJlbj1bXSx0LnJvbGU9IlJvb3QiO3ZhciByLG49byh0aGlzLm5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aSYmZShpLHQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19XSksZX0oKTt0LlN0cnVjdFRyZWVQYWdlPWJ9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk9iamVjdExvYWRlcj12b2lkIDA7dmFyIGE9cigxMzQpLGk9cigxMzYpLG89cigxMzUpLHM9cigyKTtmdW5jdGlvbiBjKCl7Yz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LGE9T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LG89aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2woe30sIiIpfWNhdGNoKGUpe2w9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGYoZSx0LHIsbil7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYobnx8W10pO3JldHVybiBhKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gaChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1mO3ZhciBkPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2woeSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixvKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bChlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gaShhLG8scyxjKXt2YXIgdT1oKGVbYV0sZSxvKTtpZigidGhyb3ciIT09dS50eXBlKXt2YXIgbD11LmFyZyxmPWwudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1uKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2koIm5leHQiLGUscyxjKX0pLChmdW5jdGlvbihlKXtpKCJ0aHJvdyIsZSxzLGMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXtsLnZhbHVlPWUscyhsKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gaSgidGhyb3ciLGUscyxjKX0pKX1jKHUuYXJnKX12YXIgbzthKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7aShlLHIsdCxuKX0pKX1yZXR1cm4gbz1vP28udGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1kKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9aChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1kKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxkO3ZhciBhPWgobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxkO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGQpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbb107aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LGEodywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLGEodiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9bCh2LHUsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixsKGUsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxsKFMucHJvdG90eXBlLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGYodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxsKHcsdSwiR2VuZXJhdG9yIiksbCh3LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbCh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxkKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGR9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxkfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxkfX0sZX1mdW5jdGlvbiB1KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXt1KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt1KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBkKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe2lmKGUgaW5zdGFuY2VvZiBhLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjt2YXIgcixuLG89aChlKTt0cnl7Zm9yKG8ucygpOyEocj1vLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7KChuPXMpaW5zdGFuY2VvZiBhLlJlZnx8biBpbnN0YW5jZW9mIGEuRGljdHx8biBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShuKSkmJnQucHVzaChzKX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fXZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5kaWN0PXQsdGhpcy5rZXlzPXIsdGhpcy54cmVmPW4sdGhpcy5yZWZTZXQ9bnVsbH12YXIgdCxyLG4sdTtyZXR1cm4gdD1lLHI9W3trZXk6ImxvYWQiLHZhbHVlOih1PWwoYygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4saSxvLHMsdTtyZXR1cm4gYygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHZvaWQgMCk7Y2FzZSAyOnQ9dGhpcy5rZXlzLHI9dGhpcy5kaWN0LHRoaXMucmVmU2V0PW5ldyBhLlJlZlNldCxuPVtdLGk9aCh0KTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspcz1vLnZhbHVlLHZvaWQgMCE9PSh1PXIuZ2V0UmF3KHMpKSYmbi5wdXNoKHUpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl93YWxrKG4pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfd2FsayIsdmFsdWU6KG49bChjKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLHUsbCxmLGQsZyx2LHksbSxiLHc7cmV0dXJuIGMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPVtdLG49W107Y2FzZSAyOmlmKCF0Lmxlbmd0aCl7ZS5uZXh0PTQ4O2JyZWFrfWlmKCEoKHU9dC5wb3AoKSlpbnN0YW5jZW9mIGEuUmVmKSl7ZS5uZXh0PTIxO2JyZWFrfWlmKCF0aGlzLnJlZlNldC5oYXModSkpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDIpO2Nhc2UgNzplLnByZXY9Nyx0aGlzLnJlZlNldC5wdXQodSksdT10aGlzLnhyZWYuZmV0Y2godSksZS5uZXh0PTIxO2JyZWFrO2Nhc2UgMTI6aWYoZS5wcmV2PTEyLGUudDA9ZS5jYXRjaCg3KSxlLnQwIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTE5O2JyZWFrfXJldHVybigwLHMud2FybikoJ09iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICInLmNvbmNhdChlLnQwLCciLicpKSx0aGlzLnJlZlNldD1udWxsLGw9dGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLGUuYWJydXB0KCJyZXR1cm4iLGwucmVxdWVzdEFsbENodW5rcygpKTtjYXNlIDE5OnIucHVzaCh1KSxuLnB1c2goe2JlZ2luOmUudDAuYmVnaW4sZW5kOmUudDAuZW5kfSk7Y2FzZSAyMTppZighKHUgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pKXtlLm5leHQ9NDU7YnJlYWt9aWYoIShmPXUuZ2V0QmFzZVN0cmVhbXMoKSkpe2UubmV4dD00NTticmVha31kPSExLGc9aChmKSxlLnByZXY9MjYsZy5zKCk7Y2FzZSAyODppZigodj1nLm4oKSkuZG9uZSl7ZS5uZXh0PTM2O2JyZWFrfWlmKCEoeT12LnZhbHVlKS5pc0RhdGFMb2FkZWQpe2UubmV4dD0zMjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiwzNCk7Y2FzZSAzMjpkPSEwLG4ucHVzaCh7YmVnaW46eS5zdGFydCxlbmQ6eS5lbmR9KTtjYXNlIDM0OmUubmV4dD0yODticmVhaztjYXNlIDM2OmUubmV4dD00MTticmVhaztjYXNlIDM4OmUucHJldj0zOCxlLnQxPWUuY2F0Y2goMjYpLGcuZShlLnQxKTtjYXNlIDQxOnJldHVybiBlLnByZXY9NDEsZy5mKCksZS5maW5pc2goNDEpO2Nhc2UgNDQ6ZCYmci5wdXNoKHUpO2Nhc2UgNDU6cCh1LHQpLGUubmV4dD0yO2JyZWFrO2Nhc2UgNDg6aWYoIW4ubGVuZ3RoKXtlLm5leHQ9NTQ7YnJlYWt9cmV0dXJuIGUubmV4dD01MSx0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhuKTtjYXNlIDUxOm09aChyKTt0cnl7Zm9yKG0ucygpOyEoYj1tLm4oKSkuZG9uZTspKHc9Yi52YWx1ZSlpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnJlZlNldC5yZW1vdmUodyl9Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3dhbGsocikpO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucmVmU2V0PW51bGwsZS5hYnJ1cHQoInJldHVybiIsdm9pZCAwKTtjYXNlIDU2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbNywxMl0sWzI2LDM4LDQxLDQ0XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dLHImJmYodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9iamVjdExvYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWEZBRmFjdG9yeT12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTApLGk9cigyMTYpLG89cigyMTQpLHM9cigyMDcpLGM9cigyKSx1PXIoMjE3KSxsPXIoMjI3KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7ZD1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP3QucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBwKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtwKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtwKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKTt0cnl7dGhpcy5yb290PShuZXcgdS5YRkFQYXJzZXIpLnBhcnNlKGUuX2NyZWF0ZURvY3VtZW50KHQpKTt2YXIgcj1uZXcgYS5CaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09ci5iaW5kKCksdGhpcy5kYXRhSGFuZGxlcj1uZXcgaS5EYXRhSGFuZGxlcih0aGlzLnJvb3Qsci5nZXREYXRhKCkpLHRoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZT10aGlzLmZvcm19Y2F0Y2goZSl7KDAsYy53YXJuKSgiWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgYW5kIGJpbmRpbmc6ICIuY29uY2F0KGUpKX19dmFyIHQscixmLHAseSxtO3JldHVybiB0PWUscj1be2tleToiaXNWYWxpZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290JiZ0aGlzLmZvcm19fSx7a2V5OiJfY3JlYXRlUGFnZXNIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mb3JtW24uJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3NldFRpbWVvdXQoKGZ1bmN0aW9uIG4oKXt0cnl7dmFyIGE9ZS5uZXh0KCk7YS5kb25lP3QoYS52YWx1ZSk6c2V0VGltZW91dChuLDApfWNhdGNoKGUpe3IoZSl9fSksMCl9KSl9fSx7a2V5OiJfY3JlYXRlUGFnZXMiLHZhbHVlOihtPWcoZCgpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gZCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnByZXY9MCxlLm5leHQ9Myx0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO2Nhc2UgMzp0aGlzLnBhZ2VzPWUuc2VudCx0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy5zdHlsZSxyPXQud2lkdGgsbj10LmhlaWdodDtyZXR1cm5bMCwwLHBhcnNlSW50KHIpLHBhcnNlSW50KG4pXX0pKSxlLm5leHQ9MTA7YnJlYWs7Y2FzZSA3OmUucHJldj03LGUudDA9ZS5jYXRjaCgwKSwoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAiLmNvbmNhdChlLnQwKSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzAsN11dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZ2V0Qm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpbXNbZV19fSx7a2V5OiJnZXROdW1QYWdlcyIsdmFsdWU6KHk9ZyhkKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBkKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5wYWdlcyl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUubmV4dD0zLHRoaXMuX2NyZWF0ZVBhZ2VzKCk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLmRpbXMubGVuZ3RoKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJzZXRJbWFnZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS5pbWFnZXM9ZX19LHtrZXk6InNldEZvbnRzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcj1uZXcgby5Gb250RmluZGVyKGUpO3ZhciB0LHI9W10sYT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fSh0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2k9KDAscy5zdHJpcFF1b3RlcykoaSksdGhpcy5mb3JtW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZChpKXx8ci5wdXNoKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm4gci5sZW5ndGg+MD9yOm51bGx9fSx7a2V5OiJhcHBlbmRGb250cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5hZGQoZSx0KX19LHtrZXk6ImdldFBhZ2VzIix2YWx1ZToocD1nKGQoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGQoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZih0aGlzLnBhZ2VzKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5uZXh0PTMsdGhpcy5fY3JlYXRlUGFnZXMoKTtjYXNlIDM6cmV0dXJuIHQ9dGhpcy5wYWdlcyx0aGlzLnBhZ2VzPW51bGwsZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfX1dLGY9W3trZXk6Il9jcmVhdGVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19fSx7a2V5OiJnZXRSaWNoVGV4dEFzSHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHQ9bmV3IHUuWEZBUGFyc2VyKGwuWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbbi4kbm9kZU5hbWVdKSl7dmFyIHI9bC5YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtyW24uJGFwcGVuZENoaWxkXSh0KSx0PXJ9dmFyIGE9dFtuLiR0b0hUTUxdKCk7aWYoIWEuc3VjY2VzcylyZXR1cm4gbnVsbDt2YXIgaT1hLmh0bWwsbz1pLmF0dHJpYnV0ZXM7cmV0dXJuIG8mJihvLmNsYXNzJiYoby5jbGFzcz1vLmNsYXNzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuc3RhcnRzV2l0aCgieGZhIil9KSkpLG8uZGlyPSJhdXRvIikse2h0bWw6aSxzdHI6dFtuLiR0ZXh0XSgpfX1jYXRjaChlKXsoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICIuY29uY2F0KGUpKX1yZXR1cm4gbnVsbH19XSxyJiZ2KHQucHJvdG90eXBlLHIpLGYmJnYodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWEZBRmFjdG9yeT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWG1sT2JqZWN0PXQuWEZBT2JqZWN0QXJyYXk9dC5YRkFPYmplY3Q9dC5YRkFBdHRyaWJ1dGU9dC5TdHJpbmdPYmplY3Q9dC5PcHRpb25PYmplY3Q9dC5PcHRpb24xMD10Lk9wdGlvbjAxPXQuSW50ZWdlck9iamVjdD10LkNvbnRlbnRPYmplY3Q9dC4kdWlkPXQuJHRvU3R5bGU9dC4kdG9TdHJpbmc9dC4kdG9QYWdlcz10LiR0b0hUTUw9dC4kdGV4dD10LiR0YWJJbmRleD10LiRzZXRWYWx1ZT10LiRzZXRTZXRBdHRyaWJ1dGVzPXQuJHNldElkPXQuJHNlYXJjaE5vZGU9dC4kcm9vdD10LiRyZXNvbHZlUHJvdG90eXBlcz10LiRyZW1vdmVDaGlsZD10LiRwdXNoUGFyYT10LiRwdXNoR2x5cGhzPXQuJHBvcFBhcmE9dC4kb25UZXh0PXQuJG9uQ2hpbGRDaGVjaz10LiRvbkNoaWxkPXQuJG5zQXR0cmlidXRlcz10LiRub2RlTmFtZT10LiRuYW1lc3BhY2VJZD10LiRpc1VzYWJsZT10LiRpc1RyYW5zcGFyZW50PXQuJGlzVGhlcmVNb3JlV2lkdGg9dC4kaXNTcGxpdHRhYmxlPXQuJGlzTnNBZ25vc3RpYz10LiRpc0Rlc2NlbmRlbnQ9dC4kaXNEYXRhVmFsdWU9dC4kaXNDREFUQVhtbD10LiRpc0JpbmRhYmxlPXQuJGluc2VydEF0PXQuJGluZGV4T2Y9dC4kaWRzPXQuJGhhc1NldHRhYmxlVmFsdWU9dC4kZ2xvYmFsRGF0YT10LiRnZXRUZW1wbGF0ZVJvb3Q9dC4kZ2V0U3ViZm9ybVBhcmVudD10LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD10LiRnZXRQYXJlbnQ9dC4kZ2V0TmV4dFBhZ2U9dC4kZ2V0RXh0cmE9dC4kZ2V0RGF0YVZhbHVlPXQuJGdldENvbnRhaW5lZENoaWxkcmVuPXQuJGdldENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0Q2hpbGRyZW5CeU5hbWU9dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPXQuJGdldENoaWxkcmVuPXQuJGdldEF2YWlsYWJsZVNwYWNlPXQuJGdldEF0dHJpYnV0ZXM9dC4kZ2V0QXR0cmlidXRlSXQ9dC4kZmx1c2hIVE1MPXQuJGZpbmFsaXplPXQuJGV4dHJhPXQuJGR1bXA9dC4kZGF0YT10LiRjb250ZW50PXQuJGNvbnN1bWVkPXQuJGNsb25lPXQuJGNsZWFudXA9dC4kY2xlYW5QYWdlPXQuJGNsZWFuPXQuJGNoaWxkcmVuVG9IVE1MPXQuJGFwcGVuZENoaWxkPXQuJGFkZEhUTUw9dC4kYWNjZXB0V2hpdGVzcGFjZT12b2lkIDA7dmFyIG49cigyMDcpLGE9cigyKSxpPXIoMTM1KSxvPXIoMjA4KSxzPXIoMjA5KTtmdW5jdGlvbiBjKCl7cmV0dXJuIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1wKGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZChlKX0odGhpcyxyKX19ZnVuY3Rpb24gZChlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoKXt2PWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIGg/dDpoLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGY9e307ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz1wLnByb3RvdHlwZT1oLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PWcoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWYpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWYpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGY7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGY7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZik6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxmKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGQucHJvdG90eXBlPXAsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnAsY29uZmlndXJhYmxlOiEwfSksbihwLCJjb25zdHJ1Y3RvciIse3ZhbHVlOmQsY29uZmlndXJhYmxlOiEwfSksZC5kaXNwbGF5TmFtZT1jKHAscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWR8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHApOihlLl9fcHJvdG9fXz1wLGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGYpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZn0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGZ9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGZ9fSxlfWZ1bmN0aW9uIHkoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPW0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIG0oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGIoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9iKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBiKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGsoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWcobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1nKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBTKGUsdCxyKXtyZXR1cm4gdCYmayhlLnByb3RvdHlwZSx0KSxyJiZrKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgeD1TeW1ib2woKTt0LiRhY2NlcHRXaGl0ZXNwYWNlPXg7dmFyIE89U3ltYm9sKCk7dC4kYWRkSFRNTD1PO3ZhciBBPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPUE7dmFyIEM9U3ltYm9sKCk7dC4kY2hpbGRyZW5Ub0hUTUw9Qzt2YXIgRj1TeW1ib2woKTt0LiRjbGVhbj1GO3ZhciBQPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1QO3ZhciBUPVN5bWJvbCgpO3QuJGNsZWFudXA9VDt2YXIgST1TeW1ib2woKTt0LiRjbG9uZT1JO3ZhciBFPVN5bWJvbCgpO3QuJGNvbnN1bWVkPUU7dmFyIGo9U3ltYm9sKCJjb250ZW50Iik7dC4kY29udGVudD1qO3ZhciBNPVN5bWJvbCgiZGF0YSIpO3QuJGRhdGE9TTt2YXIgXz1TeW1ib2woKTt0LiRkdW1wPV87dmFyIEw9U3ltYm9sKCJleHRyYSIpO3QuJGV4dHJhPUw7dmFyIFI9U3ltYm9sKCk7dC4kZmluYWxpemU9Ujt2YXIgTj1TeW1ib2woKTt0LiRmbHVzaEhUTUw9Tjt2YXIgRD1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVJdD1EO3ZhciBCPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZXM9Qjt2YXIgVT1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT1VO3ZhciAkPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlDbGFzcz0kO3ZhciBYPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lPVg7dmFyIEg9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1IO3ZhciBxPVN5bWJvbCgpO3QuJGdldERhdGFWYWx1ZT1xO3ZhciBHPVN5bWJvbCgpO3QuJGdldEV4dHJhPUc7dmFyIHo9U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9ejt2YXIgVz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbj1XO3ZhciBWPVN5bWJvbCgpO3QuJGdldENvbnRhaW5lZENoaWxkcmVuPVY7dmFyIFk9U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9WTt2YXIgSz1TeW1ib2woKTt0LiRnZXRTdWJmb3JtUGFyZW50PUs7dmFyIEo9U3ltYm9sKCk7dC4kZ2V0UGFyZW50PUo7dmFyIFo9U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PVo7dmFyIFE9U3ltYm9sKCk7dC4kZ2xvYmFsRGF0YT1RO3ZhciBlZT1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPWVlO3ZhciB0ZT1TeW1ib2woKTt0LiRpZHM9dGU7dmFyIHJlPVN5bWJvbCgpO3QuJGluZGV4T2Y9cmU7dmFyIG5lPVN5bWJvbCgpO3QuJGluc2VydEF0PW5lO3ZhciBhZT1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPWFlO3ZhciBpZT1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPWllO3ZhciBvZT1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1vZTt2YXIgc2U9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PXNlO3ZhciBjZT1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9Y2U7dmFyIHVlPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT11ZTt2YXIgbGU9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1sZTt2YXIgZmU9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1mZTt2YXIgaGU9U3ltYm9sKCk7dC4kaXNVc2FibGU9aGU7dmFyIGRlPVN5bWJvbCgpLHBlPVN5bWJvbCgibmFtZXNwYWNlSWQiKTt0LiRuYW1lc3BhY2VJZD1wZTt2YXIgZ2U9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPWdlO3ZhciB2ZT1TeW1ib2woKTt0LiRuc0F0dHJpYnV0ZXM9dmU7dmFyIHllPVN5bWJvbCgpO3QuJG9uQ2hpbGQ9eWU7dmFyIG1lPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz1tZTt2YXIgYmU9U3ltYm9sKCk7dC4kb25UZXh0PWJlO3ZhciB3ZT1TeW1ib2woKTt0LiRwdXNoR2x5cGhzPXdlO3ZhciBrZT1TeW1ib2woKTt0LiRwb3BQYXJhPWtlO3ZhciBTZT1TeW1ib2woKTt0LiRwdXNoUGFyYT1TZTt2YXIgeGU9U3ltYm9sKCk7dC4kcmVtb3ZlQ2hpbGQ9eGU7dmFyIE9lPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9T2U7dmFyIEFlPVN5bWJvbCgpO3QuJHJlc29sdmVQcm90b3R5cGVzPUFlO3ZhciBDZT1TeW1ib2woKTt0LiRzZWFyY2hOb2RlPUNlO3ZhciBGZT1TeW1ib2woKTt0LiRzZXRJZD1GZTt2YXIgUGU9U3ltYm9sKCk7dC4kc2V0U2V0QXR0cmlidXRlcz1QZTt2YXIgVGU9U3ltYm9sKCk7dC4kc2V0VmFsdWU9VGU7dmFyIEllPVN5bWJvbCgpO3QuJHRhYkluZGV4PUllO3ZhciBFZT1TeW1ib2woKTt0LiR0ZXh0PUVlO3ZhciBqZT1TeW1ib2woKTt0LiR0b1BhZ2VzPWplO3ZhciBNZT1TeW1ib2woKTt0LiR0b0hUTUw9TWU7dmFyIF9lPVN5bWJvbCgpO3QuJHRvU3RyaW5nPV9lO3ZhciBMZT1TeW1ib2woKTt0LiR0b1N0eWxlPUxlO3ZhciBSZT1TeW1ib2woInVpZCIpO3QuJHVpZD1SZTt2YXIgTmU9U3ltYm9sKCksRGU9U3ltYm9sKCksQmU9U3ltYm9sKCksVWU9U3ltYm9sKCJfY2hpbGRyZW4iKSwkZT1TeW1ib2woKSxYZT1TeW1ib2woKSxIZT1TeW1ib2woKSxxZT1TeW1ib2woKSxHZT1TeW1ib2woKSx6ZT1TeW1ib2woKSxXZT1TeW1ib2woKSxWZT1TeW1ib2woKSxZZT1TeW1ib2woKSxLZT1TeW1ib2woInBhcmVudCIpLEplPVN5bWJvbCgpLFplPVN5bWJvbCgpLFFlPVN5bWJvbCgpLGV0PTAsdHQ9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt3KHRoaXMsZSksdGhpc1twZV09dCx0aGlzW2dlXT1yLHRoaXNbV2VdPW4sdGhpc1tLZV09bnVsbCx0aGlzW1VlXT1bXSx0aGlzW1JlXT0iIi5jb25jYXQocikuY29uY2F0KGV0KyspLHRoaXNbUV09bnVsbH1yZXR1cm4gUyhlLFt7a2V5OnllLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzW1dlXXx8IXRoaXNbbWVdKGUpKXJldHVybiExO3ZhciB0PWVbZ2VdLHI9dGhpc1t0XTtpZighKHIgaW5zdGFuY2VvZiBudCkpcmV0dXJuIG51bGwhPT1yJiZ0aGlzW3hlXShyKSx0aGlzW3RdPWUsdGhpc1tBXShlKSwhMDtpZihyLnB1c2goZSkpcmV0dXJuIHRoaXNbQV0oZSksITA7dmFyIG49IiI7cmV0dXJuIHRoaXMuaWQ/bj0iIChpZDogIi5jb25jYXQodGhpcy5pZCwiKSIpOnRoaXMubmFtZSYmKG49IiAobmFtZTogIi5jb25jYXQodGhpcy5uYW1lLCIgIikuY29uY2F0KHRoaXMuaC52YWx1ZSwiKSIpKSwoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdCh0aGlzW2dlXSwnIicpLmNvbmNhdChuLCcgaGFzIGFscmVhZHkgZW5vdWdoICInKS5jb25jYXQodCwnIiEnKSksITF9fSx7a2V5Om1lLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KGVbZ2VdKSYmZVtwZV09PT10aGlzW3BlXX19LHtrZXk6Y2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6eCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTppZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTprZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGFyYSYmdGhpc1taXSgpW0xdLnBhcmFTdGFjay5wb3AoKX19LHtrZXk6U2UsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW1pdKClbTF0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKX19LHtrZXk6RmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pZCYmdGhpc1twZV09PT1vLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCYmZS5zZXQodGhpcy5pZCx0aGlzKX19LHtrZXk6Wix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW1FdLnRlbXBsYXRlfX0se2tleTp1ZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpBLHZhbHVlOmZ1bmN0aW9uKGUpe2VbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaChlKSwhZVtRXSYmdGhpc1tRXSYmKGVbUV09dGhpc1tRXSl9fSx7a2V5OnhlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbVWVdLmluZGV4T2YoZSk7dGhpc1tVZV0uc3BsaWNlKHQsMSl9fSx7a2V5OmVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInZhbHVlIil9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleTpGLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzW1dlXSx0aGlzW1RdJiYoZS5jbGVhbih0aGlzW1RdKSxkZWxldGUgdGhpc1tUXSl9fSx7a2V5OnJlLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW1VlXS5pbmRleE9mKGUpfX0se2tleTpuZSx2YWx1ZTpmdW5jdGlvbihlLHQpe3RbS2VdPXRoaXMsdGhpc1tVZV0uc3BsaWNlKGUsMCx0KSwhdFtRXSYmdGhpc1tRXSYmKHRbUV09dGhpc1tRXSl9fSx7a2V5OmZlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubmFtZX19LHtrZXk6ZGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXNbVWVdLmxlbmd0aD90aGlzW2pdOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbRWVdKCl9KSkuam9pbigiIil9fSx7a2V5OkJlLGdldDpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZighdC5fYXR0cmlidXRlcyl7dmFyIHIsbj10Ll9hdHRyaWJ1dGVzPW5ldyBTZXQsaT15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7aWYobnVsbD09PXRoaXNbb118fHRoaXNbb11pbnN0YW5jZW9mIGV8fHRoaXNbb11pbnN0YW5jZW9mIG50KWJyZWFrO24uYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsQmUsdC5fYXR0cmlidXRlcyl9fSx7a2V5OnNlLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXRbSl0oKX1yZXR1cm4hMX19LHtrZXk6Six2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0tlXX19LHtrZXk6Syx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0pdKCl9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2VdOnRoaXNbVWVdfX0se2tleTpfLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW2pdJiYodC4kY29udGVudD10aGlzW2pdKTt2YXIgcixuPXkoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZSxpPXRoaXNbYV07bnVsbCE9PWkmJihpIGluc3RhbmNlb2YgZT90W2FdPWlbX10oKTppIGluc3RhbmNlb2YgbnQ/aS5pc0VtcHR5KCl8fCh0W2FdPWkuZHVtcCgpKTp0W2FdPWkpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19LHtrZXk6TGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LHtrZXk6TWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfX0se2tleTpWLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6dD15KHRoaXNbV10oKSksZS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtlLm5leHQ9OTticmVha31yZXR1cm4gbj1yLnZhbHVlLGUubmV4dD03LG47Y2FzZSA3OmUubmV4dD0zO2JyZWFrO2Nhc2UgOTplLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDEpLHQuZShlLnQwKTtjYXNlIDE0OnJldHVybiBlLnByZXY9MTQsdC5mKCksZS5maW5pc2goMTQpO2Nhc2UgMTc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxLDExLDE0LDE3XV0pfSkpfSx7a2V5OnFlLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOm49eSh0aGlzW1ZdKCkpLGUucHJldj0xLG4ucygpO2Nhc2UgMzppZigoYT1uLm4oKSkuZG9uZSl7ZS5uZXh0PTEzO2JyZWFrfWlmKGk9YS52YWx1ZSx0JiZyIT09dC5oYXMoaVtnZV0pKXtlLm5leHQ9MTE7YnJlYWt9cmV0dXJuIG89dGhpc1tVXSgpLChzPWlbTWVdKG8pKS5zdWNjZXNzfHwodGhpc1tMXS5mYWlsaW5nTm9kZT1pKSxlLm5leHQ9MTEscztjYXNlIDExOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTM6ZS5uZXh0PTE4O2JyZWFrO2Nhc2UgMTU6ZS5wcmV2PTE1LGUudDA9ZS5jYXRjaCgxKSxuLmUoZS50MCk7Y2FzZSAxODpyZXR1cm4gZS5wcmV2PTE4LG4uZigpLGUuZmluaXNoKDE4KTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNSwxOCwyMV1dKX0pKX0se2tleTpOLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSx7a2V5Ok8sdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzW0xdLmNoaWxkcmVuLnB1c2goZSl9fSx7a2V5OlUsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OkMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXIscj12b2lkIDA9PT10P251bGw6dCxhPWUuaW5jbHVkZSxpPXZvaWQgMD09PWF8fGE7aWYodGhpc1tMXS5nZW5lcmF0b3Ipe3ZhciBvPXRoaXNbVV0oKSxzPXRoaXNbTF0uZmFpbGluZ05vZGVbTWVdKG8pO2lmKCFzLnN1Y2Nlc3MpcmV0dXJuIHM7cy5odG1sJiZ0aGlzW09dKHMuaHRtbCxzLmJib3gpLGRlbGV0ZSB0aGlzW0xdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tMXS5nZW5lcmF0b3I9dGhpc1txZV0ocixpKTtmb3IoOzspe3ZhciBjPXRoaXNbTF0uZ2VuZXJhdG9yLm5leHQoKTtpZihjLmRvbmUpYnJlYWs7dmFyIHU9Yy52YWx1ZTtpZighdS5zdWNjZXNzKXJldHVybiB1O3UuaHRtbCYmdGhpc1tPXSh1Lmh0bWwsdS5iYm94KX1yZXR1cm4gdGhpc1tMXS5nZW5lcmF0b3I9bnVsbCxuLkhUTUxSZXN1bHQuRU1QVFl9fSx7a2V5OlBlLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXNbWmVdPW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpfX0se2tleTp6ZSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbQmVdLG49dGhpc1taZV07cmV0dXJuKHQ9ZSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBiKGUpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8bSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gci5oYXMoZSkmJiFuLmhhcyhlKX0pKX19LHtrZXk6QWUsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFNldCxuPXkodGhpc1tVZV0pO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl0LnZhbHVlW0plXShlLHIpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19LHtrZXk6SmUsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzW0dlXShlLHQpO3I/dGhpc1tOZV0ocixlLHQpOnRoaXNbQWVdKGUsdCl9fSx7a2V5OkdlLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy51c2Usbj10aGlzLnVzZWhyZWY7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPW51bGwsbz1udWxsLGM9bnVsbCx1PXI7aWYobj8odT1uLG4uc3RhcnRzV2l0aCgiI3NvbSgiKSYmbi5lbmRzV2l0aCgiKSIpP289bi5zbGljZSg1LG4ubGVuZ3RoLTEpOm4uc3RhcnRzV2l0aCgiLiNzb20oIikmJm4uZW5kc1dpdGgoIikiKT9vPW4uc2xpY2UoNixuLmxlbmd0aC0xKTpuLnN0YXJ0c1dpdGgoIiMiKT9jPW4uc2xpY2UoMSk6bi5zdGFydHNXaXRoKCIuIyIpJiYoYz1uLnNsaWNlKDIpKSk6ci5zdGFydHNXaXRoKCIjIik/Yz1yLnNsaWNlKDEpOm89cix0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiIsYz9pPWUuZ2V0KGMpOihpPSgwLHMuc2VhcmNoTm9kZSkoZS5nZXQoT2UpLHRoaXMsbywhMCwhMSkpJiYoaT1pWzBdKSwhaSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICIuY29uY2F0KHUsIi4iKSksbnVsbDtpZihpW2dlXSE9PXRoaXNbZ2VdKXJldHVybigwLGEud2FybikoIlhGQSAtIEluY29tcGF0aWJsZSBwcm90b3R5cGU6ICIuY29uY2F0KGlbZ2VdLCIgIT09ICIpLmNvbmNhdCh0aGlzW2dlXSwiLiIpKSxudWxsO2lmKHQuaGFzKGkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpLG51bGw7dC5hZGQoaSk7dmFyIGw9aVtHZV0oZSx0KTtyZXR1cm4gbCYmaVtOZV0obCxlLHQpLGlbQWVdKGUsdCksdC5kZWxldGUoaSksaX19LHtrZXk6TmUsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHIuaGFzKGUpKSgwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO2Vsc2V7IXRoaXNbal0mJmVbal0mJih0aGlzW2pdPWVbal0pLG5ldyBTZXQocikuYWRkKGUpO3ZhciBuLGk9eSh0aGlzW3plXShlW1plXSkpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTt0aGlzW29dPWVbb10sdGhpc1taZV0mJnRoaXNbWmVdLmFkZChvKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9dmFyIHMsYz15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7aWYoIXRoaXNbQmVdLmhhcyh1KSl7dmFyIGw9dGhpc1t1XSxmPWVbdV07aWYobCBpbnN0YW5jZW9mIG50KXt2YXIgaCxkPXkobFtVZV0pO3RyeXtmb3IoZC5zKCk7IShoPWQubigpKS5kb25lOyloLnZhbHVlW0plXSh0LHIpfWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfWZvcih2YXIgcD1sW1VlXS5sZW5ndGgsZz1mW1VlXS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9ZVtVZV1bcF1bSV0oKTtpZighbC5wdXNoKHYpKWJyZWFrO3ZbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaCh2KSx2W0plXSh0LHIpfX1lbHNlIGlmKG51bGw9PT1sKXtpZihudWxsIT09Zil7dmFyIG09ZltJXSgpO21bS2VdPXRoaXMsdGhpc1t1XT1tLHRoaXNbVWVdLnB1c2gobSksbVtKZV0odCxyKX19ZWxzZSBsW0FlXSh0LHIpLGYmJmxbTmVdKGYsdCxyKX19fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfX19fSx7a2V5OkksdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSxuPXkoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO3RyeXtyW2ldPXRoaXNbaV19Y2F0Y2goZSl7KDAsYS5zaGFkb3cpKHIsaSx0aGlzW2ldKX19fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJbUmVdPSIiLmNvbmNhdChyW2dlXSkuY29uY2F0KGV0KyspLHJbVWVdPVtdO3ZhciBvLHM9eShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlO2lmKHRoaXNbQmVdLmhhcyhjKSlyW2NdPWVbJGVdKHRoaXNbY10pO2Vsc2V7dmFyIHU9dGhpc1tjXTtyW2NdPXUgaW5zdGFuY2VvZiBudD9uZXcgbnQodVtWZV0pOm51bGx9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgbCxmPXkodGhpc1tVZV0pO3RyeXtmb3IoZi5zKCk7IShsPWYubigpKS5kb25lOyl7dmFyIGg9bC52YWx1ZSxkPWhbZ2VdLHA9aFtJXSgpO3JbVWVdLnB1c2gocCkscFtLZV09cixudWxsPT09cltkXT9yW2RdPXA6cltkXVtVZV0ucHVzaChwKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9cmV0dXJuIHJ9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW1VlXS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2dlXT09PWV9KSk6dGhpc1tVZV19fSx7a2V5OiQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV19fSx7a2V5OlgsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiBBcnJheS5mcm9tKHRoaXNbSF0oZSx0LHIpKX19LHtrZXk6SCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiB2KCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGEpe2Zvcig7Oylzd2l0Y2goYS5wcmV2PWEubmV4dCl7Y2FzZSAwOmlmKCJwYXJlbnQiIT09ZSl7YS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGEubmV4dD0zLHJbS2VdO2Nhc2UgMzpyZXR1cm4gYS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDppPXkocltVZV0pLGEucHJldj01LGkucygpO2Nhc2UgNzppZigobz1pLm4oKSkuZG9uZSl7YS5uZXh0PTE5O2JyZWFrfWlmKChzPW8udmFsdWUpW2dlXSE9PWUpe2EubmV4dD0xMjticmVha31yZXR1cm4gYS5uZXh0PTEyLHM7Y2FzZSAxMjppZihzLm5hbWUhPT1lKXthLm5leHQ9MTU7YnJlYWt9cmV0dXJuIGEubmV4dD0xNSxzO2Nhc2UgMTU6aWYoIXQmJiFzW2ZlXSgpKXthLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGEuZGVsZWdhdGVZaWVsZChzW0hdKGUsdCwhMSksInQwIiwxNyk7Y2FzZSAxNzphLm5leHQ9NzticmVhaztjYXNlIDE5OmEubmV4dD0yNDticmVhaztjYXNlIDIxOmEucHJldj0yMSxhLnQxPWEuY2F0Y2goNSksaS5lKGEudDEpO2Nhc2UgMjQ6cmV0dXJuIGEucHJldj0yNCxpLmYoKSxhLmZpbmlzaCgyNCk7Y2FzZSAyNzppZighbnx8IXJbQmVdLmhhcyhlKSl7YS5uZXh0PTMwO2JyZWFrfXJldHVybiBhLm5leHQ9MzAsbmV3IGF0KHIsZSxyW2VdKTtjYXNlIDMwOmNhc2UiZW5kIjpyZXR1cm4gYS5zdG9wKCl9fSksYSxudWxsLFtbNSwyMSwyNCwyN11dKX0pKSgpfX1dLFt7a2V5OiRlLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVskZV0odCl9KSk6Im9iamVjdCI9PT1nKHQpJiZudWxsIT09dD9PYmplY3QuYXNzaWduKHt9LHQpOnR9fV0pLGV9KCk7dC5YRkFPYmplY3Q9cnQ7dmFyIG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLzA7dyh0aGlzLGUpLHRoaXNbVmVdPXQsdGhpc1tVZV09W119cmV0dXJuIFMoZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbVWVdLmxlbmd0aDw9dGhpc1tWZV0/KHRoaXNbVWVdLnB1c2goZSksITApOigoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdChlW2dlXSwnIiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAnKS5jb25jYXQodGhpc1tWZV0sIiBjaGlsZHJlbiIpKSwhMSl9fSx7a2V5OiJpc0VtcHR5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpc1tVZV0ubGVuZ3RofX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXNbVWVdLmxlbmd0aD90aGlzW1VlXVswXVtfXSgpOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbX10oKX0pKX19LHtrZXk6SSx2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXNbVmVdKTtyZXR1cm4gdFtVZV09dGhpc1tVZV0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtJXSgpfSkpLHR9fSx7a2V5OiJjaGlsZHJlbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVWVdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tVZV0ubGVuZ3RoPTB9fV0pLGV9KCk7dC5YRkFPYmplY3RBcnJheT1udDt2YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt3KHRoaXMsZSksdGhpc1tLZV09dCx0aGlzW2dlXT1yLHRoaXNbal09bix0aGlzW0VdPSExLHRoaXNbUmVdPSJhdHRyaWJ1dGUiLmNvbmNhdChldCsrKX1yZXR1cm4gUyhlLFt7a2V5OkosdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tLZV19fSx7a2V5Om9lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXX19LHtrZXk6c2UsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbS2VdPT09ZXx8dGhpc1tLZV1bc2VdKGUpfX1dKSxlfSgpO3QuWEZBQXR0cmlidXRlPWF0O3ZhciBpdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGEsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYodyh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsbikpW2pdPSIiLGFbWGVdPW51bGwsIiN0ZXh0IiE9PW4pe3ZhciBvPW5ldyBNYXA7YVtEZV09bztmb3IodmFyIHM9MCxjPU9iamVjdC5lbnRyaWVzKGkpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD11KGNbc10sMiksZj1sWzBdLGg9bFsxXTtvLnNldChmLG5ldyBhdChkKGEpLGYsaCkpfWlmKGkuaGFzT3duUHJvcGVydHkodmUpKXt2YXIgcD1pW3ZlXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09cCYmKCJkYXRhR3JvdXAiPT09cD9hW1hlXT0hMToiZGF0YVZhbHVlIj09PXAmJihhW1hlXT0hMCkpfX1yZXR1cm4gYVtFXT0hMSxhfXJldHVybiBTKHIsW3trZXk6X2UsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tnZV07aWYoIiN0ZXh0IiE9PXQpe3ZhciByPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKSh0KSxuPXRoaXNbcGVdPT09dHQ/InhmYToiOiIiO2UucHVzaCgiPCIuY29uY2F0KG4pLmNvbmNhdChyKSk7dmFyIG8scz15KHRoaXNbRGVdLmVudHJpZXMoKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz11KG8udmFsdWUsMiksbD1jWzBdLGY9Y1sxXSxoPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKShsKTtlLnB1c2goIiAiLmNvbmNhdChoLCc9IicpLmNvbmNhdCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKShmW2pdKSwnIicpKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYobnVsbCE9PXRoaXNbWGVdJiYodGhpc1tYZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpLHRoaXNbal18fDAhPT10aGlzW1VlXS5sZW5ndGgpe2lmKGUucHVzaCgiPiIpLHRoaXNbal0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2pdP2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2pdKSk6dGhpc1tqXVtfZV0oZSk7ZWxzZXt2YXIgZCxwPXkodGhpc1tVZV0pO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOylkLnZhbHVlW19lXShlKX1jYXRjaChlKXtwLmUoZSl9ZmluYWxseXtwLmYoKX19ZS5wdXNoKCI8LyIuY29uY2F0KG4pLmNvbmNhdChyLCI+IikpfWVsc2UgZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLGkuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbal0pKX19LHtrZXk6eWUsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpc1tqXSl7dmFyIHQ9bmV3IHIodGhpc1twZV0sIiN0ZXh0Iik7dGhpc1tBXSh0KSx0W2pdPXRoaXNbal0sdGhpc1tqXT0iIn1yZXR1cm4gdGhpc1tBXShlKSwhMH19LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbal0mJnRoaXNbVWVdLmxlbmd0aD4wKXt2YXIgZT1uZXcgcih0aGlzW3BlXSwiI3RleHQiKTt0aGlzW0FdKGUpLGVbal09dGhpc1tqXSxkZWxldGUgdGhpc1tqXX19fSx7a2V5Ok1lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbZ2VdP24uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tqXX0pOm4uSFRNTFJlc3VsdC5FTVBUWX19LHtrZXk6Vyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBlP3RoaXNbVWVdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbZ2VdPT09ZX0pKTp0aGlzW1VlXX19LHtrZXk6Qix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0RlXX19LHtrZXk6JCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzW0RlXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1ddKGUpfX0se2tleTpILHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXNbRGVdLmdldChlKSkpe28ubmV4dD00O2JyZWFrfXJldHVybiBvLm5leHQ9NCxyO2Nhc2UgNDpuPXkodGhpc1tVZV0pLG8ucHJldj01LG4ucygpO2Nhc2UgNzppZigoYT1uLm4oKSkuZG9uZSl7by5uZXh0PTE2O2JyZWFrfWlmKChpPWEudmFsdWUpW2dlXSE9PWUpe28ubmV4dD0xMjticmVha31yZXR1cm4gby5uZXh0PTEyLGk7Y2FzZSAxMjppZighdCl7by5uZXh0PTE0O2JyZWFrfXJldHVybiBvLmRlbGVnYXRlWWllbGQoaVtIXShlLHQpLCJ0MCIsMTQpO2Nhc2UgMTQ6by5uZXh0PTc7YnJlYWs7Y2FzZSAxNjpvLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODpvLnByZXY9MTgsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDIxOnJldHVybiBvLnByZXY9MjEsbi5mKCksby5maW5pc2goMjEpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE4LDIxLDI0XV0pfSkpfSx7a2V5OkQsdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk7cmV0dXJuIHYoKS53cmFwKChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZighKHI9dGhpc1tEZV0uZ2V0KGUpKXx8dCYmcltFXSl7by5uZXh0PTQ7YnJlYWt9cmV0dXJuIG8ubmV4dD00LHI7Y2FzZSA0Om49eSh0aGlzW1VlXSksby5wcmV2PTUsbi5zKCk7Y2FzZSA3OmlmKChhPW4ubigpKS5kb25lKXtvLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGk9YS52YWx1ZSxvLmRlbGVnYXRlWWllbGQoaVtEXShlLHQpLCJ0MCIsMTApO2Nhc2UgMTA6by5uZXh0PTc7YnJlYWs7Y2FzZSAxMjpvLm5leHQ9MTc7YnJlYWs7Y2FzZSAxNDpvLnByZXY9MTQsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDE3OnJldHVybiBvLnByZXY9MTcsbi5mKCksby5maW5pc2goMTcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE0LDE3LDIwXV0pfSkpfSx7a2V5OnosdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGksbztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmE9eSh0aGlzW1VlXSksZS5wcmV2PTEsYS5zKCk7Y2FzZSAzOmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTI7YnJlYWt9aWYoKG89aS52YWx1ZSlbZ2VdIT09dHx8biYmb1tFXSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD04LG87Y2FzZSA4OmlmKCFyKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChvW3pdKHQscixuKSwidDAiLDEwKTtjYXNlIDEwOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTI6ZS5uZXh0PTE3O2JyZWFrO2Nhc2UgMTQ6ZS5wcmV2PTE0LGUudDE9ZS5jYXRjaCgxKSxhLmUoZS50MSk7Y2FzZSAxNzpyZXR1cm4gZS5wcmV2PTE3LGEuZigpLGUuZmluaXNoKDE3KTtjYXNlIDIwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNCwxNywyMF1dKX0pKX0se2tleTpvZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpc1tYZV0/MD09PXRoaXNbVWVdLmxlbmd0aHx8dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tYZV19fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXNbWGVdPzA9PT10aGlzW1VlXS5sZW5ndGg/dGhpc1tqXS50cmltKCk6dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tVZV1bMF1bRWVdKCkudHJpbSgpOm51bGw6dGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6Xyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3BlXSksdGhpc1tqXSYmKHQuJGNvbnRlbnQ9dGhpc1tqXSksdC4kbmFtZT10aGlzW2dlXSx0LmNoaWxkcmVuPVtdO3ZhciByLG49eSh0aGlzW1VlXSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO3QuY2hpbGRyZW4ucHVzaChhW19dKGUpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dC5hdHRyaWJ1dGVzPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIGksbz15KHRoaXNbRGVdKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPXUoaS52YWx1ZSwyKSxjPXNbMF0sbD1zWzFdO3QuYXR0cmlidXRlc1tjXT1sW2pdfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdH19XSkscn0ocnQpO3QuWG1sT2JqZWN0PWl0O3ZhciBvdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHcodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLG4pKVtqXT0iIixhfXJldHVybiBTKHIsW3trZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe319XSkscn0ocnQpO3QuQ29udGVudE9iamVjdD1vdDt2YXIgc3Q9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHcodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlLG4pKVtZZV09YSxpfXJldHVybiBTKHIsW3trZXk6Uix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpc1tqXT0oMCxuLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbWWVdWzBdLHZhbGlkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlW1llXS5pbmNsdWRlcyh0KX19KX19LHtrZXk6Rix2YWx1ZTpmdW5jdGlvbihlKXtjKHAoci5wcm90b3R5cGUpLEYsdGhpcykuY2FsbCh0aGlzLGUpLGRlbGV0ZSB0aGlzW1llXX19XSkscn0ob3QpO3QuT3B0aW9uT2JqZWN0PXN0O3ZhciBjdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHcodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUyhyLFt7a2V5OlIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2pdPXRoaXNbal0udHJpbSgpfX1dKSxyfShvdCk7dC5TdHJpbmdPYmplY3Q9Y3Q7dmFyIHV0PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSl7dmFyIG87cmV0dXJuIHcodGhpcyxyKSwobz10LmNhbGwodGhpcyxlLG4pKVtIZV09YSxvW1FlXT1pLG99cmV0dXJuIFMocixbe2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tqXT0oMCxuLmdldEludGVnZXIpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbSGVdLHZhbGlkYXRlOnRoaXNbUWVdfSl9fSx7a2V5OkYsdmFsdWU6ZnVuY3Rpb24oZSl7YyhwKHIucHJvdG90eXBlKSxGLHRoaXMpLmNhbGwodGhpcyxlKSxkZWxldGUgdGhpc1tIZV0sZGVsZXRlIHRoaXNbUWVdfX1dKSxyfShvdCk7dC5JbnRlZ2VyT2JqZWN0PXV0O3ZhciBsdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7cmV0dXJuIHcodGhpcyxyKSx0LmNhbGwodGhpcyxlLG4sMCwoZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfSkpfXJldHVybiBTKHIpfSh1dCk7dC5PcHRpb24wMT1sdDt2YXIgZnQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiB3KHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLDEsKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZX0pKX1yZXR1cm4gUyhyKX0odXQpO3QuT3B0aW9uMTA9ZnR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkhUTUxSZXN1bHQ9dm9pZCAwLHQuZ2V0QkJveD1mdW5jdGlvbihlKXt2YXIgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgcj1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwiLTEiKX0pKTtpZihyLmxlbmd0aDw0fHxyWzJdPDB8fHJbM108MClyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgbj1vKHIsNCk7cmV0dXJue3g6blswXSx5Om5bMV0sd2lkdGg6blsyXSxoZWlnaHQ6blszXX19LHQuZ2V0Q29sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9byhhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwXSwzKSxyPXRbMF0sbj10WzFdLGE9dFsyXTtpZighZSlyZXR1cm57cixnOm4sYjphfTt2YXIgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpPzA6ZX0pKTtpZihpLmxlbmd0aDwzKXJldHVybntyLGc6bixiOmF9O3ZhciBzPW8oaSwzKTtyZXR1cm57cjpyPXNbMF0sZzpuPXNbMV0sYjphPXNbMl19fSx0LmdldEZsb2F0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKGEpJiZuKGEpP2E6cn0sdC5nZXRJbnRlZ2VyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlSW50KHQsMTApO3JldHVybiFpc05hTihhKSYmbihhKT9hOnJ9LHQuZ2V0S2V5d29yZD1sLHQuZ2V0TWVhc3VyZW1lbnQ9Zix0LmdldFJhdGlvPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybntudW06MSxkZW46MX07dmFyIHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUZsb2F0KGUpfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKGUpfSkpO2lmKDE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpLDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O3ZhciByPW8odCwyKTtyZXR1cm57bnVtOnJbMF0sZGVuOnJbMV19fSx0LmdldFJlbGV2YW50PWZ1bmN0aW9uKGUpe3JldHVybiBlP2UudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfX0pKTpbXX0sdC5nZXRTdHJpbmdPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmluY2x1ZGVzKGUpfX0pfSx0LnN0cmlwUXVvdGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJyk/ZS5zbGljZSgxLGUubGVuZ3RoLTEpOmV9O3ZhciBhPXIoMik7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgYz17cHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNtOmZ1bmN0aW9uKGUpe3JldHVybiBlLzIuNTQqNzJ9LG1tOmZ1bmN0aW9uKGUpe3JldHVybiBlLzI1LjQqNzJ9LGluOmZ1bmN0aW9uKGUpe3JldHVybiA3MiplfSxweDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LHU9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBsKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtyZXR1cm4gdCYmbih0PXQudHJpbSgpKT90OnJ9ZnVuY3Rpb24gZihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IjAiO2lmKHQ9dHx8IjAiLCFlKXJldHVybiBmKHQpO3ZhciByPWUudHJpbSgpLm1hdGNoKHUpO2lmKCFyKXJldHVybiBmKHQpO3ZhciBuPW8ociwzKSxhPW5bMV0saT1uWzJdLHM9cGFyc2VGbG9hdChhKTtpZihpc05hTihzKSlyZXR1cm4gZih0KTtpZigwPT09cylyZXR1cm4gMDt2YXIgbD1jW2ldO3JldHVybiBsP2wocyk6c312YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zdWNjZXNzPXQsdGhpcy5odG1sPXIsdGhpcy5iYm94PW4sdGhpcy5icmVha05vZGU9YX12YXIgdCxyLG47cmV0dXJuIHQ9ZSxuPVt7a2V5OiJGQUlMVVJFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRkFJTFVSRSIsbmV3IGUoITEsbnVsbCxudWxsLG51bGwpKX19LHtrZXk6IkVNUFRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRU1QVFkiLG5ldyBlKCEwLG51bGwsbnVsbCxudWxsKSl9fSx7a2V5OiJicmVha05vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSghMSxudWxsLG51bGwsdCl9fSx7a2V5OiJzdWNjZXNzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUoITAsdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxudWxsKX19XSwocj1be2tleToiaXNCcmVhayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxuJiZpKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkhUTUxSZXN1bHQ9aH0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VJZHM9dC4kYnVpbGRYRkFPYmplY3Q9dm9pZCAwO3ZhciByPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PXIsdC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX19LGNvbm5lY3Rpb25TZXQ6e2lkOjEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9fSxkYXRhc2V0czp7aWQ6MixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLyIpfX0sZm9ybTp7aWQ6MyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfX0sbG9jYWxlU2V0OntpZDo0LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9fSxwZGY6e2lkOjUsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX19LHNpZ25hdHVyZTp7aWQ6NixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI9PT1lfX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9fSxzdHlsZXNoZWV0OntpZDo4LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPT09ZX19LHRlbXBsYXRlOntpZDo5LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfX0seGRjOntpZDoxMCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX19LHhkcDp7aWQ6MTEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfX0seGZkZjp7aWQ6MTIsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi8iPT09ZX19LHhodG1sOntpZDoxMyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZURhdGFOb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT15KHIpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3BlcmF0b3I9PT1kLmRvdERvdH0pKSlyZXR1cm4gbnVsbDt2YXIgbz1wLmdldChhWzBdLm5hbWUpLHM9MDtvPyhlPW8oZSx0KSxzPTEpOmU9dHx8ZTtmb3IodmFyIGM9YS5sZW5ndGg7czxjO3MrKyl7dmFyIHU9YVtzXSxsPXUubmFtZSxmPXUub3BlcmF0b3IsaD11LmluZGV4O2lmKCFpc0Zpbml0ZShoKSlyZXR1cm4gYVtzXS5pbmRleD0wLG0oZSxhLnNsaWNlKHMpKTt2YXIgZz12b2lkIDA7c3dpdGNoKGYpe2Nhc2UgZC5kb3Q6Zz1lW24uJGdldENoaWxkcmVuQnlOYW1lXShsLCExKTticmVhaztjYXNlIGQuZG90RG90Omc9ZVtuLiRnZXRDaGlsZHJlbkJ5TmFtZV0obCwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6Zz0oZz1lW24uJGdldENoaWxkcmVuQnlDbGFzc10obCkpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P2cuY2hpbGRyZW46W2ddfWlmKDA9PT1nLmxlbmd0aClyZXR1cm4gbShlLGEuc2xpY2UocykpO2lmKCEoaDxnLmxlbmd0aCkpcmV0dXJuIGFbc10uaW5kZXg9aC1nLmxlbmd0aCxtKGUsYS5zbGljZShzKSk7dmFyIHY9Z1toXTtpZighKHYgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIiksbnVsbDtlPXZ9cmV0dXJuIG51bGx9LHQuc2VhcmNoTm9kZT1mdW5jdGlvbihlLHQscil7dmFyIGE9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPXkociwhKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYyx1PXAuZ2V0KGlbMF0ubmFtZSksbD0wO3U/KGM9ITAsZT1bdShlLHQpXSxsPTEpOihjPW51bGw9PT10LGU9W3R8fGVdKTtmb3IodmFyIGY9ZnVuY3Rpb24ocil7dmFyIHMsdT1pW2xdLGY9dS5uYW1lLGg9dS5jYWNoZU5hbWUscD11Lm9wZXJhdG9yLHY9dS5pbmRleCx5PVtdLG09byhlKTt0cnl7Zm9yKG0ucygpOyEocz1tLm4oKSkuZG9uZTspe3ZhciBiPXMudmFsdWU7aWYoYiBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXt2YXIgdz12b2lkIDAsaz12b2lkIDA7aWYoYSYmKChrPWcuZ2V0KGIpKXx8KGs9bmV3IE1hcCxnLnNldChiLGspKSx3PWsuZ2V0KGgpKSwhdyl7c3dpdGNoKHApe2Nhc2UgZC5kb3Q6dz1iW24uJGdldENoaWxkcmVuQnlOYW1lXShmLCExKTticmVhaztjYXNlIGQuZG90RG90Onc9YltuLiRnZXRDaGlsZHJlbkJ5TmFtZV0oZiwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6dz0odz1iW24uJGdldENoaWxkcmVuQnlDbGFzc10oZikpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P3cuY2hpbGRyZW46W3ddfWEmJmsuc2V0KGgsdyl9dy5sZW5ndGg+MCYmeS5wdXNoKHcpfX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9aWYoMD09PXkubGVuZ3RoJiYhYyYmMD09PWwpe3ZhciBTPXRbbi4kZ2V0UGFyZW50XSgpO3JldHVybih0PVMpPyhsPS0xLGU9W3RdLCJjb250aW51ZSIpOnt2Om51bGx9fWU9aXNGaW5pdGUodik/eS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2PGUubGVuZ3RofSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdl19KSk6eS5mbGF0KCl9LGg9aS5sZW5ndGg7bDxoO2wrKyl7dmFyIHY9ZigpO2lmKCJjb250aW51ZSIhPT12JiYib2JqZWN0Ij09PXModikpcmV0dXJuIHYudn1yZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZX07dmFyIG49cigyMDYpLGE9cigyMDgpLGk9cigyKTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gdShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2woZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGwoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgZj0vXlteLltdKy8saD0vXlteXF1dKy8sZD17ZG90OjAsZG90RG90OjEsZG90SGFzaDoyLGRvdEJyYWNrZXQ6Myxkb3RQYXJlbjo0fSxwPW5ldyBNYXAoW1siJGRhdGEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmV9XSxbIiRyZWNvcmQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW24uJGdldENoaWxkcmVuXSgpWzBdfV0sWyIkdGVtcGxhdGUiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGVtcGxhdGV9XSxbIiRjb25uZWN0aW9uU2V0IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbm5lY3Rpb25TZXR9XSxbIiRmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmZvcm19XSxbIiRsYXlvdXQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGF5b3V0fV0sWyIkaG9zdCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ob3N0fV0sWyIkZGF0YVdpbmRvdyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kYXRhV2luZG93fV0sWyIkZXZlbnQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZXZlbnR9XSxbIiEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHN9XSxbIiR4ZmEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9XSxbInhmYSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX1dLFsiJCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH1dXSksZz1uZXcgV2Vha01hcCx2PWEuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIHkoZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLG49ZS5tYXRjaChmKTtpZighbilyZXR1cm4gbnVsbDtmb3IodmFyIGEsbz1jKG4sMSlbMF0scz1be25hbWU6byxjYWNoZU5hbWU6Ii4iK28saW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGwsb3BlcmF0b3I6ZC5kb3R9XSx1PW8ubGVuZ3RoO3U8ZS5sZW5ndGg7KXt2YXIgbD11O2lmKCJbIiE9PWUuY2hhckF0KHUrKykpe3ZhciBwPXZvaWQgMDtzd2l0Y2goZS5jaGFyQXQodSkpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7dSsrLHA9ZC5kb3REb3Q7YnJlYWs7Y2FzZSIjIjp1KysscD1kLmRvdEhhc2g7YnJlYWs7Y2FzZSJbIjppZihyKXJldHVybigwLGkud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIiksbnVsbDtwPWQuZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKHIpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpLG51bGw7cD1kLmRvdFBhcmVuO2JyZWFrO2RlZmF1bHQ6cD1kLmRvdH1pZighKG49ZS5zbGljZSh1KS5tYXRjaChmKSkpYnJlYWs7dSs9KG89YyhuLDEpWzBdKS5sZW5ndGgscy5wdXNoKHtuYW1lOm8sY2FjaGVOYW1lOmUuc2xpY2UobCx1KSxvcGVyYXRvcjpwLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9ZWxzZXtpZighKG49ZS5zbGljZSh1KS5tYXRjaChoKSkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpLG51bGw7cy5hdCgtMSkuaW5kZXg9IioiPT09KGE9KGE9blswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQoYSwxMCl8fDAsdSs9blswXS5sZW5ndGgrMX19cmV0dXJuIHN9ZnVuY3Rpb24gbShlLHQpe3ZhciByLGE9bnVsbCxpPW8odCk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXtmb3IodmFyIHM9ci52YWx1ZSxjPXMubmFtZSx1PXMuaW5kZXgsbD0wLGY9aXNGaW5pdGUodSk/dTowO2w8PWY7bCsrKXt2YXIgaD1lW24uJG5hbWVzcGFjZUlkXT09PXY/LTE6ZVtuLiRuYW1lc3BhY2VJZF07YT1uZXcgbi5YbWxPYmplY3QoaCxjKSxlW24uJGFwcGVuZENoaWxkXShhKX1lPWF9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpbmRlcj12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTEpLGk9cigyMDkpLG89cigyMDgpLHM9cigyKTtmdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZihlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZihlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gaChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2goZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHA9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gZyhlKXt2YXIgdD1uZXcgYS5UZXh0KHt9KTtyZXR1cm4gdFtuLiRjb250ZW50XT1lLHR9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucm9vdD10LHRoaXMuZGF0YXNldHM9dC5kYXRhc2V0cyx0LmRhdGFzZXRzJiZ0LmRhdGFzZXRzLmRhdGE/dGhpcy5kYXRhPXQuZGF0YXNldHMuZGF0YTp0aGlzLmRhdGE9bmV3IG4uWG1sT2JqZWN0KG8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkLCJkYXRhIiksdGhpcy5lbXB0eU1lcmdlPTA9PT10aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCkubGVuZ3RoLHRoaXMucm9vdC5mb3JtPXRoaXMuZm9ybT10LnRlbXBsYXRlW24uJGNsb25lXSgpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX2lzQ29uc3VtZURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHlNZXJnZSYmdGhpcy5fbWVyZ2VNb2RlfX0se2tleToiX2lzTWF0Y2hUZW1wbGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faXNDb25zdW1lRGF0YSgpfX0se2tleToiYmluZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSksdGhpcy5mb3JtfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0se2tleToiX2JpbmRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKGVbbi4kZGF0YV09dCxlW24uJGhhc1NldHRhYmxlVmFsdWVdKCkpaWYodFtuLiRpc0RhdGFWYWx1ZV0oKSl7dmFyIGk9dFtuLiRnZXREYXRhVmFsdWVdKCk7ZVtuLiRzZXRWYWx1ZV0oZyhpKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgYS5GaWVsZCYmZS51aSYmZS51aS5jaG9pY2VMaXN0JiYibXVsdGlTZWxlY3QiPT09ZS51aS5jaG9pY2VMaXN0Lm9wZW4pe3ZhciBvPXRbbi4kZ2V0Q2hpbGRyZW5dKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRjb250ZW50XS50cmltKCl9KSkuam9pbigiXG4iKTtlW24uJHNldFZhbHVlXShnKG8pKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKDAscy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtuLiRpc0RhdGFWYWx1ZV0oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTooMCxzLndhcm4pKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9fSx7a2V5OiJfZmluZERhdGFCeU5hbWVUb0NvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgaSxzLGM9MDtjPDM7YysrKXtmb3IoaT1yW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCExLCEwKTtzPWkubmV4dCgpLnZhbHVlOylpZih0PT09c1tuLiRpc0RhdGFWYWx1ZV0oKSlyZXR1cm4gcztpZihyW24uJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkJiYiZGF0YSI9PT1yW24uJG5vZGVOYW1lXSlicmVhaztyPXJbbi4kZ2V0UGFyZW50XSgpfXJldHVybiBhJiYoKHM9KGk9dGhpcy5kYXRhW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCEwLCExKSkubmV4dCgpLnZhbHVlKXx8KHM9KGk9dGhpcy5kYXRhW24uJGdldEF0dHJpYnV0ZUl0XShlLCEwKSkubmV4dCgpLnZhbHVlKSYmc1tuLiRpc0RhdGFWYWx1ZV0oKSk/czpudWxsfX0se2tleToiX3NldFByb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSl7dmFyIHIsbz1sKGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pO3RyeXtmb3Ioby5zKCk7IShyPW8ubigpKS5kb25lOyl7dmFyIGM9ci52YWx1ZSxmPWMucmVmLGg9Yy50YXJnZXQ7aWYoIWMuY29ubmVjdGlvbiYmZil7dmFyIGQ9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxmLCExLCExKTtpZihkKXt2YXIgcD11KGQsMSlbMF07aWYocFtuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YSkpe3ZhciBnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LGUsaCwhMSwhMSk7aWYoZyl7dmFyIHY9dShnLDEpWzBdO2lmKHZbbi4kaXNEZXNjZW5kZW50XShlKSl7dmFyIHk9dltuLiRnZXRQYXJlbnRdKCk7aWYodiBpbnN0YW5jZW9mIGEuU2V0UHJvcGVydHl8fHkgaW5zdGFuY2VvZiBhLlNldFByb3BlcnR5KSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7ZWxzZSBpZih2IGluc3RhbmNlb2YgYS5CaW5kSXRlbXN8fHkgaW5zdGFuY2VvZiBhLkJpbmRJdGVtcykoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtlbHNle3ZhciBtPXBbbi4kdGV4dF0oKSxiPXZbbi4kbm9kZU5hbWVdO2lmKHYgaW5zdGFuY2VvZiBuLlhGQUF0dHJpYnV0ZSl7dmFyIHc9T2JqZWN0LmNyZWF0ZShudWxsKTt3W2JdPW07dmFyIGs9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKHkpLmNvbnN0cnVjdG9yLFt3XSk7eVtiXT1rW2JdfWVsc2Ugdi5oYXNPd25Qcm9wZXJ0eShuLiRjb250ZW50KT8odltuLiRkYXRhXT1wLHZbbi4kY29udGVudF09bSx2W24uJGZpbmFsaXplXSgpKTooMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogIi5jb25jYXQoaCwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoZiwiLiIpKX19fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfX19fSx7a2V5OiJfYmluZEl0ZW1zIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUuaGFzT3duUHJvcGVydHkoIml0ZW1zIikmJmUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpJiYhZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXt2YXIgcixvPWwoZS5pdGVtcy5jaGlsZHJlbik7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlO2Vbbi4kcmVtb3ZlQ2hpbGRdKGMpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1lLml0ZW1zLmNsZWFyKCk7dmFyIGY9bmV3IGEuSXRlbXMoe30pLGg9bmV3IGEuSXRlbXMoe30pO2Vbbi4kYXBwZW5kQ2hpbGRdKGYpLGUuaXRlbXMucHVzaChmKSxlW24uJGFwcGVuZENoaWxkXShoKSxlLml0ZW1zLnB1c2goaCk7dmFyIGQscD1sKGUuYmluZEl0ZW1zLmNoaWxkcmVuKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LnJlZixtPXYubGFiZWxSZWYsYj12LnZhbHVlUmVmO2lmKCF2LmNvbm5lY3Rpb24mJnkpe3ZhciB3PSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQseSwhMSwhMSk7aWYodyl7dmFyIGssUz1sKHcpO3RyeXtmb3IoUy5zKCk7IShrPVMubigpKS5kb25lOyl7dmFyIHg9ay52YWx1ZTtpZih4W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpe3ZhciBPPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHgsbSwhMCwhMSk7aWYoTyl7dmFyIEE9dShPLDEpWzBdO2lmKEFbbi4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7dmFyIEM9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QseCxiLCEwLCExKTtpZihDKXt2YXIgRj11KEMsMSlbMF07aWYoRltuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXt2YXIgUD1nKEFbbi4kdGV4dF0oKSksVD1nKEZbbi4kdGV4dF0oKSk7ZltuLiRhcHBlbmRDaGlsZF0oUCksZi50ZXh0LnB1c2goUCksaFtuLiRhcHBlbmRDaGlsZF0oVCksaC50ZXh0LnB1c2goVCl9ZWxzZSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCB2YWx1ZTogIi5jb25jYXQoYiwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIGxhYmVsOiAiLmNvbmNhdChtLCIuIikpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZiAoIi5jb25jYXQoeSwiKTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpKX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoeSwiLiIpKX19fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfX19fSx7a2V5OiJfYmluZE9jY3VycmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE7aWYodC5sZW5ndGg+MSYmKChhPWVbbi4kY2xvbmVdKCkpW24uJHJlbW92ZUNoaWxkXShhLm9jY3VyKSxhLm9jY3VyPW51bGwpLHRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sciksdGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pLHRoaXMuX2JpbmRJdGVtcyhlLHRbMF0pLDEhPT10Lmxlbmd0aClmb3IodmFyIGk9ZVtuLiRnZXRQYXJlbnRdKCksbz1lW24uJG5vZGVOYW1lXSxzPWlbbi4kaW5kZXhPZl0oZSksYz0xLHU9dC5sZW5ndGg7Yzx1O2MrKyl7dmFyIGw9dFtjXSxmPWFbbi4kY2xvbmVdKCk7aVtvXS5wdXNoKGYpLGlbbi4kaW5zZXJ0QXRdKHMrYyxmKSx0aGlzLl9iaW5kVmFsdWUoZixsLHIpLHRoaXMuX3NldFByb3BlcnRpZXMoZixsKSx0aGlzLl9iaW5kSXRlbXMoZixsKX19fSx7a2V5OiJfY3JlYXRlT2NjdXJyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZW1wdHlNZXJnZSl7dmFyIHQ9ZS5vY2N1cjtpZih0JiYhKHQuaW5pdGlhbDw9MSkpe3ZhciByPWVbbi4kZ2V0UGFyZW50XSgpLGE9ZVtuLiRub2RlTmFtZV07aWYoclthXWluc3RhbmNlb2Ygbi5YRkFPYmplY3RBcnJheSl7dmFyIGk7aT1lLm5hbWU/clthXS5jaGlsZHJlbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWU9PT1lLm5hbWV9KSkubGVuZ3RoOnJbYV0uY2hpbGRyZW4ubGVuZ3RoO3ZhciBvPXJbbi4kaW5kZXhPZl0oZSkrMSxzPXQuaW5pdGlhbC1pO2lmKHMpe3ZhciBjPWVbbi4kY2xvbmVdKCk7Y1tuLiRyZW1vdmVDaGlsZF0oYy5vY2N1ciksYy5vY2N1cj1udWxsLHJbYV0ucHVzaChjKSxyW24uJGluc2VydEF0XShvLGMpO2Zvcih2YXIgdT0xO3U8czt1Kyspe3ZhciBsPWNbbi4kY2xvbmVdKCk7clthXS5wdXNoKGwpLHJbbi4kaW5zZXJ0QXRdKG8rdSxsKX19fX19fX0se2tleToiX2dldE9jY3VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLHI9ZS5vY2N1cjtpZighcnx8IXQpcmV0dXJuWzEsMV07dmFyIG49LTE9PT1yLm1heD8xLzA6ci5tYXg7cmV0dXJuW3IubWluLG5dfX0se2tleToiX3NldEFuZEJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc2V0UHJvcGVydGllcyhlLHQpLHRoaXMuX2JpbmRJdGVtcyhlLHQpLHRoaXMuX2JpbmRFbGVtZW50KGUsdCl9fSx7a2V5OiJfYmluZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7dmFyIGEsbz1sKGVbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioby5zKCk7IShhPW8ubigpKS5kb25lOyl7dmFyIGM9YS52YWx1ZTtpZighY1tuLiRkYXRhXSlpZih2b2lkIDAhPT10aGlzLl9tZXJnZU1vZGV8fCJzdWJmb3JtIiE9PWNbbi4kbm9kZU5hbWVdKXtpZihjW24uJGlzQmluZGFibGVdKCkpe3ZhciBmPSExLGg9bnVsbCxkPW51bGwsZz1udWxsO2lmKGMuYmluZCl7c3dpdGNoKGMuYmluZC5tYXRjaCl7Y2FzZSJub25lIjp0aGlzLl9zZXRBbmRCaW5kKGMsdCk7Y29udGludWU7Y2FzZSJnbG9iYWwiOmY9ITA7YnJlYWs7Y2FzZSJkYXRhUmVmIjppZighYy5iaW5kLnJlZil7KDAscy53YXJuKSgiWEZBIC0gcmVmIGlzIGVtcHR5IGluIG5vZGUgIi5jb25jYXQoY1tuLiRub2RlTmFtZV0sIi4iKSksdGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWQ9Yy5iaW5kLnJlZn1jLmJpbmQucGljdHVyZSYmKGg9Yy5iaW5kLnBpY3R1cmVbbi4kY29udGVudF0pfXZhciB2PXUodGhpcy5fZ2V0T2NjdXJJbmZvKGMpLDIpLHk9dlswXSxtPXZbMV07aWYoZCl7aWYobnVsbD09PShnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsZCwhMCwhMSkpKXtpZighKGc9KDAsaS5jcmVhdGVEYXRhTm9kZSkodGhpcy5kYXRhLHQsZCkpKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGdbbi4kY29uc3VtZWRdPSEwKSx0aGlzLl9zZXRBbmRCaW5kKGMsZyk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYoZz1nLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWVbbi4kY29uc3VtZWRdfSkpKSxnLmxlbmd0aD5tP2c9Zy5zbGljZSgwLG0pOjA9PT1nLmxlbmd0aCYmKGc9bnVsbCksZyYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZnLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Vbbi4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIWMubmFtZSl7dGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Zm9yKHZhciBiPVtdO2IubGVuZ3RoPG07KXt2YXIgdz10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShjLm5hbWUsY1tuLiRoYXNTZXR0YWJsZVZhbHVlXSgpLHQsZik7aWYoIXcpYnJlYWs7d1tuLiRjb25zdW1lZF09ITAsYi5wdXNoKHcpfWc9Yi5sZW5ndGg+MD9iOm51bGx9ZWxzZXtpZighKGc9dFtuLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oYy5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlKSl7aWYoMD09PXkpe3IucHVzaChjKTtjb250aW51ZX12YXIgaz10W24uJG5hbWVzcGFjZUlkXT09PXA/LTE6dFtuLiRuYW1lc3BhY2VJZF07Zz1jW24uJGRhdGFdPW5ldyBuLlhtbE9iamVjdChrLGMubmFtZSksdGhpcy5lbXB0eU1lcmdlJiYoZ1tuLiRjb25zdW1lZF09ITApLHRbbi4kYXBwZW5kQ2hpbGRdKGcpLHRoaXMuX3NldEFuZEJpbmQoYyxnKTtjb250aW51ZX10aGlzLmVtcHR5TWVyZ2UmJihnW24uJGNvbnN1bWVkXT0hMCksZz1bZ119fWc/dGhpcy5fYmluZE9jY3VycmVuY2VzKGMsZyxoKTp5PjA/dGhpcy5fc2V0QW5kQmluZChjLHQpOnIucHVzaChjKX19ZWxzZXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PWMubWVyZ2VNb2RlO3ZhciBTPXRbbi4kZ2V0Q2hpbGRyZW5dKCk7aWYoUy5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMoYyxbU1swXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe3ZhciB4PXRbbi4kbmFtZXNwYWNlSWRdPT09cD8tMTp0W24uJG5hbWVzcGFjZUlkXSxPPWNbbi4kZGF0YV09bmV3IG4uWG1sT2JqZWN0KHgsYy5uYW1lfHwicm9vdCIpO3Rbbi4kYXBwZW5kQ2hpbGRdKE8pLHRoaXMuX2JpbmRFbGVtZW50KGMsTyl9fX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9ci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRnZXRQYXJlbnRdKClbbi4kcmVtb3ZlQ2hpbGRdKGUpfSkpfX1dKSYmZCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQmluZGVyPXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5WYWx1ZT10LlRleHQ9dC5UZW1wbGF0ZU5hbWVzcGFjZT10LlRlbXBsYXRlPXQuU2V0UHJvcGVydHk9dC5JdGVtcz10LkZpZWxkPXQuQmluZEl0ZW1zPXZvaWQgMDt2YXIgbj1yKDIwNiksYT1yKDIwOCksaT1yKDIxMiksbz1yKDIxMykscz1yKDIwNyksYz1yKDIpLHU9cigyMTQpLGw9cigxMzUpLGY9cigyMDkpO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGgoZSl9ZnVuY3Rpb24gZCgpe3JldHVybiBkPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ayhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8QShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1oKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWgoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmIoZSx0KX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxiKGUsdCl9ZnVuY3Rpb24gdyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1rKGUpO2lmKHQpe3ZhciBhPWsodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gayhlKXtyZXR1cm4gaz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sayhlKX1mdW5jdGlvbiBTKCl7Uz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBmPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fXZhciB2PXt9O2ModixpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShQKFtdKSkpO20mJm0hPT10JiZyLmNhbGwobSxpKSYmKHY9bSk7dmFyIGI9Zy5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiB3KGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBrKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxmPXUudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1oKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1mKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1mKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxmO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxmO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGYpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZil9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBwLnByb3RvdHlwZT1nLG4oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLHAuZGlzcGxheU5hbWU9YyhnLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1wfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxnKTooZS5fX3Byb3RvX189ZyxjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx3KGsucHJvdG90eXBlKSxjKGsucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPWssZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBrKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdyhiKSxjKGIscywiR2VuZXJhdG9yIiksYyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyhiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxmKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGZ9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxmfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxmfX0sZX12YXIgeD1TKCkubWFyayhMKTtmdW5jdGlvbiBPKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1BKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBBKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBDKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gQyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBGPWEuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLFA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixUPS9eSChcZCspJC8sST1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLEU9W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGooZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07dmFyIHQ9ZS5ib3JkZXJbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGUubWFyZ2luJiYoZS5tYXJnaW4udG9wSW5zZXR8fGUubWFyZ2luLnJpZ2h0SW5zZXR8fGUubWFyZ2luLmJvdHRvbUluc2V0fHxlLm1hcmdpbi5sZWZ0SW5zZXQpfWZ1bmN0aW9uIF8oZSx0KXtpZighZS52YWx1ZSl7dmFyIHI9bmV3IFZ0KHt9KTtlW24uJGFwcGVuZENoaWxkXShyKSxlLnZhbHVlPXJ9ZS52YWx1ZVtuLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24gTChlKXt2YXIgdCxyLGE7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihpKXtmb3IoOzspc3dpdGNoKGkucHJldj1pLm5leHQpe2Nhc2UgMDp0PU8oZVtuLiRnZXRDaGlsZHJlbl0oKSksaS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtpLm5leHQ9MTI7YnJlYWt9aWYoISgoYT1yLnZhbHVlKWluc3RhbmNlb2YgX3QpKXtpLm5leHQ9ODticmVha31yZXR1cm4gaS5kZWxlZ2F0ZVlpZWxkKGFbbi4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCksInQwIiw3KTtjYXNlIDc6cmV0dXJuIGkuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgODpyZXR1cm4gaS5uZXh0PTEwLGE7Y2FzZSAxMDppLm5leHQ9MzticmVhaztjYXNlIDEyOmkubmV4dD0xNzticmVhaztjYXNlIDE0OmkucHJldj0xNCxpLnQxPWkuY2F0Y2goMSksdC5lKGkudDEpO2Nhc2UgMTc6cmV0dXJuIGkucHJldj0xNyx0LmYoKSxpLmZpbmlzaCgxNyk7Y2FzZSAyMDpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLHgsbnVsbCxbWzEsMTQsMTcsMjBdXSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZS52YWxpZGF0ZSYmImVycm9yIj09PWUudmFsaWRhdGUubnVsbFRlc3R9ZnVuY3Rpb24gTihlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpcmV0dXJuIHZvaWQoZVtuLiR0YWJJbmRleF09ZVtuLiRnZXRQYXJlbnRdKClbbi4kdGFiSW5kZXhdKTtpZihlW24uJHRhYkluZGV4XSlyZXR1cm47dmFyIHQscj1udWxsLGE9TyhlLnRyYXZlcnNhbFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2lmKCJuZXh0Ij09PWkub3BlcmF0aW9uKXtyPWk7YnJlYWt9fX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1pZighcnx8IXIucmVmKXJldHVybiB2b2lkKGVbbi4kdGFiSW5kZXhdPWVbbi4kZ2V0UGFyZW50XSgpW24uJHRhYkluZGV4XSk7dmFyIG89ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtuLiR0YWJJbmRleF09KytvW24uJHRhYkluZGV4XTt2YXIgcz1vW24uJHNlYXJjaE5vZGVdKHIucmVmLGUpO2lmKCFzKXJldHVybjtlPXNbMF19fWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmFzc2lzdDtpZihyKXt2YXIgYT1yW24uJHRvSFRNTF0oKTthJiYodC50aXRsZT1hKTt2YXIgaT1yLnJvbGUubWF0Y2goVCk7aWYoaSl7dmFyIG89aVsxXTt0LnJvbGU9ImhlYWRpbmciLHRbImFyaWEtbGV2ZWwiXT1vfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle3ZhciBzPWVbbi4kZ2V0UGFyZW50XSgpOyJyb3ciPT09cy5sYXlvdXQmJihzLmFzc2lzdCYmIlRIIj09PXMuYXNzaXN0LnJvbGU/dC5yb2xlPSJjb2x1bW5oZWFkZXIiOnQucm9sZT0iY2VsbCIpfX1mdW5jdGlvbiBCKGUpe2lmKCFlLmFzc2lzdClyZXR1cm4gbnVsbDt2YXIgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW24uJGNvbnRlbnRdP3Quc3BlYWtbbi4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtuLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gJChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTtudWxsPT09dFtuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUmJih0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lLHRbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCl9ZnVuY3Rpb24gWChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTt0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT09PWUmJih0W24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEpfWZ1bmN0aW9uIEgoZSl7aWYoZVtuLiRleHRyYV0pcmV0dXJuITE7aWYoZVtuLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSwiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7dmFyIHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCkscj1udWxsO2lmKGUudGFyZ2V0KXtpZighKHI9dFtuLiRzZWFyY2hOb2RlXShlLnRhcmdldCxlW24uJGdldFBhcmVudF0oKSkpKXJldHVybiExO3I9clswXX12YXIgYT10W24uJGV4dHJhXSxpPWEuY3VycmVudFBhZ2VBcmVhLG89YS5jdXJyZW50Q29udGVudEFyZWE7aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSlyZXR1cm4gciBpbnN0YW5jZW9mIGR0fHwocj1udWxsKSxlLnN0YXJ0TmV3PyhlW24uJGV4dHJhXS50YXJnZXQ9cnx8aSwhMCk6ISghcnx8cj09PWl8fChlW24uJGV4dHJhXS50YXJnZXQ9ciwwKSk7ciBpbnN0YW5jZW9mIHBlfHwocj1udWxsKTt2YXIgcyxjPXImJnJbbi4kZ2V0UGFyZW50XSgpLHU9YztpZihlLnN0YXJ0TmV3KWlmKHIpe3ZhciBsPWMuY29udGVudEFyZWEuY2hpbGRyZW4sZj1sLmluZGV4T2YobyksaD1sLmluZGV4T2Yocik7LTEhPT1mJiZmPGgmJih1PW51bGwpLHM9aC0xfWVsc2Ugcz1pLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yobyk7ZWxzZXtpZighcnx8cj09PW8pcmV0dXJuITE7cz1jLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YociktMSx1PWM9PT1pP251bGw6Y31yZXR1cm4gZVtuLiRleHRyYV0udGFyZ2V0PXUsZVtuLiRleHRyYV0uaW5kZXg9cywhMH1mdW5jdGlvbiBxKGUsdCxyKXt2YXIgYT1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxpPWFbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSxvPXRbbi4kZ2V0U3ViZm9ybVBhcmVudF07dFtuLiRnZXRTdWJmb3JtUGFyZW50XT1mdW5jdGlvbigpe3JldHVybiBlfSxhW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dmFyIHM9dFtuLiR0b0hUTUxdKHIpO2Vbbi4kYWRkSFRNTF0ocy5odG1sLHMuYmJveCksYVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWksdFtuLiRnZXRTdWJmb3JtUGFyZW50XT1vfXZhciBHPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJhcHBlYXJhbmNlRmlsdGVyIikpLmlkPWUuaWR8fCIiLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImFyYyIsITApKS5jaXJjdWxhcj0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaGFuZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4uc3RhcnRBbmdsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksbi5zd2VlcEFuZ2xlPSgwLHMuZ2V0RmxvYXQpKHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVkZ2U9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmVkZ2V8fG5ldyBBZSh7fSkscj10W24uJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuZmlsbCYmInZpc2libGUiPT09dGhpcy5maWxsLnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbbi4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCIsYS5zdHJva2VXaWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowKSxhLnN0cm9rZT1yLmNvbG9yO3ZhciBpPXt4bWxuczpQLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpZT17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6UCxjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXt2YXIgYz10aGlzLnN0YXJ0QW5nbGUqTWF0aC5QSS8xODAsdT10aGlzLnN3ZWVwQW5nbGUqTWF0aC5QSS8xODAsbD10aGlzLnN3ZWVwQW5nbGU+MTgwPzE6MCxmPTUwKigxK01hdGguY29zKGMpKSxoPTUwKigxLU1hdGguc2luKGMpKSxkPTUwKigxK01hdGguY29zKGMrdSkpLHA9NTAqKDEtTWF0aC5zaW4oYyt1KSk7ZT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6UCxkOiJNICIuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIEEgNTAgNTAgMCAiKS5jb25jYXQobCwiIDAgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCksdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fSxPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfXZhciBnPXtuYW1lOiJzdmciLGNoaWxkcmVuOltlXSxhdHRyaWJ1dGVzOml9O3JldHVybiBNKHRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbZ119KTooZy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZykpfX1dKSxyfShuLlhGQU9iamVjdCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiYXJlYSIsITApKS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9cCh0LDQpLGE9clswXSxpPXJbMV0sbz1yWzJdLHM9clszXTt0aGlzW24uJGV4dHJhXS53aWR0aD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS53aWR0aCxhK28pLHRoaXNbbi4kZXh0cmFdLmhlaWdodD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS5oZWlnaHQsaStzKSx0aGlzW24uJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGUpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5hdmFpbGFibGVTcGFjZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywicG9zaXRpb24iKSxyPXtzdHlsZTp0LGlkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUFyZWEiXX07KDAsby5pc1ByaW50T25seSkodGhpcykmJnIuY2xhc3MucHVzaCgieGZhUHJpbnRPbmx5IiksdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSk7dmFyIGE9W107dGhpc1tuLiRleHRyYV09e2NoaWxkcmVuOmEsd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTt2YXIgaT10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIGkuaXNCcmVhaygpP2k6KGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRSk7dC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpc1tuLiRleHRyYV0ud2lkdGgpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzW24uJGV4dHJhXS5oZWlnaHQpO3ZhciBjPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6cixjaGlsZHJlbjphfSx1PVt0aGlzLngsdGhpcy55LHRoaXNbbi4kZXh0cmFdLndpZHRoLHRoaXNbbi4kZXh0cmFdLmhlaWdodF07cmV0dXJuIGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuc3VjY2VzcyhjLHUpfX1dKSxyfShuLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYXNzaXN0IiwhMCkpLmlkPWUuaWR8fCIiLG4ucm9sZT1lLnJvbGV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNwZWFrPW51bGwsbi50b29sVGlwPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2xUaXAmJnRoaXMudG9vbFRpcFtuLiRjb250ZW50XT90aGlzLnRvb2xUaXBbbi4kY29udGVudF06bnVsbH19XSkscn0obi5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJhcmNvZGUiLCEwKSkuY2hhckVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxuLmNoZWNrc3VtPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pLG4uZGF0YUNvbHVtbkNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZGF0YUxlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5kYXRhUHJlcD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhUHJlcCxbIm5vbmUiLCJmbGF0ZUNvbXByZXNzIl0pLG4uZGF0YVJvd0NvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhUm93Q291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZW5kQ2hhcj1lLmVuZENoYXJ8fCIiLG4uZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9OH19KSxuLmlkPWUuaWR8fCIiLG4ubW9kdWxlSGVpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlSGVpZ2h0LCI1bW0iKSxuLm1vZHVsZVdpZHRoPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpLG4ucHJpbnRDaGVja0RpZ2l0PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4ucm93Q29sdW1uUmF0aW89KDAscy5nZXRSYXRpbykoZS5yb3dDb2x1bW5SYXRpbyksbi5zdGFydENoYXI9ZS5zdGFydENoYXJ8fCIiLG4udGV4dExvY2F0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRleHRMb2NhdGlvbixbImJlbG93IiwiYWJvdmUiLCJhYm92ZUVtYmVkZGVkIiwiYmVsb3dFbWJlZGRlZCIsIm5vbmUiXSksbi50cnVuY2F0ZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudHJ1bmNhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pLG4udXBzTW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53aWRlTmFycm93UmF0aW89KDAscy5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pLG4uZW5jcnlwdD1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJpbmQiLCEwKSkubWF0Y2g9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSksbi5yZWY9ZS5yZWZ8fCIiLG4ucGljdHVyZT1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJiaW5kSXRlbXMiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuQmluZEl0ZW1zPUo7dmFyIFo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJvb2tlbmQiKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksUT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYm9vbGVhbiIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSgxPT09dGhpc1tuLiRjb250ZW50XT8iMSI6IjAiKX19XSkscn0obi5PcHRpb24wMSksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImJvcmRlciIsITApKS5icmVhaz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5icmVhayxbImNsb3NlIiwib3BlbiJdKSxhLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY29ybmVyPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZWRnZT1uZXcgbi5YRkFPYmplY3RBcnJheSg0KSxhLmV4dHJhcz1udWxsLGEuZmlsbD1udWxsLGEubWFyZ2luPW51bGwsYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtpZihlLmxlbmd0aDw0KWZvcih2YXIgdD1lLmF0KC0xKXx8bmV3IEFlKHt9KSxyPWUubGVuZ3RoO3I8NDtyKyspZS5wdXNoKHQpO3ZhciBhPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50aGlja25lc3N9KSksaT1bMCwwLDAsMF07dGhpcy5tYXJnaW4mJihpWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0LGlbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldCxpWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0LGlbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0KSx0aGlzW24uJGV4dHJhXT17d2lkdGhzOmEsaW5zZXRzOmksZWRnZXM6ZX19cmV0dXJuIHRoaXNbbi4kZXh0cmFdfX0se2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRFeHRyYV0oKS5lZGdlcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kdG9TdHlsZV0oKTtyZXR1cm4gdC5jb2xvcj10LmNvbG9yfHwiIzAwMDAwMCIsdH0pKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24odCx0aGlzLm1hcmdpbltuLiR0b1N0eWxlXSgpKSx0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbih0LHRoaXMuZmlsbFtuLiR0b1N0eWxlXSgpKSx0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUucmFkaXVzfSkpKXt2YXIgcj10aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlW24uJHRvU3R5bGVdKCl9KSk7aWYoMj09PXIubGVuZ3RofHwzPT09ci5sZW5ndGgpZm9yKHZhciBhPXIuYXQoLTEpLGk9ci5sZW5ndGg7aTw0O2krKylyLnB1c2goYSk7dC5ib3JkZXJSYWRpdXM9ci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJhZGl1c30pKS5qb2luKCIgIil9c3dpdGNoKHRoaXMucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjpjYXNlImhpZGRlbiI6dC5ib3JkZXJTdHlsZT0iIjticmVhaztjYXNlImluYWN0aXZlIjp0LmJvcmRlclN0eWxlPSJub25lIjticmVhaztkZWZhdWx0OnQuYm9yZGVyU3R5bGU9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlfSkpLmpvaW4oIiAiKX1yZXR1cm4gdC5ib3JkZXJXaWR0aD1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUud2lkdGh9KSkuam9pbigiICIpLHQuYm9yZGVyQ29sb3I9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbG9yfSkpLmpvaW4oIiAiKSx0fX1dKSxyfShuLlhGQU9iamVjdCksdGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJyZWFrIiwhMCkpLmFmdGVyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFmdGVyLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSksbi5hZnRlclRhcmdldD1lLmFmdGVyVGFyZ2V0fHwiIixuLmJlZm9yZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5iZWZvcmUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKSxuLmJlZm9yZVRhcmdldD1lLmJlZm9yZVRhcmdldHx8IiIsbi5ib29rZW5kTGVhZGVyPWUuYm9va2VuZExlYWRlcnx8IiIsbi5ib29rZW5kVHJhaWxlcj1lLmJvb2tlbmRUcmFpbGVyfHwiIixuLmlkPWUuaWR8fCIiLG4ub3ZlcmZsb3dMZWFkZXI9ZS5vdmVyZmxvd0xlYWRlcnx8IiIsbi5vdmVyZmxvd1RhcmdldD1lLm92ZXJmbG93VGFyZ2V0fHwiIixuLm92ZXJmbG93VHJhaWxlcj1lLm92ZXJmbG93VHJhaWxlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxyZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtBZnRlciIsITApKS5pZD1lLmlkfHwiIixuLmxlYWRlcj1lLmxlYWRlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRhcmdldFR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxuZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtCZWZvcmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4uc3RhcnROZXc9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi50YXJnZXRUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKSxuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW24uJGV4dHJhXT17fSxzLkhUTUxSZXN1bHQuRkFJTFVSRX19XSkscn0obi5YRkFPYmplY3QpLGFlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJidXR0b24iLCEwKSkuaGlnaGxpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhpZ2hsaWdodCxbImludmVydGVkIiwibm9uZSIsIm91dGxpbmUiLCJwdXNoIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0saT1PKHIuZXZlbnQuY2hpbGRyZW4pO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZTtpZigiY2xpY2siPT09Yy5hY3Rpdml0eSYmYy5zY3JpcHQpe3ZhciB1PSgwLGwucmVjb3ZlckpzVVJMKShjLnNjcmlwdFtuLiRjb250ZW50XSk7aWYodSl7dmFyIGY9KDAsby5maXhVUkwpKHUudXJsKTtmJiZhLmNoaWxkcmVuLnB1c2goe25hbWU6ImEiLGF0dHJpYnV0ZXM6e2lkOiJsaW5rIit0aGlzW24uJHVpZF0saHJlZjpmLG5ld1dpbmRvdzp1Lm5ld1dpbmRvdyxjbGFzczpbInhmYUxpbmsiXSxzdHlsZTp7fX0sY2hpbGRyZW46W119KX19fX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3MoYSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxpZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FsY3VsYXRlIiwhMCkpLmlkPWUuaWR8fCIiLG4ub3ZlcnJpZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLm1lc3NhZ2U9bnVsbCxuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxvZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FwdGlvbiIsITApKS5pZD1lLmlkfHwiIixuLnBsYWNlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJlc2VydmU9TWF0aC5jZWlsKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmVzZXJ2ZSkpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4uZm9udD1udWxsLG4ubWFyZ2luPW51bGwsbi5wYXJhPW51bGwsbi52YWx1ZT1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kZ2V0RXh0cmEsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQ7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnI9dGhpcy5yZXNlcnZlPD0wP3I6dGhpcy5yZXNlcnZlfXRoaXNbbi4kZXh0cmFdPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6cn0pfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnZhbHVlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpc1tuLiRwdXNoUGFyYV0oKTt2YXIgdD10aGlzLnZhbHVlW24uJHRvSFRNTF0oZSkuaHRtbDtpZighdClyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgcj10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXt2YXIgYT10aGlzW24uJGdldEV4dHJhXShlKSxpPWEudyxjPWEuaDtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT1pO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWN9fXZhciB1PVtdOyJzdHJpbmciPT10eXBlb2YgdD91LnB1c2goe25hbWU6IiN0ZXh0Iix2YWx1ZTp0fSk6dS5wdXNoKHQpO3ZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihsLndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpfXJldHVybigwLG8uc2V0UGFyYSkodGhpcyxudWxsLHQpLHRoaXNbbi4kcG9wUGFyYV0oKSx0aGlzLnJlc2VydmU9cixzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpsLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjp1fSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxjZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGVzIiwhMCkpLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi5pZD1lLmlkfHwiIixuLnVybD1lLnVybHx8IiIsbi51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVuY3J5cHRpb249bnVsbCxuLmlzc3VlcnM9bnVsbCxuLmtleVVzYWdlPW51bGwsbi5vaWRzPW51bGwsbi5zaWduaW5nPW51bGwsbi5zdWJqZWN0RE5zPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjaGVja0J1dHRvbiIsITApKS5pZD1lLmlkfHwiIixuLm1hcms9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSksbi5zaGFwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pLG4uc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT0oMCxvLnRvU3R5bGUpKCJtYXJnaW4iKSxjPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO2kud2lkdGg9aS5oZWlnaHQ9Yzt2YXIgdSxsPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxmPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW24uJHRvSFRNTF0oKS5odG1sfHxbXSxoPXtvbjoodm9pZCAwIT09ZlswXT9mWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1mWzFdP2ZbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWUmJmwudmFsdWVbbi4kdGV4dF0oKXx8Im9mZiIpPT09aC5vbnx8dm9pZCAwLHA9bFtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtuLiR1aWRdO3AgaW5zdGFuY2VvZiBSZT8oYT1wW24uJHVpZF0sdD0icmFkaW8iLHI9InhmYVJhZGlvIix1PXBbbi4kZGF0YV0mJnBbbi4kZGF0YV1bbi4kdWlkXXx8cFtuLiR1aWRdKToodD0iY2hlY2tib3giLHI9InhmYUNoZWNrYm94Iix1PWxbbi4kZGF0YV0mJmxbbi4kZGF0YV1bbi4kdWlkXXx8bFtuLiR1aWRdKTt2YXIgdj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltyXSxzdHlsZTppLGZpZWxkSWQ6ZyxkYXRhSWQ6dSx0eXBlOnQsY2hlY2tlZDpkLHhmYU9uOmgub24seGZhT2ZmOmgub2ZmLCJhcmlhLWxhYmVsIjpCKGwpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBhJiYodi5hdHRyaWJ1dGVzLm5hbWU9YSksUihsKSYmKHYuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHYuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt2XX0pfX1dKSxyfShuLlhGQU9iamVjdCksbGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNob2ljZUxpc3QiLCEwKSkuY29tbWl0T249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5vcGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKSxuLnRleHRFbnRyeT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxvLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9ci5mb250JiZyLmZvbnQuc2l6ZXx8MTAsaT17Zm9udFNpemU6ImNhbGMoIi5jb25jYXQoYSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpfSxjPVtdO2lmKHIuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoPjApe3ZhciB1PXIuaXRlbXMsbD0wLGY9MDsyPT09dS5jaGlsZHJlbi5sZW5ndGgmJihmPTEtKGw9dS5jaGlsZHJlblswXS5zYXZlKSk7Zm9yKHZhciBoPXUuY2hpbGRyZW5bbF1bbi4kdG9IVE1MXSgpLmh0bWwsZD11LmNoaWxkcmVuW2ZdW24uJHRvSFRNTF0oKS5odG1sLHA9ITEsZz1yLnZhbHVlJiZyLnZhbHVlW24uJHRleHRdKCl8fCIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kyspe3ZhciBtPXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmRbdl18fGhbdl0sc3R5bGU6aX0sdmFsdWU6aFt2XX07ZFt2XT09PWcmJihtLmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9cD0hMCksYy5wdXNoKG0pfXB8fGMuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfXZhciBiPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX07cmV0dXJuIFIocikmJihiWyJhcmlhLXJlcXVpcmVkIl09ITAsYi5yZXF1aXJlZD0hMCksIm11bHRpU2VsZWN0Ij09PXRoaXMub3BlbiYmKGIubXVsdGlwbGU9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbe25hbWU6InNlbGVjdCIsY2hpbGRyZW46YyxhdHRyaWJ1dGVzOmJ9XX0pfX1dKSxyfShuLlhGQU9iamVjdCksZmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbG9yIiwhMCkpLmNTcGFjZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4udmFsdWU9ZS52YWx1ZT8oMCxzLmdldENvbG9yKShlLnZhbHVlKToiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT9jLlV0aWwubWFrZUhleENvbG9yKHRoaXMudmFsdWUucix0aGlzLnZhbHVlLmcsdGhpcy52YWx1ZS5iKTpudWxsfX1dKSxyfShuLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbWIiKSkuaWQ9ZS5pZHx8IiIsbi5udW1iZXJPZkNlbGxzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksZGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbm5lY3QiLCEwKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uaWQ9ZS5pZHx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udXNhZ2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudXNhZ2UsWyJleHBvcnRBbmRJbXBvcnQiLCJleHBvcnRPbmx5IiwiaW1wb3J0T25seSJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5waWN0dXJlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb250ZW50QXJlYSIsITApKS5oPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KSxuLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxuLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxuLmRlc2M9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2xlZnQ6KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0scj1bInhmYUNvbnRlbnRhcmVhIl07cmV0dXJuKDAsby5pc1ByaW50T25seSkodGhpcykmJnIucHVzaCgieGZhUHJpbnRPbmx5Iikscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczpyLGlkOnRoaXNbbi4kdWlkXX19KX19XSkscn0obi5YRkFPYmplY3QpLGdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb3JuZXIiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5pbnZlcnRlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uam9pbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5qb2luLFsic3F1YXJlIiwicm91bmQiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJhZGl1cz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl1cyksbi5zdHJva2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKSxuLnRoaWNrbmVzcz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtyZXR1cm4gZS5yYWRpdXM9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZSIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRjb250ZW50XS50cmltKCk7dGhpc1tuLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSh0aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCkseWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRhdGVUaW1lIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKTt0aGlzW24uJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxtZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZVRpbWVFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGlja2VyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOnJbbi4kdWlkXSxkYXRhSWQ6cltuLiRkYXRhXSYmcltuLiRkYXRhXVtuLiR1aWRdfHxyW24uJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBSKHIpJiYoYS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITAsYS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwKSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxiZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGVjaW1hbCIpKS5mcmFjRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mcmFjRGlnaXRzLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4uaWQ9ZS5pZHx8IiIsbi5sZWFkRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLHdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJkZWZhdWx0VWkiLCEwKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLGtlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkZXNjIiwhMCkpLmlkPWUuaWR8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksU2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRpZ2VzdE1ldGhvZCIsWyIiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiUklQRU1EMTYwIl0pKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5PcHRpb25PYmplY3QpLHhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkaWdlc3RNZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5kaWdlc3RNZXRob2Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLE9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkcmF3IiwhMCkpLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubG9jYWxlPWUubG9jYWxlfHwiIixhLm1heEg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKSxhLm1heFc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKSxhLm1pbkg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKSxhLm1pblc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKSxhLm5hbWU9ZS5uYW1lfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS5yb3RhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSU5MD09MH19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5ib3JkZXI9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5wYXJhPW51bGwsYS50cmF2ZXJzYWw9bnVsbCxhLnVpPW51bGwsYS52YWx1ZT1udWxsLGEuc2V0UHJvcGVydHk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe18odGhpcyxlKX0pKX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7KDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciB0PXRoaXMudyxyPXRoaXMuaCxhPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyxlKSxjPWEudyx1PWEuaCxsPWEuaXNCcm9rZW47aWYoYyYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7dGhpcy53PWN9aWYodSYmIiI9PT10aGlzLmgmJih0aGlzLmg9dSksJCh0aGlzKSwhKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtYKHRoaXMpO3ZhciBmPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsImhBbGlnbiIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsImJvcmRlciIsIm1hcmdpbiIpOygwLG8uc2V0TWluTWF4RGltZW5zaW9ucykodGhpcyxmKSxmLm1hcmdpbiYmKGYucGFkZGluZz1mLm1hcmdpbixkZWxldGUgZi5tYXJnaW4pO3ZhciBoPVsieGZhRHJhdyJdO3RoaXMuZm9udCYmaC5wdXNoKCJ4ZmFGb250IiksKDAsby5pc1ByaW50T25seSkodGhpcykmJmgucHVzaCgieGZhUHJpbnRPbmx5Iik7dmFyIGQ9e3N0eWxlOmYsaWQ6dGhpc1tuLiR1aWRdLGNsYXNzOmh9O3RoaXMubmFtZSYmKGQueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBwPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07RCh0aGlzLGQpO3ZhciBnPSgwLG8uY29tcHV0ZUJib3gpKHRoaXMscCxlKSx2PXRoaXMudmFsdWU/dGhpcy52YWx1ZVtuLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtyZXR1cm4gbnVsbD09PXY/KHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxvLmNyZWF0ZVdyYXBwZXIpKHRoaXMscCksZykpOihwLmNoaWxkcmVuLnB1c2godiksKDAsby5zZXRQYXJhKSh0aGlzLGYsdiksdGhpcy53PXQsdGhpcy5oPXIsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxwKSxnKSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxBZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZWRnZSIsITApKS5jYXA9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY2FwLFsic3F1YXJlIiwiYnV0dCIsInJvdW5kIl0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnN0cm9rZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zdHJva2UsWyJzb2xpZCIsImRhc2hEb3QiLCJkYXNoRG90RG90IiwiZGFzaGVkIiwiZG90dGVkIiwiZW1ib3NzZWQiLCJldGNoZWQiLCJsb3dlcmVkIiwicmFpc2VkIl0pLG4udGhpY2tuZXNzPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudGhpY2tuZXNzLCIwLjVwdCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywidmlzaWJpbGl0eSIpO2lmKE9iamVjdC5hc3NpZ24oZSx7bGluZWNhcDp0aGlzLmNhcCx3aWR0aDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50aGlja25lc3MpLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvcltuLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pLCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1dKSxyfShuLlhGQU9iamVjdCksQ2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImVuY29kaW5nIixbImFkYmUueDUwOS5yc2Ffc2hhMSIsImFkYmUucGtjczcuZGV0YWNoZWQiLCJhZGJlLnBrY3M3LnNoYTEiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksRmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY29kaW5ncyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0IiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNlcnRpZmljYXRlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFRlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0RGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJlbmNyeXB0IiwiZGVjcnlwdCJdKSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZmlsdGVyPW51bGwsbi5tYW5pZmVzdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxJZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZW5jcnlwdGlvbiIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksamU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY3J5cHRpb25NZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5lbmNyeXB0aW9uTWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxNZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZXZlbnQiLCEwKSkuYWN0aXZpdHk9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aXZpdHksWyJjbGljayIsImNoYW5nZSIsImRvY0Nsb3NlIiwiZG9jUmVhZHkiLCJlbnRlciIsImV4aXQiLCJmdWxsIiwiaW5kZXhDaGFuZ2UiLCJpbml0aWFsaXplIiwibW91c2VEb3duIiwibW91c2VFbnRlciIsIm1vdXNlRXhpdCIsIm1vdXNlVXAiLCJwb3N0RXhlY3V0ZSIsInBvc3RPcGVuIiwicG9zdFByaW50IiwicG9zdFNhdmUiLCJwb3N0U2lnbiIsInBvc3RTdWJtaXQiLCJwcmVFeGVjdXRlIiwicHJlT3BlbiIsInByZVByaW50IiwicHJlU2F2ZSIsInByZVNpZ24iLCJwcmVTdWJtaXQiLCJyZWFkeSIsInZhbGlkYXRpb25TdGF0ZSJdKSxuLmlkPWUuaWR8fCIiLG4ubGlzdGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxpc3RlbixbInJlZk9ubHkiLCJyZWZBbmREZXNjZW5kZW50cyJdKSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5lbmNyeXB0RGF0YT1udWxsLG4uZXhlY3V0ZT1udWxsLG4uc2NyaXB0PW51bGwsbi5zaWduRGF0YT1udWxsLG4uc3VibWl0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLF9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJleERhdGEiKSkuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiIsbi5ocmVmPWUuaHJlZnx8IiIsbi5pZD1lLmlkfHwiIixuLm1heExlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49LTF9fSksbi5uYW1lPWUubmFtZXx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRpc0NEQVRBWG1sLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlfX0se2tleTpuLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWR8fCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKSYmKHRoaXNbbi4kY29udGVudF09ZSwhMCl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XVtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5Db250ZW50T2JqZWN0KSxMZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXhPYmplY3QiLCEwKSkuYXJjaGl2ZT1lLmFyY2hpdmV8fCIiLGEuY2xhc3NJZD1lLmNsYXNzSWR8fCIiLGEuY29kZUJhc2U9ZS5jb2RlQmFzZXx8IiIsYS5jb2RlVHlwZT1lLmNvZGVUeXBlfHwiIixhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJleGNsR3JvdXAiLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIixhLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubGF5b3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSksYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLnc9ZS53PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiIsYS54PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0IiksYS55PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0IiksYS5hc3Npc3Q9bnVsbCxhLmJpbmQ9bnVsbCxhLmJvcmRlcj1udWxsLGEuY2FsY3VsYXRlPW51bGwsYS5jYXB0aW9uPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS52YWxpZGF0ZT1udWxsLGEuY29ubmVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV2ZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmllbGQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0LHI9Tyh0aGlzLmZpZWxkLmNoaWxkcmVuKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7aWYoIWEudmFsdWUpe3ZhciBpPW5ldyBWdCh7fSk7YVtuLiRhcHBlbmRDaGlsZF0oaSksYS52YWx1ZT1pfWEudmFsdWVbbi4kc2V0VmFsdWVdKGUpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSl9LHtrZXk6bi4kaXNUaGVyZU1vcmVXaWR0aCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iik/KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITEsITEpOiEoZS5sYXlvdXQmJmUubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbbi4kZXh0cmFdLm51bWJlckluTGluZXx8KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITAsMCkpKX19LHtrZXk6bi4kZmx1c2hIVE1MLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5mbHVzaEhUTUwpKHRoaXMpfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9fSx7a2V5Om4uJGdldEF2YWlsYWJsZVNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtpZihOKHRoaXMpLCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTsoMCxvLmZpeERpbWVuc2lvbnMpKHRoaXMpO3ZhciB0PVtdLHI9e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbXX07KDAsby5zZXRBY2Nlc3MpKHRoaXMsci5jbGFzcyksdGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPYmplY3QuYXNzaWduKHRoaXNbbi4kZXh0cmFdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6cixhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO3ZhciBhPXRoaXNbbi4kaXNTcGxpdHRhYmxlXSgpO2lmKGF8fCQodGhpcyksISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBzLkhUTUxSZXN1bHQuRkFJTFVSRTt2YXIgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgdT10aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO0FycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoPjAmJih0aGlzW24uJGV4dHJhXS5jb2x1bW5XaWR0aHM9dSx0aGlzW24uJGV4dHJhXS5jdXJyZW50Q29sdW1uPTApfXZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksZj1bInhmYUV4Y2xncm91cCJdLGg9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aCYmZi5wdXNoKGgpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZmLnB1c2goInhmYVByaW50T25seSIpLHIuc3R5bGU9bCxyLmNsYXNzPWYsdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSksdGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGQ9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQscD1kPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PHA7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgZz10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmMsaW5jbHVkZTohMH0pO2lmKGcuc3VjY2VzcylicmVhaztpZihnLmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLGc7aWYoZCYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PXA7YnJlYWt9fWlmKHRoaXNbbi4kcG9wUGFyYV0oKSxhfHxYKHRoaXMpLHRoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9PT1wKXJldHVybiBhfHxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIHY9MCx5PTA7dGhpcy5tYXJnaW4mJih2PXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0LHk9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBtPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLndpZHRoK3YsdGhpcy53fHwwKSxiPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLmhlaWdodCt5LHRoaXMuaHx8MCksdz1bdGhpcy54LHRoaXMueSxtLGJdOyIiPT09dGhpcy53JiYobC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykobSkpLCIiPT09dGhpcy5oJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKGIpKTt2YXIgaz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOnIsY2hpbGRyZW46dH07cmV0dXJuIEQodGhpcyxyKSxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLGspLHcpfX1dKSxyfShuLlhGQU9iamVjdCksTmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImV4ZWN1dGUiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uZXhlY3V0ZVR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pLG4uaWQ9ZS5pZHx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXh0cmFzIiwhMCkpLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXh0cmFzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksQmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImZpZWxkIiwhMCkpLmFjY2Vzcz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKSxhLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiIsYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5oPWUuaD8oMCxzLmdldE1lYXN1cmVtZW50KShlLmgpOiIiLGEuaEFsaWduPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEucm90YXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUlOTA9PTB9fSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEudz1lLnc/KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KToiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmFzc2lzdD1udWxsLGEuYmluZD1udWxsLGEuYm9yZGVyPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEuZm9ybWF0PW51bGwsYS5pdGVtcz1uZXcgbi5YRkFPYmplY3RBcnJheSgyKSxhLmtlZXA9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS51aT1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhbHVlPW51bGwsYS5iaW5kSXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb25uZWN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKE4odGhpcyksIXRoaXMudWkpe3ZhciB0O3N3aXRjaCh0aGlzLnVpPW5ldyB6dCh7fSksdGhpcy51aVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpLHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6dD1uZXcgVXQoe30pLHRoaXMudWkudGV4dEVkaXQ9dDticmVhaztjYXNlIDE6dD1uZXcgdWUoe30pLHRoaXMudWkuY2hlY2tCdXR0b249dDticmVhaztjYXNlIDI6dD1uZXcgbGUoe30pLHRoaXMudWkuY2hvaWNlTGlzdD10fXRoaXMudWlbbi4kYXBwZW5kQ2hpbGRdKHQpfWlmKCF0aGlzLnVpfHwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW24uJGV4dHJhXSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciByPXRoaXMuY2FwdGlvbj90aGlzLmNhcHRpb25bbi4kdG9IVE1MXShlKS5odG1sOm51bGwsYT10aGlzLncsYz10aGlzLmgsbD0wLGY9MDt0aGlzLm1hcmdpbiYmKGw9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsZj10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIGg9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe3ZhciBkPW51bGwsZz1udWxsLHY9MCx5PTA7aWYodGhpcy51aS5jaGVja0J1dHRvbil2PXk9dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7dmFyIG09KDAsby5sYXlvdXROb2RlKSh0aGlzLGUpLGI9bS53LHc9bS5oO251bGwhPT1iPyh2PWIseT13KTp5PSgwLHUuZ2V0TWV0cmljcykodGhpcy5mb250LCEwKS5saW5lTm9HYXB9aWYodis9KGg9aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKSkudyx5Kz1oLmgsdGhpcy5jYXB0aW9uKXt2YXIgaz10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLFM9ay53LHg9ay5oO2lmKGsuaXNCcm9rZW4mJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7c3dpdGNoKGQ9UyxnPXgsdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6ZCs9djticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmcrPXl9fWVsc2UgZD12LGc9eTtkJiYiIj09PXRoaXMudyYmKGQrPWwsdGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPGQ/ZDp0aGlzLm1pblcpKSxnJiYiIj09PXRoaXMuaCYmKGcrPWYsdGhpcy5oPU1hdGgubWluKHRoaXMubWF4SDw9MD8xLzA6dGhpcy5tYXhILHRoaXMubWluSCsxPGc/Zzp0aGlzLm1pbkgpKX1pZih0aGlzW24uJHBvcFBhcmFdKCksKDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gdGhpcy53PWEsdGhpcy5oPWMsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5GQUlMVVJFO1godGhpcyk7dmFyIE89KDAsby50b1N0eWxlKSh0aGlzLCJmb250IiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsInByZXNlbmNlIiwibWFyZ2luIiwiaEFsaWduIik7KDAsby5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLE8pO3ZhciBBPVsieGZhRmllbGQiXTt0aGlzLmZvbnQmJkEucHVzaCgieGZhRm9udCIpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZBLnB1c2goInhmYVByaW50T25seSIpO3ZhciBDPXtzdHlsZTpPLGlkOnRoaXNbbi4kdWlkXSxjbGFzczpBfTtPLm1hcmdpbiYmKE8ucGFkZGluZz1PLm1hcmdpbixkZWxldGUgTy5tYXJnaW4pLCgwLG8uc2V0QWNjZXNzKSh0aGlzLEEpLHRoaXMubmFtZSYmKEMueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBGPVtdLFA9e25hbWU6ImRpdiIsYXR0cmlidXRlczpDLGNoaWxkcmVuOkZ9O0QodGhpcyxDKTt2YXIgVD10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltuLiR0b1N0eWxlXSgpOm51bGwsST0oMCxvLmNvbXB1dGVCYm94KSh0aGlzLFAsZSksRT10aGlzLnVpW24uJHRvSFRNTF0oKS5odG1sO2lmKCFFKXJldHVybiBPYmplY3QuYXNzaWduKE8sVCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO3RoaXNbbi4kdGFiSW5kZXhdJiYoRS5jaGlsZHJlbiYmRS5jaGlsZHJlblswXT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tuLiR0YWJJbmRleF06RS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbbi4kdGFiSW5kZXhdKSxFLmF0dHJpYnV0ZXMuc3R5bGV8fChFLmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIE09bnVsbDtpZih0aGlzLnVpLmJ1dHRvbj8oMT09PUUuY2hpbGRyZW4ubGVuZ3RoJiYoTT1wKEUuY2hpbGRyZW4uc3BsaWNlKDAsMSksMSlbMF0pLE9iamVjdC5hc3NpZ24oRS5hdHRyaWJ1dGVzLnN0eWxlLFQpKTpPYmplY3QuYXNzaWduKE8sVCksRi5wdXNoKEUpLHRoaXMudmFsdWUpaWYodGhpcy51aS5pbWFnZUVkaXQpRS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbbi4kdG9IVE1MXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXt2YXIgXz0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSlfPXRoaXMudmFsdWUuZXhEYXRhW24uJHRleHRdKCk7ZWxzZSBpZih0aGlzLnZhbHVlLnRleHQpXz10aGlzLnZhbHVlLnRleHRbbi4kZ2V0RXh0cmFdKCk7ZWxzZXt2YXIgTD10aGlzLnZhbHVlW24uJHRvSFRNTF0oKS5odG1sO251bGwhPT1MJiYoXz1MLmNoaWxkcmVuWzBdLnZhbHVlKX10aGlzLnVpLnRleHRFZGl0JiZ0aGlzLnZhbHVlLnRleHQmJnRoaXMudmFsdWUudGV4dC5tYXhDaGFycyYmKEUuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGg9dGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKSxfJiYodGhpcy51aS5udW1lcmljRWRpdCYmKF89cGFyc2VGbG9hdChfKSxfPWlzTmFOKF8pPyIiOl8udG9TdHJpbmcoKSksInRleHRhcmVhIj09PUUuY2hpbGRyZW5bMF0ubmFtZT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGV4dENvbnRlbnQ9XzpFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudmFsdWU9Xyl9aWYoIXRoaXMudWkuaW1hZ2VFZGl0JiZFLmNoaWxkcmVuJiZFLmNoaWxkcmVuWzBdJiZ0aGlzLmgpe2g9aHx8aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKTt2YXIgUj0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7KFI9dGhpcy5jYXB0aW9uLnJlc2VydmUpPD0wJiYoUj10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLmgpO3ZhciBCPXRoaXMuaC1SLWYtaC5oO0UuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKEIpfWVsc2UgRS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9aWYoTSYmRS5jaGlsZHJlbi5wdXNoKE0pLCFyKXJldHVybiBFLmF0dHJpYnV0ZXMuY2xhc3MmJkUuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0IiksdGhpcy53PWEsdGhpcy5oPWMscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO2lmKHRoaXMudWkuYnV0dG9uKXJldHVybiBPLnBhZGRpbmcmJmRlbGV0ZSBPLnBhZGRpbmcsImRpdiI9PT1yLm5hbWUmJihyLm5hbWU9InNwYW4iKSxFLmNoaWxkcmVuLnB1c2gocikscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoUCxJKTtzd2l0Y2godGhpcy51aS5jaGVja0J1dHRvbiYmKHIuYXR0cmlidXRlcy5jbGFzc1swXT0ieGZhQ2FwdGlvbkZvckNoZWNrQnV0dG9uIiksRS5hdHRyaWJ1dGVzLmNsYXNzfHwoRS5hdHRyaWJ1dGVzLmNsYXNzPVtdKSxFLmNoaWxkcmVuLnNwbGljZSgwLDAsciksdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9cmV0dXJuIHRoaXMudz1hLHRoaXMuaD1jLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxQKSxJKX19XSkscn0obi5YRkFPYmplY3QpO3QuRmllbGQ9QmU7dmFyIFVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmaWxsIiwhMCkpLmlkPWUuaWR8fCIiLG4ucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG4ubGluZWFyPW51bGwsbi5wYXR0ZXJuPW51bGwsbi5yYWRpYWw9bnVsbCxuLnNvbGlkPW51bGwsbi5zdGlwcGxlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PWVbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxyPU9iamVjdC5jcmVhdGUobnVsbCksYT0iY29sb3IiLGk9YTtlIGluc3RhbmNlb2YgZWUmJihhPSJiYWNrZ3JvdW5kLWNvbG9yIixpPSJiYWNrZ3JvdW5kIix0IGluc3RhbmNlb2YgenQmJihyLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKSksKGUgaW5zdGFuY2VvZiB4dHx8ZSBpbnN0YW5jZW9mIHopJiYoYT1pPSJmaWxsIixyLmZpbGw9IndoaXRlIik7dmFyIG8scz1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBjPW8udmFsdWU7aWYoImV4dHJhcyIhPT1jJiYiY29sb3IiIT09Yyl7dmFyIHU9dGhpc1tjXTtpZih1IGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBsPXVbbi4kdG9TdHlsZV0odGhpcy5jb2xvcik7cmV0dXJuIGwmJihyW2wuc3RhcnRzV2l0aCgiIyIpP2E6aV09bCkscn19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1pZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXt2YXIgZj10aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk7cltmLnN0YXJ0c1dpdGgoIiMiKT9hOmldPWZ9cmV0dXJuIHJ9fV0pLHJ9KG4uWEZBT2JqZWN0KSwkZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZmlsdGVyIiwhMCkpLmFkZFJldm9jYXRpb25JbmZvPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFkZFJldm9jYXRpb25JbmZvLFsiIiwicmVxdWlyZWQiLCJvcHRpb25hbCIsIm5vbmUiXSksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52ZXJzaW9uPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6bi52ZXJzaW9uLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD01fX0pLG4uYXBwZWFyYW5jZUZpbHRlcj1udWxsLG4uY2VydGlmaWNhdGVzPW51bGwsbi5kaWdlc3RNZXRob2RzPW51bGwsbi5lbmNvZGluZ3M9bnVsbCxuLmVuY3J5cHRpb25NZXRob2RzPW51bGwsbi5oYW5kbGVyPW51bGwsbi5sb2NrRG9jdW1lbnQ9bnVsbCxuLm1kcD1udWxsLG4ucmVhc29ucz1udWxsLG4udGltZVN0YW1wPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmbG9hdCIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmb250IiwhMCkpLmJhc2VsaW5lU2hpZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KSxuLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAscy5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5mb250VmVydGljYWxTY2FsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLmZvbnRWZXJ0aWNhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5pZD1lLmlkfHwiIixuLmtlcm5pbmdNb2RlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSksbi5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGV0dGVyU3BhY2luZywiMCIpLG4ubGluZVRocm91Z2g9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZXx8Mj09PWV9fSksbi5saW5lVGhyb3VnaFBlcmlvZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSksbi5vdmVybGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfHwyPT09ZX19KSxuLm92ZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKSxuLnBvc3R1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucG9zdHVyZSxbIm5vcm1hbCIsIml0YWxpYyJdKSxuLnNpemU9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0Iiksbi50eXBlZmFjZT1lLnR5cGVmYWNlfHwiQ291cmllciIsbi51bmRlcmxpbmU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnVuZGVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDI9PT1lfX0pLG4udW5kZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4ud2VpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSksbi5leHRyYXM9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kY2xlYW4sdmFsdWU6ZnVuY3Rpb24oZSl7ZChrKHIucHJvdG90eXBlKSxuLiRjbGVhbix0aGlzKS5jYWxsKHRoaXMsZSksdGhpc1tuLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX19LHtrZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywiZmlsbCIpLHQ9ZS5jb2xvcjtyZXR1cm4gdCYmKCIjMDAwMDAwIj09PXQ/ZGVsZXRlIGUuY29sb3I6dC5zdGFydHNXaXRoKCIjIil8fChlLmJhY2tncm91bmQ9dCxlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IixlLmNvbG9yPSJ0cmFuc3BhcmVudCIpKSx0aGlzLmJhc2VsaW5lU2hpZnQmJihlLnZlcnRpY2FsQWxpZ249KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuYmFzZWxpbmVTaGlmdCkpLGUuZm9udEtlcm5pbmc9Im5vbmUiPT09dGhpcy5rZXJuaW5nTW9kZT8ibm9uZSI6Im5vcm1hbCIsZS5sZXR0ZXJTcGFjaW5nPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxldHRlclNwYWNpbmcpLDAhPT10aGlzLmxpbmVUaHJvdWdoJiYoZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIiwyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLDAhPT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvbj0ib3ZlcmxpbmUiLDI9PT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKSksZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlLGUuZm9udFNpemU9KDAsby5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpLCgwLG8uc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKSwwIT09dGhpcy51bmRlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiLDI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLGUuZm9udFdlaWdodD10aGlzLndlaWdodCxlfX1dKSxyfShuLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImZvcm1hdCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLnBpY3R1cmU9bnVsbCxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksR2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImhhbmRsZXIiKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCksemU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImh5cGhlbmF0aW9uIikpLmV4Y2x1ZGVBbGxDYXBzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlQWxsQ2FwcyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5leGNsdWRlSW5pdGlhbENhcD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaHlwaGVuYXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wdXNoQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnB1c2hDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnJlbWFpbkNoYXJhY3RlckNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53b3JkQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksV2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImltYWdlIikpLmFzcGVjdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSksbi5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIixuLmhyZWY9ZS5ocmVmfHwiIixuLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhSS5oYXModGhpcy5jb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO3ZhciBlPXRoaXNbbi4kZ2xvYmFsRGF0YV0uaW1hZ2VzJiZ0aGlzW24uJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtpZighZSYmKHRoaXMuaHJlZnx8IXRoaXNbbi4kY29udGVudF0pKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPSgwLGMuc3RyaW5nVG9CeXRlcykoYXRvYih0aGlzW24uJGNvbnRlbnRdKSkpLCFlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcih2YXIgdD0wLHI9RTt0PHIubGVuZ3RoO3QrKyl7dmFyIGE9cChyW3RdLDIpLGk9YVswXSxvPWFbMV07aWYoZS5sZW5ndGg+aS5sZW5ndGgmJmkuZXZlcnkoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT1lW3JdfSkpKXt0aGlzLmNvbnRlbnRUeXBlPW87YnJlYWt9fWlmKCF0aGlzLmNvbnRlbnRUeXBlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFl9dmFyIHUsbD1uZXcgQmxvYihbZV0se3R5cGU6dGhpcy5jb250ZW50VHlwZX0pO3N3aXRjaCh0aGlzLmFzcGVjdCl7Y2FzZSJmaXQiOmNhc2UiYWN0dWFsIjpicmVhaztjYXNlImhlaWdodCI6dT17aGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIm5vbmUiOnU9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uid2lkdGgiOnU9e3dpZHRoOiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifX12YXIgZj10aGlzW24uJGdldFBhcmVudF0oKTtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImltZyIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFJbWFnZSJdLHN0eWxlOnUsc3JjOlVSTC5jcmVhdGVPYmplY3RVUkwobCksYWx0OmY/QihmW24uJGdldFBhcmVudF0oKSk6bnVsbH19KX19XSkscn0obi5TdHJpbmdPYmplY3QpLFZlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJpbWFnZUVkaXQiLCEwKSkuZGF0YT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhLFsibGluayIsImVtYmVkIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9zLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShuLlhGQU9iamVjdCksWWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImludGVnZXIiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXBhcnNlSW50KHRoaXNbbi4kY29udGVudF0udHJpbSgpLDEwKTt0aGlzW24uJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKG51bGwhPT10aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksS2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImlzc3VlcnMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmNlcnRpZmljYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiaXRlbXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlZj1lLnJlZnx8IiIsYS5zYXZlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zYXZlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5ib29sZWFuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGVjaW1hbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1PKHRoaXNbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTt0LnB1c2goYVtuLiR0ZXh0XSgpKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfX1dKSxyfShuLlhGQU9iamVjdCk7dC5JdGVtcz1KZTt2YXIgWmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjt5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwia2VlcCIsITApKS5pZD1lLmlkfHwiIjt2YXIgYT1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07cmV0dXJuIG4uaW50YWN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCxhKSxuLm5leHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCxhKSxuLnByZXZpb3VzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLGEpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxRZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3kodGhpcyxyKTt2YXIgYT1bIiIsInllcyIsIm5vIl07cmV0dXJuKG49dC5jYWxsKHRoaXMsRiwia2V5VXNhZ2UiKSkuY3JsU2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jcmxTaWduLGEpLG4uZGF0YUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhRW5jaXBoZXJtZW50LGEpLG4uZGVjaXBoZXJPbmx5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmRlY2lwaGVyT25seSxhKSxuLmRpZ2l0YWxTaWduYXR1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZGlnaXRhbFNpZ25hdHVyZSxhKSxuLmVuY2lwaGVyT25seT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5lbmNpcGhlck9ubHksYSksbi5pZD1lLmlkfHwiIixuLmtleUFncmVlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlBZ3JlZW1lbnQsYSksbi5rZXlDZXJ0U2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlDZXJ0U2lnbixhKSxuLmtleUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlFbmNpcGhlcm1lbnQsYSksbi5ub25SZXB1ZGlhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ub25SZXB1ZGlhdGlvbixhKSxuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxldD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibGluZSIsITApKS5oYW5kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5zbG9wZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5lZGdlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGk9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGM9dGhpcy5lZGdlfHxuZXcgQWUoe30pLHU9Y1tuLiR0b1N0eWxlXSgpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxmPSJ2aXNpYmxlIj09PWMucHJlc2VuY2U/Yy50aGlja25lc3M6MDtsLnN0cm9rZVdpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShmKSxsLnN0cm9rZT11LmNvbG9yO3ZhciBoPSIxMDAlIixkPSIxMDAlIjtpLnc8PWY/KGU9IjUwJSIsdD0wLHI9IjUwJSIsYT0iMTAwJSIsaD1sLnN0cm9rZVdpZHRoKTppLmg8PWY/KGU9MCx0PSI1MCUiLHI9IjEwMCUiLGE9IjUwJSIsZD1sLnN0cm9rZVdpZHRoKToiXFwiPT09dGhpcy5zbG9wZT8oZT0wLHQ9MCxyPSIxMDAlIixhPSIxMDAlIik6KGU9MCx0PSIxMDAlIixyPSIxMDAlIixhPTApO3ZhciBwPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToibGluZSIsYXR0cmlidXRlczp7eG1sbnM6UCx4MTplLHkxOnQseDI6cix5MjphLHN0eWxlOmx9fV0sYXR0cmlidXRlczp7eG1sbnM6UCx3aWR0aDpoLGhlaWdodDpkLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9fX07cmV0dXJuIE0oaSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbcF19KToocC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MocCkpfX1dKSxyfShuLlhGQU9iamVjdCksdHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxpbmVhciIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCIgJDEiKS50b0xvd2VyQ2FzZSgpLHI9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiO3JldHVybiJsaW5lYXItZ3JhZGllbnQoIi5jb25jYXQodCwiLCAiKS5jb25jYXQoZSwiLCAiKS5jb25jYXQociwiKSIpfX1dKSxyfShuLlhGQU9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxvY2tEb2N1bWVudCIpKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09KDAscy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbbi4kY29udGVudF0sWyJhdXRvIiwiMCIsIjEiXSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksbnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsIm1hbmlmZXN0IiwhMCkpLmFjdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpb24sWyJpbmNsdWRlIiwiYWxsIiwiZXhjbHVkZSJdKSxhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEucmVmPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxhdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibWFyZ2luIiwhMCkpLmJvdHRvbUluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuYm90dG9tSW5zZXQsIjAiKSxuLmlkPWUuaWR8fCIiLG4ubGVmdEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGVmdEluc2V0LCIwIiksbi5yaWdodEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmlnaHRJbnNldCwiMCIpLG4udG9wSW5zZXQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS50b3BJbnNldCwiMCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue21hcmdpbjooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50b3BJbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpKyIgIisoMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5ib3R0b21JbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxlZnRJbnNldCl9fX1dKSxyfShuLlhGQU9iamVjdCksaXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1kcCIpKS5pZD1lLmlkfHwiIixuLnBlcm1pc3Npb25zPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDM9PT1lfX0pLG4uc2lnbmF0dXJlVHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaWduYXR1cmVUeXBlLFsiZmlsbGVyIiwiYXV0aG9yIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1lZGl1bSIpKS5pZD1lLmlkfHwiIixuLmltYWdpbmdCQm94PSgwLHMuZ2V0QkJveCkoZS5pbWFnaW5nQkJveCksbi5sb25nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubG9uZyksbi5vcmllbnRhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pLG4uc2hvcnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaG9ydCksbi5zdG9jaz1lLnN0b2NrfHwiIixuLnRyYXlJbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSksbi50cmF5T3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxzdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwibWVzc2FnZSIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxjdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibnVtZXJpY0VkaXQiLCEwKSkuaFNjcm9sbFBvbGljeT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5jb21iPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIikscj10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCksYT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOkIociksImFyaWEtcmVxdWlyZWQiOiExfX07cmV0dXJuIFIocikmJihhLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMCxhLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19XSkscn0obi5YRkFPYmplY3QpLHV0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvY2N1ciIsITApKS5pZD1lLmlkfHwiIixuLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pOiIiLG4ubWF4PSIiIT09ZS5tYXg/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KToiIixuLm1pbj0iIiE9PWUubWluPygwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5taW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSk6IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGNsZWFuLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIGR0fHxlIGluc3RhbmNlb2YgcHQ/MDoxKSwiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBkdHx8ZSBpbnN0YW5jZW9mIHB0Py0xOjE6dGhpcy5taW4pLC0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pLCIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBEdD8xOnRoaXMubWluKX19XSkscn0obi5YRkFPYmplY3QpLGx0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvaWQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxmdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwib2lkcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEub2lkPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxodD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwib3ZlcmZsb3ciKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PXRoaXNbbi4kZ2V0VGVtcGxhdGVSb290XSgpLHI9dFtuLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxhPXRbbi4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksaT10W24uJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW24uJGV4dHJhXT17dGFyZ2V0OnImJnJbMF18fG51bGwsbGVhZGVyOmEmJmFbMF18fG51bGwsdHJhaWxlcjppJiZpWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tuLiRleHRyYV19fV0pLHJ9KG4uWEZBT2JqZWN0KSxkdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicGFnZUFyZWEiLCEwKSkuYmxhbmtPck5vdEJsYW5rPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSksYS5pZD1lLmlkfHwiIixhLmluaXRpYWxOdW1iZXI9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5uYW1lPWUubmFtZXx8IiIsYS5udW1iZXJlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5vZGRPckV2ZW49KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub2RkT3JFdmVuLFsiYW55IiwiZXZlbiIsIm9kZCJdKSxhLnBhZ2VQb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wYWdlUG9zaXRpb24sWyJhbnkiLCJmaXJzdCIsImxhc3QiLCJvbmx5IiwicmVzdCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEubWVkaXVtPW51bGwsYS5vY2N1cj1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbnRlbnRBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZHJhdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNVc2FibGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuLiRleHRyYV0/IXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4Oih0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0sITApfX0se2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLiRleHRyYV19fSx7a2V5Om4uJGdldE5leHRQYWdlLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0pO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW24uJGlzVXNhYmxlXSgpPyh0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZSs9MSx0aGlzKTplW24uJGdldE5leHRQYWdlXSgpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7dmFyIGU9W107dGhpc1tuLiRleHRyYV0uY2hpbGRyZW49ZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7aWYodC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0uc2hvcnQpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5sb25nKSx0aGlzW24uJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9LCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe3ZhciByPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1yLHRoaXNbbi4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gdGhpc1tuLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsInN1YmZvcm0iXSksaW5jbHVkZTohMH0pLHRoaXNbbi4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImNvbnRlbnRBcmVhIl0pLGluY2x1ZGU6ITB9KSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbbi4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1dKSxyfShuLlhGQU9iamVjdCkscHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInBhZ2VTZXQiLCEwKSkuZHVwbGV4SW1wb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZXh0cmFzPW51bGwsYS5vY2N1cj1udWxsLGEucGFnZUFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYWdlU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PU8odGhpcy5wYWdlQXJlYS5jaGlsZHJlbik7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWVbbi4kY2xlYW5QYWdlXSgpfWNhdGNoKGUpe3QuZShlKX1maW5hbGx5e3QuZigpfXZhciByLGE9Tyh0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOylyLnZhbHVlW24uJGNsZWFuUGFnZV0oKX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX19fSx7a2V5Om4uJGlzVXNhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fX0se2tleTpuLiRnZXROZXh0UGFnZSx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX0pLCJvcmRlcmVkT2NjdXJyZW5jZSI9PT10aGlzLnJlbGF0aW9uKXtpZih0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXgrMTx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4Kz0xLHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4XVtuLiRnZXROZXh0UGFnZV0oKTtpZih0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiB0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTEsdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bbi4kZ2V0TmV4dFBhZ2VdKCk7aWYodGhpc1tuLiRpc1VzYWJsZV0oKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTEsdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4PS0xLHRoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleD0tMSx0aGlzW24uJGdldE5leHRQYWdlXSgpO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlIGluc3RhbmNlb2Ygcj9lW24uJGdldE5leHRQYWdlXSgpOih0aGlzW24uJGNsZWFuUGFnZV0oKSx0aGlzW24uJGdldE5leHRQYWdlXSgpKX12YXIgdD10aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFnZU51bWJlcixhPXQlMj09MD8iZXZlbiI6Im9kZCIsaT0wPT09dD8iZmlyc3QiOiJyZXN0IixvPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub2RkT3JFdmVuPT09YSYmZS5wYWdlUG9zaXRpb249PT1pfSkpO3JldHVybiBvfHwoKG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWl9KSkpP286KG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9ufSkpKXx8dGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxndD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFyYSIsITApKS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4ubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIixuLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiIsbi5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiLG4ub3JwaGFucz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnByZXNlcnZlPWUucHJlc2VydmV8fCIiLG4ucmFkaXhPZmZzZXQ9ZS5yYWRpeE9mZnNldD8oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl4T2Zmc2V0LCIwcHQiKToiIixuLnNwYWNlQWJvdmU9ZS5zcGFjZUFib3ZlPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuc3BhY2VBYm92ZSwiMHB0Iik6IiIsbi5zcGFjZUJlbG93PWUuc3BhY2VCZWxvdz8oMCxzLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQmVsb3csIjBwdCIpOiIiLG4udGFiRGVmYXVsdD1lLnRhYkRlZmF1bHQ/KDAscy5nZXRNZWFzdXJlbWVudCkobi50YWJEZWZhdWx0KToiIixuLnRhYlN0b3BzPShlLnRhYlN0b3BzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMj09MT8oMCxzLmdldE1lYXN1cmVtZW50KShlKTplfSkpLG4udGV4dEluZGVudD1lLnRleHRJbmRlbnQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHQiKToiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52QWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudkFsaWduLFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG4ud2lkb3dzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS53aWRvd3MsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5oeXBoZW5hdGlvbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9KDAsby50b1N0eWxlKSh0aGlzLCJoQWxpZ24iKTtyZXR1cm4iIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCkpLCIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ2lnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luUmlnaHQpKSwiIiE9PXRoaXMuc3BhY2VBYm92ZSYmKGUucGFkZGluZ1RvcD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUFib3ZlKSksIiIhPT10aGlzLnNwYWNlQmVsb3cmJihlLnBhZGRpbmdCb3R0b209KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdykpLCIiIT09dGhpcy50ZXh0SW5kZW50JiYoZS50ZXh0SW5kZW50PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRleHRJbmRlbnQpLCgwLG8uZml4VGV4dEluZGVudCkoZSkpLHRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKSwiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSksdGhpcy50YWJTdG9wcy5sZW5ndGgsdGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW24uJHRvU3R5bGVdKCkpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFzc3dvcmRFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx5dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGF0dGVybiIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbImNyb3NzSGF0Y2giLCJjcm9zc0RpYWdvbmFsIiwiZGlhZ29uYWxMZWZ0IiwiZGlhZ29uYWxSaWdodCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lP2Vbbi4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7dmFyIHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiLHI9InJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLGE9IiIuY29uY2F0KGUsIiwiKS5jb25jYXQoZSwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCgxMCwicHgiKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlImNyb3NzSGF0Y2giOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpICIpLmNvbmNhdChyLCIodG8gcmlnaHQsIikuY29uY2F0KGEsIikiKTtjYXNlImNyb3NzRGlhZ29uYWwiOnJldHVybiIiLmNvbmNhdChyLCIoNDVkZWcsIikuY29uY2F0KGEsIikgIikuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImRpYWdvbmFsTGVmdCI6cmV0dXJuIiIuY29uY2F0KHIsIig0NWRlZywiKS5jb25jYXQoYSwiKSIpO2Nhc2UiZGlhZ29uYWxSaWdodCI6cmV0dXJuIiIuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImhvcml6b250YWwiOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpIik7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuIiIuY29uY2F0KHIsIih0byByaWdodCwiKS5jb25jYXQoYSwiKSIpfXJldHVybiIifX1dKSxyfShuLlhGQU9iamVjdCksbXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInBpY3R1cmUiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxidD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicHJvdG8iLCEwKSkuYXBwZWFyYW5jZUZpbHRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyYz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5hc3Npc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5iYXJjb2RlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYmluZEl0ZW1zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYm9va2VuZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5ib3JkZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVhaz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJ1dHRvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhbGN1bGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhcHRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jZXJ0aWZpY2F0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNlcnRpZmljYXRlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNoZWNrQnV0dG9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY2hvaWNlTGlzdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbG9yPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY29tYj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb250ZW50QXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvcm5lcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWZhdWx0VWk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZXNjPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNvZGluZ3M9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdGlvbk1ldGhvZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmVuY3J5cHRpb25NZXRob2RzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4ZWN1dGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leHRyYXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWVsZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpbGw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWx0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZvbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mb3JtYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5oYW5kbGVyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaHlwaGVuYXRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pc3N1ZXJzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5rZWVwPW5ldyBuLlhGQU9iamVjdEFycmF5LGEua2V5VXNhZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5saW5lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubGluZWFyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubG9ja0RvY3VtZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEubWFuaWZlc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tYXJnaW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZHA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZWRpdW09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZXNzYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubnVtZXJpY0VkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vY2N1cj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZHM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vdmVyZmxvdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhZ2VBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGFnZVNldD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXNzd29yZEVkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGljdHVyZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJhZGlhbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbnM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWN0YW5nbGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWY9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zY3JpcHQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmF0dXJlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmluZz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNvbGlkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3BlYWs9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdGlwcGxlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE5zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3VibWl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRleHRFZGl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWVTdGFtcD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRvb2xUaXA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnVpPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudmFsaWRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS52YWx1ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnZhcmlhYmxlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksd3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInJhZGlhbCIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbbi4kdG9TdHlsZV0oKToiIzAwMDAwMCIscj0idG9FZGdlIj09PXRoaXMudHlwZT8iIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0KToiIi5jb25jYXQodCwiLCIpLmNvbmNhdChlKTtyZXR1cm4icmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsICIuY29uY2F0KHIsIikiKX19XSkscn0obi5YRkFPYmplY3QpLGt0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWFzb24iKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxTdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVhc29ucyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEucmVhc29uPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx4dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVjdGFuZ2xlIiwhMCkpLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5jb3JuZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZmlsbD1udWxsLGF9cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuZWRnZS5jaGlsZHJlblswXTpuZXcgQWUoe30pLHQ9ZVtuLiR0b1N0eWxlXSgpLHI9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZT9PYmplY3QuYXNzaWduKHIsdGhpcy5maWxsW24uJHRvU3R5bGVdKCkpOnIuZmlsbD0idHJhbnNwYXJlbnQiLHIuc3Ryb2tlV2lkdGg9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCksci5zdHJva2U9dC5jb2xvcjt2YXIgYT0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBnZSh7fSkpW24uJHRvU3R5bGVdKCksaT17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOlAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDphLnJhZGl1cyxyeTphLnJhZGl1cyxzdHlsZTpyfX1dLGF0dHJpYnV0ZXM6e3htbG5zOlAsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtyZXR1cm4gTSh0aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCkpP3MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk6KGkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuSFRNTFJlc3VsdC5zdWNjZXNzKGkpKX19XSkscn0obi5YRkFPYmplY3QpLE90PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWYiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxBdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2NyaXB0IikpLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIixuLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxDdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2V0UHJvcGVydHkiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ucmVmPWUucmVmfHwiIixuLnRhcmdldD1lLnRhcmdldHx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuU2V0UHJvcGVydHk9Q3Q7dmFyIEZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduRGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSksbi5yZWY9ZS5yZWZ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5maWx0ZXI9bnVsbCxuLm1hbmlmZXN0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFB0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduYXR1cmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJQREYxLjMiLCJQREYxLjYiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLmZpbHRlcj1udWxsLG4ubWFuaWZlc3Q9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxUdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic2lnbmluZyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzb2xpZCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT9lW24uJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1dKSxyfShuLlhGQU9iamVjdCksRXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInNwZWFrIikpLmRpc2FibGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRpc2FibGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmlvcml0eT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKSxuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxqdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3RpcHBsZSIsITApKS5pZD1lLmlkfHwiIixuLnJhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0xMDB9fSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIGMuVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1dKSxyfShuLlhGQU9iamVjdCksTXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInN1YmZvcm0iLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWxsb3dNYWNybz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dNYWNybyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiItMSI9PT1lPy0xOigwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpfSkpLGEuaD1lLmg/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIixhLmhBbGlnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pLGEuaWQ9ZS5pZHx8IiIsYS5sYXlvdXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKSxhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5tZXJnZU1vZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWVyZ2VNb2RlLFsiY29uc3VtZURhdGEiLCJtYXRjaFRlbXBsYXRlIl0pLGEubWluSD0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpLGEubWluVz0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpLGEubmFtZT1lLm5hbWV8fCIiLGEucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksYS5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxhLnJlc3RvcmVTdGF0ZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5yZXN0b3JlU3RhdGUsWyJtYW51YWwiLCJhdXRvIl0pLGEuc2NvcGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJuYW1lIiwibm9uZSJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5iaW5kPW51bGwsYS5ib29rZW5kPW51bGwsYS5ib3JkZXI9bnVsbCxhLmJyZWFrPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5vY2N1cj1udWxsLGEub3ZlcmZsb3c9bnVsbCxhLnBhZ2VTZXQ9bnVsbCxhLnBhcmE9bnVsbCxhLnRyYXZlcnNhbD1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhcmlhYmxlcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kcmF3PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucHJvdG89bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJmb3JtU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRnZXRTdWJmb3JtUGFyZW50LHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBfdD9lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk6ZX19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRpc1RoZXJlTW9yZVdpZHRoLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW24uJGdldFBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpfX0se2tleTpuLiRnZXRDb250YWluZWRDaGlsZHJlbix2YWx1ZTpTKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChMKHRoaXMpLCJ0MCIsMSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKX0se2tleTpuLiRmbHVzaEhUTUwsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9fSx7a2V5Om4uJGFkZEhUTUwsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLmFkZEhUTUwpKHRoaXMsZSx0KX19LHtrZXk6bi4kZ2V0QXZhaWxhYmxlU3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iil8fHRoaXMua2VlcCYmIm5vbmUiIT09dGhpcy5rZWVwLmludGFjdD8odGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMSwhMSk6IShlLmxheW91dCYmZS5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtuLiRleHRyYV0ubnVtYmVySW5MaW5lfHwodGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMCwwKSkpfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSx0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe3ZhciB0PW5ldyByZSh7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmFmdGVyLHRhcmdldDp0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO3Rbbi4kZ2xvYmFsRGF0YV09dGhpc1tuLiRnbG9iYWxEYXRhXSx0aGlzW24uJGFwcGVuZENoaWxkXSh0KSx0aGlzLmJyZWFrQWZ0ZXIucHVzaCh0KX1pZigiYXV0byIhPT10aGlzLmJyZWFrLmJlZm9yZXx8IiIhPT10aGlzLmJyZWFrLmJlZm9yZVRhcmdldCl7dmFyIHI9bmV3IG5lKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtyW24uJGdsb2JhbERhdGFdPXRoaXNbbi4kZ2xvYmFsRGF0YV0sdGhpc1tuLiRhcHBlbmRDaGlsZF0ociksdGhpcy5icmVha0JlZm9yZS5wdXNoKHIpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7dmFyIGE9bmV3IGh0KHt0YXJnZXQ6dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCxsZWFkZXI6dGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcix0cmFpbGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dUcmFpbGVyfSk7YVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGEpLHRoaXMub3ZlcmZsb3cucHVzaChhKX10aGlzW24uJHJlbW92ZUNoaWxkXSh0aGlzLmJyZWFrKSx0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2lmKCh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD4xfHx0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPjEpJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIGJyZWFrQmVmb3JlIG9yIGJyZWFrQWZ0ZXIgaW4gc3ViZm9ybXM6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgdT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKEgodSkpcmV0dXJuIHMuSFRNTFJlc3VsdC5icmVha05vZGUodSl9aWYodGhpc1tuLiRleHRyYV0mJnRoaXNbbi4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcilyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZOygwLG8uZml4RGltZW5zaW9ucykodGhpcyk7dmFyIGw9W10sZj17aWQ6dGhpc1tuLiR1aWRdLGNsYXNzOltdfTsoMCxvLnNldEFjY2VzcykodGhpcyxmLmNsYXNzKSx0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCkpLE9iamVjdC5hc3NpZ24odGhpc1tuLiRleHRyYV0se2NoaWxkcmVuOmwsbGluZTpudWxsLGF0dHJpYnV0ZXM6ZixhdHRlbXB0OjAsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7dmFyIGg9dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKCksZD1oW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscD10aGlzW24uJGlzU3BsaXR0YWJsZV0oKTtpZihwfHwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIGc9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciB2PXRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7QXJyYXkuaXNBcnJheSh2KSYmdi5sZW5ndGg+MCYmKHRoaXNbbi4kZXh0cmFdLmNvbHVtbldpZHRocz12LHRoaXNbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW49MCl9dmFyIHk9KDAsby50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxtPVsieGZhU3ViZm9ybSJdLGI9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aWYoYiYmbS5wdXNoKGIpLGYuc3R5bGU9eSxmLmNsYXNzPW0sdGhpcy5uYW1lJiYoZi54ZmFOYW1lPXRoaXMubmFtZSksdGhpcy5vdmVyZmxvdyl7dmFyIHc9dGhpcy5vdmVyZmxvd1tuLiRnZXRFeHRyYV0oKTt3LmFkZExlYWRlciYmKHcuYWRkTGVhZGVyPSExLHEodGhpcyx3LmxlYWRlcixlKSl9dGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGs9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsUz1rPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PFM7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtrJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgeD10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmcsaW5jbHVkZTohMH0pO2lmKHguc3VjY2VzcylicmVhaztpZih4LmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHg7aWYoayYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiFoW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9UzticmVha319aWYodGhpc1tuLiRwb3BQYXJhXSgpLHB8fFgodGhpcyksaFtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWQsdGhpc1tuLiRleHRyYV0uYXR0ZW1wdD09PVMpcmV0dXJuIHRoaXMub3ZlcmZsb3cmJih0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPXRoaXMub3ZlcmZsb3cpLHB8fGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtpZih0aGlzLm92ZXJmbG93KXt2YXIgTz10aGlzLm92ZXJmbG93W24uJGdldEV4dHJhXSgpO08uYWRkVHJhaWxlciYmKE8uYWRkVHJhaWxlcj0hMSxxKHRoaXMsTy50cmFpbGVyLGUpKX12YXIgQT0wLEM9MDt0aGlzLm1hcmdpbiYmKEE9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsQz10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIEY9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0ud2lkdGgrQSx0aGlzLnd8fDApLFA9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0uaGVpZ2h0K0MsdGhpcy5ofHwwKSxUPVt0aGlzLngsdGhpcy55LEYsUF07aWYoIiI9PT10aGlzLncmJih5LndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShGKSksIiI9PT10aGlzLmgmJih5LmhlaWdodD0oMCxvLm1lYXN1cmVUb1N0cmluZykoUCkpLCgiMHB4Ij09PXkud2lkdGh8fCIwcHgiPT09eS5oZWlnaHQpJiYwPT09bC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgST17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmYsY2hpbGRyZW46bH07RCh0aGlzLGYpO3ZhciBFPXMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxJKSxUKTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgaj10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoSChqKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyPUUscy5IVE1MUmVzdWx0LmJyZWFrTm9kZShqKX1yZXR1cm4gZGVsZXRlIHRoaXNbbi4kZXh0cmFdLEV9fV0pLHJ9KG4uWEZBT2JqZWN0KSxfdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViZm9ybVNldCIsITApKS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2tlbmQ9bnVsbCxhLmJyZWFrPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm9jY3VyPW51bGwsYS5vdmVyZmxvdz1udWxsLGEuYnJlYWtBZnRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQmVmb3JlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGdldFN1YmZvcm1QYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7IShlIGluc3RhbmNlb2YgTXQpOyllPWVbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlfX0se2tleTpuLiRpc0JpbmRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fV0pLHJ9KG4uWEZBT2JqZWN0KSxMdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3ViamVjdEROIikpLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09bmV3IE1hcCh0aGlzW24uJGNvbnRlbnRdLnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKSxlfSkpKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxSdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViamVjdEROcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuc3ViamVjdEROPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxOdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3VibWl0IiwhMCkpLmVtYmVkUERGPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5mb3JtYXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pLGEuaWQ9ZS5pZHx8IiIsYS50YXJnZXQ9ZS50YXJnZXR8fCIiLGEudGV4dEVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiIsYS5lbmNyeXB0PW51bGwsYS5lbmNyeXB0RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwidGVtcGxhdGUiLCEwKSkuYmFzZVByb2ZpbGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKSxhLmV4dHJhcz1udWxsLGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsYy53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKSx0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXNbbi4kdGFiSW5kZXhdPTVlM319LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNlYXJjaE5vZGUsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbbi4kaWRzXS5nZXQoZS5zbGljZSgxKSldOigwLGYuc2VhcmNoTm9kZSkodGhpcyx0LGUsITAsITApfX0se2tleTpuLiR0b1BhZ2VzLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixhLGksbyx1LGwsZixkLHAsZyx2LHksbSxiLHcsaz10aGlzO3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSkpO2Nhc2UgMjp0aGlzW24uJGV4dHJhXT17b3ZlcmZsb3dOb2RlOm51bGwsZmlyc3RVbnNwbGl0dGFibGU6bnVsbCxjdXJyZW50Q29udGVudEFyZWE6bnVsbCxjdXJyZW50UGFnZUFyZWE6bnVsbCxub0xheW91dEZhaWx1cmU6ITEscGFnZU51bWJlcjoxLHBhZ2VQb3NpdGlvbjoiZmlyc3QiLG9kZE9yRXZlbjoib2RkIixibGFua09yTm90Qmxhbms6Im5vbkJsYW5rIixwYXJhU3RhY2s6W119LCh0PXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXSkucGFnZVNldFtuLiRjbGVhblBhZ2VdKCkscj10LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4sYT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX0saT1udWxsLG89bnVsbCx1PW51bGwsdC5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTE/KG89dC5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZ0LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xPyhvPXQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LmJyZWFrJiZ0LmJyZWFrLmJlZm9yZVRhcmdldD8obz10LmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpOnQuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJnQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhayYmdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCYmKG89dC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpLG8mJihsPXRoaXNbbi4kc2VhcmNoTm9kZV0odSxvW24uJGdldFBhcmVudF0oKSkpaW5zdGFuY2VvZiBkdCYmKGk9bCxvW24uJGV4dHJhXT17fSksaXx8KGk9clswXSksaVtuLiRleHRyYV09e251bWJlck9mVXNlOjF9LChmPWlbbi4kZ2V0UGFyZW50XSgpKVtuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4OmYucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKSxwYWdlU2V0SW5kZXg6MH0scD1udWxsLGc9bnVsbCx2PSEwLHk9MCxtPTAsYj1TKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciByLG8scyx1LGwsZixoLGIsdyx4LE8sQSxDLEYsUDtyZXR1cm4gUygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHYpe2UubmV4dD03O2JyZWFrfWlmKGEuY2hpbGRyZW4ucG9wKCksMyE9Kyt5KXtlLm5leHQ9NTticmVha31yZXR1cm4oMCxjLndhcm4pKCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuIiksZS5hYnJ1cHQoInJldHVybiIse3Y6YX0pO2Nhc2UgNTplLm5leHQ9ODticmVhaztjYXNlIDc6eT0wO2Nhc2UgODpkPW51bGwsa1tuLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPWkscj1pW24uJHRvSFRNTF0oKS5odG1sLGEuY2hpbGRyZW4ucHVzaChyKSxwJiYoa1tuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwLHIuY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oaVtuLiRleHRyYV0uc3BhY2UpLmh0bWwpLHA9bnVsbCksZyYmKGtbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCxyLmNoaWxkcmVuLnB1c2goZ1tuLiR0b0hUTUxdKGlbbi4kZXh0cmFdLnNwYWNlKS5odG1sKSxnPW51bGwpLG89aS5jb250ZW50QXJlYS5jaGlsZHJlbixzPXIuY2hpbGRyZW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKCJ4ZmFDb250ZW50YXJlYSIpfSkpLHY9ITEsa1tuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbCxrW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEsdT1mdW5jdGlvbihlKXt2YXIgcj10W24uJGZsdXNoSFRNTF0oKTtyJiYodj12fHxyLmNoaWxkcmVuJiYwIT09ci5jaGlsZHJlbi5sZW5ndGgsc1tlXS5jaGlsZHJlbi5wdXNoKHIpKX0sbD1tLGY9by5sZW5ndGg7Y2FzZSAyMTppZighKGw8Zikpe2UubmV4dD01NjticmVha31pZihoPWtbbi4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1vW2xdLGI9e3dpZHRoOmgudyxoZWlnaHQ6aC5ofSxtPTAscCYmKHNbbF0uY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oYikuaHRtbCkscD1udWxsKSxnJiYoc1tsXS5jaGlsZHJlbi5wdXNoKGdbbi4kdG9IVE1MXShiKS5odG1sKSxnPW51bGwpLCEodz10W24uJHRvSFRNTF0oYikpLnN1Y2Nlc3Mpe2UubmV4dD0zMTticmVha31yZXR1cm4gdy5odG1sPyh2PXZ8fHcuaHRtbC5jaGlsZHJlbiYmMCE9PXcuaHRtbC5jaGlsZHJlbi5sZW5ndGgsc1tsXS5jaGlsZHJlbi5wdXNoKHcuaHRtbCkpOiF2JiZhLmNoaWxkcmVuLmxlbmd0aD4xJiZhLmNoaWxkcmVuLnBvcCgpLGUuYWJydXB0KCJyZXR1cm4iLHt2OmF9KTtjYXNlIDMxOmlmKCF3LmlzQnJlYWsoKSl7ZS5uZXh0PTQwO2JyZWFrfWlmKHg9dy5icmVha05vZGUsdShsKSwiYXV0byIhPT14LnRhcmdldFR5cGUpe2UubmV4dD0zNjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw1Myk7Y2FzZSAzNjpyZXR1cm4geC5sZWFkZXImJihwPShwPWtbbi4kc2VhcmNoTm9kZV0oeC5sZWFkZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9wWzBdOm51bGwpLHgudHJhaWxlciYmKGc9KGc9a1tuLiRzZWFyY2hOb2RlXSh4LnRyYWlsZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9nWzBdOm51bGwpLCJwYWdlQXJlYSI9PT14LnRhcmdldFR5cGU/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LGw9MS8wKTp4W24uJGV4dHJhXS50YXJnZXQ/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LG09eFtuLiRleHRyYV0uaW5kZXgrMSxsPTEvMCk6bD14W24uJGV4dHJhXS5pbmRleCxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDQwOmlmKCFrW24uJGV4dHJhXS5vdmVyZmxvd05vZGUpe2UubmV4dD01MjticmVha31yZXR1cm4gTz1rW24uJGV4dHJhXS5vdmVyZmxvd05vZGUsa1tuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPW51bGwsQT1PW24uJGdldEV4dHJhXSgpLEM9QS50YXJnZXQsQS5hZGRMZWFkZXI9bnVsbCE9PUEubGVhZGVyLEEuYWRkVHJhaWxlcj1udWxsIT09QS50cmFpbGVyLHUobCksRj1sLGw9MS8wLEMgaW5zdGFuY2VvZiBkdD9kPUM6QyBpbnN0YW5jZW9mIHBlJiYoLTEhPT0oUD1vLmluZGV4T2YoQykpP1A+Rj9sPVAtMTptPVA6KGQ9Q1tuLiRnZXRQYXJlbnRdKCksbT1kLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoQykpKSxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDUyOnUobCk7Y2FzZSA1MzpsKyssZS5uZXh0PTIxO2JyZWFrO2Nhc2UgNTY6cmV0dXJuIGtbbi4kZXh0cmFdLnBhZ2VOdW1iZXIrPTEsZCYmKGRbbi4kaXNVc2FibGVdKCk/ZFtuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE6ZD1udWxsKSxpPWR8fGlbbi4kZ2V0TmV4dFBhZ2VdKCksZS5uZXh0PTYxLG51bGw7Y2FzZSA2MTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpO2Nhc2UgMjI6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChiKCksInQwIiwyNCk7Y2FzZSAyNDppZigib2JqZWN0IiE9PWgodz1lLnQwKSl7ZS5uZXh0PTI3O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix3LnYpO2Nhc2UgMjc6ZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMjk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfV0pLHJ9KG4uWEZBT2JqZWN0KTt0LlRlbXBsYXRlPUR0O3ZhciBCdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dCIpKS5pZD1lLmlkfHwiIixuLm1heENoYXJzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRhY2NlcHRXaGl0ZXNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/KHRoaXNbbi4kY29udGVudF09ZSwhMCk6KCgwLGMud2FybikoIlhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAiLmNvbmNhdChlW24uJG5vZGVOYW1lXSwiLiIpKSwhMSl9fSx7a2V5Om4uJG9uVGV4dCx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzW24uJGNvbnRlbnRdaW5zdGFuY2VvZiBuLlhGQU9iamVjdHx8ZChrKHIucHJvdG90eXBlKSxuLiRvblRleHQsdGhpcykuY2FsbCh0aGlzLGUpfX0se2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpeyJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS5yZXBsYWNlKC9cclxuL2csIlxuIikpfX0se2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI5XHUyMDI4XG5dLykucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0JiZlLnB1c2godCksZX0pLFtdKS5qb2luKCJcbiIpOnRoaXNbbi4kY29udGVudF1bbi4kdGV4dF0oKX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSl7dmFyIHQ9VSh0aGlzW24uJGNvbnRlbnRdKS5odG1sO3JldHVybiB0aGlzW24uJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKT8odC5uYW1lPSJkaXYiLHQuY2hpbGRyZW49W10sdGhpc1tuLiRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvW1x1MjAyOFxuXS8pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSksZX0pLFtdKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNoaWxkcmVuLnB1c2goe25hbWU6InAiLGNoaWxkcmVuOmV9KX0pKSk6L1tcdTIwMjhcbl0vLnRlc3QodGhpc1tuLiRjb250ZW50XSkmJih0Lm5hbWU9ImRpdiIsdC5jaGlsZHJlbj1bXSx0aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI4XG5dLykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTplfSx7bmFtZToiYnIifSl9KSkpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfXJldHVybiB0aGlzW24uJGNvbnRlbnRdW24uJHRvSFRNTF0oZSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCk7dC5UZXh0PUJ0O3ZhciBVdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dEVkaXQiLCEwKSkuYWxsb3dSaWNoVGV4dD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5oU2Nyb2xsUG9saWN5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSksbi5pZD1lLmlkfHwiIixuLm11bHRpTGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubXVsdGlMaW5lLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnZTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksYT10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPWEgaW5zdGFuY2VvZiBPZT8xOjApLHQ9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOmFbbi4kZGF0YV0mJmFbbi4kZGF0YV1bbi4kdWlkXXx8YVtuLiR1aWRdLGZpZWxkSWQ6YVtuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6ciwiYXJpYS1sYWJlbCI6QihhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTp7bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGRhdGFJZDphW24uJGRhdGFdJiZhW24uJGRhdGFdW24uJHVpZF18fGFbbi4kdWlkXSxmaWVsZElkOmFbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnIsImFyaWEtbGFiZWwiOkIoYSksImFyaWEtcmVxdWlyZWQiOiExfX0sUihhKSYmKHQuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHQuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt0XX0pfX1dKSxyfShuLlhGQU9iamVjdCksJHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpO3RoaXNbbi4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFUodGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLlN0cmluZ09iamVjdCksWHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWVTdGFtcCIpKS5pZD1lLmlkfHwiIixuLnNlcnZlcj1lLnNlcnZlcnx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksSHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRvb2xUaXAiKSkuaWQ9ZS5pZHx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCkscXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInRyYXZlcnNhbCIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5leHRyYXM9bnVsbCxhLnRyYXZlcnNlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxHdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidHJhdmVyc2UiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5vcGVyYXRpb249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKSxuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZXJhdGlvbn19LHtrZXk6bi4kaXNUcmFuc3BhcmVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX1dKSxyfShuLlhGQU9iamVjdCksenQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInVpIiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ucGljdHVyZT1udWxsLG4uYmFyY29kZT1udWxsLG4uYnV0dG9uPW51bGwsbi5jaGVja0J1dHRvbj1udWxsLG4uY2hvaWNlTGlzdD1udWxsLG4uZGF0ZVRpbWVFZGl0PW51bGwsbi5kZWZhdWx0VWk9bnVsbCxuLmltYWdlRWRpdD1udWxsLG4ubnVtZXJpY0VkaXQ9bnVsbCxuLnBhc3N3b3JkRWRpdD1udWxsLG4uc2lnbmF0dXJlPW51bGwsbi50ZXh0RWRpdD1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXNbbi4kZXh0cmFdKXt2YXIgZSx0PU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3IodC5zKCk7IShlPXQubigpKS5kb25lOyl7dmFyIHI9ZS52YWx1ZTtpZigiZXh0cmFzIiE9PXImJiJwaWN0dXJlIiE9PXIpe3ZhciBhPXRoaXNbcl07aWYoYSBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXJldHVybiB0aGlzW24uJGV4dHJhXT1hLGF9fX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX10aGlzW24uJGV4dHJhXT1udWxsfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/dFtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpLFd0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWxpZGF0ZSIsITApKS5mb3JtYXRUZXN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKSxuLmlkPWUuaWR8fCIiLG4ubnVsbFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKSxuLnNjcmlwdFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ubWVzc2FnZT1udWxsLG4ucGljdHVyZT1udWxsLG4uc2NyaXB0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWx1ZSIsITApKS5pZD1lLmlkfHwiIixuLm92ZXJyaWRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5hcmM9bnVsbCxuLmJvb2xlYW49bnVsbCxuLmRhdGU9bnVsbCxuLmRhdGVUaW1lPW51bGwsbi5kZWNpbWFsPW51bGwsbi5leERhdGE9bnVsbCxuLmZsb2F0PW51bGwsbi5pbWFnZT1udWxsLG4uaW50ZWdlcj1udWxsLG4ubGluZT1udWxsLG4ucmVjdGFuZ2xlPW51bGwsbi50ZXh0PW51bGwsbi50aW1lPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBCZSYmdC51aSYmdC51aS5pbWFnZUVkaXQpcmV0dXJuIHRoaXMuaW1hZ2V8fCh0aGlzLmltYWdlPW5ldyBXZSh7fSksdGhpc1tuLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSkpLHZvaWQodGhpcy5pbWFnZVtuLiRjb250ZW50XT1lW24uJGNvbnRlbnRdKTt2YXIgcj1lW24uJG5vZGVOYW1lXTtpZihudWxsPT09dGhpc1tyXSl7dmFyIGEsaT1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBvPWEudmFsdWUscz10aGlzW29dO3MgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCYmKHRoaXNbb109bnVsbCx0aGlzW24uJHJlbW92ZUNoaWxkXShzKSl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXNbZVtuLiRub2RlTmFtZV1dPWUsdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSl9ZWxzZSB0aGlzW3JdW24uJGNvbnRlbnRdPWVbbi4kY29udGVudF19KSl9LHtrZXk6bi4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbbi4kY29udGVudF0/dGhpcy5leERhdGFbbi4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW24uJGNvbnRlbnRdW24uJHRleHRdKCkudHJpbSgpO3ZhciBlLHQ9TyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KXt2YXIgcj1lLnZhbHVlO2lmKCJpbWFnZSIhPT1yKXt2YXIgYT10aGlzW3JdO2lmKGEgaW5zdGFuY2VvZiBuLlhGQU9iamVjdClyZXR1cm4oYVtuLiRjb250ZW50XXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfX19Y2F0Y2goZSl7dC5lKGUpfWZpbmFsbHl7dC5mKCl9cmV0dXJuIG51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIGE9dGhpc1t0LnZhbHVlXTtpZihhIGluc3RhbmNlb2Ygbi5YRkFPYmplY3QpcmV0dXJuIGFbbi4kdG9IVE1MXShlKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpO3QuVmFsdWU9VnQ7dmFyIFl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJ2YXJpYWJsZXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW50ZWdlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm1hbmlmZXN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2NyaXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19XSkscn0obi5YRkFPYmplY3QpLEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3kodGhpcyxlKX1yZXR1cm4gdihlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgYT1lW3RdKHIpO3JldHVybiBhW24uJHNldFNldEF0dHJpYnV0ZXNdKHIpLGF9fX0se2tleToiYXBwZWFyYW5jZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHKGUpfX0se2tleToiYXJjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHooZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFcoZSl9fSx7a2V5OiJhc3Npc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImJhcmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWShlKX19LHtrZXk6ImJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImJpbmRJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKKGUpfX0se2tleToiYm9va2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiYm9vbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRKGUpfX0se2tleToiYm9yZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiYnJlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJicmVha0FmdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiYnJlYWtCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbmUoZSl9fSx7a2V5OiJidXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYWUoZSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJjYXB0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG9lKGUpfX0se2tleToiY2VydGlmaWNhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgc2UoZSl9fSx7a2V5OiJjZXJ0aWZpY2F0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJjaGVja0J1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1ZShlKX19LHtrZXk6ImNob2ljZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJjb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImNvbWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGRlKGUpfX0se2tleToiY29udGVudEFyZWEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJjb3JuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ2UoZSl9fSx7a2V5OiJkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZlKGUpfX0se2tleToiZGF0ZVRpbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJkYXRlVGltZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbWUoZSl9fSx7a2V5OiJkZWNpbWFsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGJlKGUpfX0se2tleToiZGVmYXVsdFVpIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdlKGUpfX0se2tleToiZGVzYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeGUoZSl9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9lKGUpfX0se2tleToiZWRnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IENlKGUpfX0se2tleToiZW5jb2RpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZlKGUpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQZShlKX19LHtrZXk6ImVuY3J5cHREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJZShlKX19LHtrZXk6ImVuY3J5cHRpb25NZXRob2QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRWUoZSl9fSx7a2V5OiJlbmNyeXB0aW9uTWV0aG9kcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6ImV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToiZXhEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF9lKGUpfX0se2tleToiZXhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTGUoZSl9fSx7a2V5OiJleGNsR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJleGVjdXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToiZXh0cmFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToiZmllbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmUoZSl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToiZmlsdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToiZmxvYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWGUoZSl9fSx7a2V5OiJmb250Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEhlKGUpfX0se2tleToiZm9ybWF0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHFlKGUpfX0se2tleToiaGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHZShlKX19LHtrZXk6Imh5cGhlbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToiaW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgV2UoZSl9fSx7a2V5OiJpbWFnZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVmUoZSl9fSx7a2V5OiJpbnRlZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFllKGUpfX0se2tleToiaXNzdWVycyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBLZShlKX19LHtrZXk6Iml0ZW1zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEplKGUpfX0se2tleToia2VlcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaZShlKX19LHtrZXk6ImtleVVzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFFlKGUpfX0se2tleToibGluZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBldChlKX19LHtrZXk6ImxpbmVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0dChlKX19LHtrZXk6ImxvY2tEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBydChlKX19LHtrZXk6Im1hbmlmZXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG50KGUpfX0se2tleToibWFyZ2luIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToibWRwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToibWVkaXVtIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG90KGUpfX0se2tleToibWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6Im51bWVyaWNFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToib2NjdXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJvaWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJvaWRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZ0KGUpfX0se2tleToib3ZlcmZsb3ciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaHQoZSl9fSx7a2V5OiJwYWdlQXJlYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InBhZ2VTZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJwYXJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGd0KGUpfX0se2tleToicGFzc3dvcmRFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZ0KGUpfX0se2tleToicGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5dChlKX19LHtrZXk6InBpY3R1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJwcm90byIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBidChlKX19LHtrZXk6InJhZGlhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3dChlKX19LHtrZXk6InJlYXNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrdChlKX19LHtrZXk6InJlYXNvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJyZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJyZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgT3QoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQXQoZSl9fSx7a2V5OiJzZXRQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDdChlKX19LHtrZXk6InNpZ25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZ0KGUpfX0se2tleToic2lnbmF0dXJlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToic2lnbmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUdChlKX19LHtrZXk6InNvbGlkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToic3BlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRXQoZSl9fSx7a2V5OiJzdGlwcGxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGp0KGUpfX0se2tleToic3ViZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNdChlKX19LHtrZXk6InN1YmZvcm1TZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJzdWJqZWN0RE4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTHQoZSl9fSx7a2V5OiJzdWJqZWN0RE5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToic3VibWl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE50KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ0ZXh0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJ0KGUpfX0se2tleToidGV4dEVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVXQoZSl9fSx7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToidGltZVN0YW1wIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFh0KGUpfX0se2tleToidG9vbFRpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InRyYXZlcnNhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InRyYXZlcnNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEd0KGUpfX0se2tleToidWkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgenQoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19LHtrZXk6InZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFZ0KGUpfX0se2tleToidmFyaWFibGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFl0KGUpfX1dKSxlfSgpO3QuVGVtcGxhdGVOYW1lc3BhY2U9S3R9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hZGRIVE1MPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lW24uJGV4dHJhXSx1PXMuYXZhaWxhYmxlU3BhY2UsbD1pKHIsNCksZj1sWzBdLGg9bFsxXSxkPWxbMl0scD1sWzNdO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6cy53aWR0aD1NYXRoLm1heChzLndpZHRoLGYrZCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQsaCtwKSxzLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cy5saW5lJiYxIT09cy5hdHRlbXB0fHwocy5saW5lPWMoZSxbXSkscy5jaGlsZHJlbi5wdXNoKHMubGluZSkscy5udW1iZXJJbkxpbmU9MCkscy5udW1iZXJJbkxpbmUrPTEscy5saW5lLmNoaWxkcmVuLnB1c2godCksMD09PXMuYXR0ZW1wdD8ocy5jdXJyZW50V2lkdGgrPWQscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQscy5wcmV2SGVpZ2h0K3ApKToocy5jdXJyZW50V2lkdGg9ZCxzLnByZXZIZWlnaHQ9cy5oZWlnaHQscy5oZWlnaHQrPXAscy5hdHRlbXB0PTApLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aCxzLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpzLmNoaWxkcmVuLnB1c2godCkscy53aWR0aCs9ZCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxwKTt2YXIgZyx2PSgwLGEubWVhc3VyZVRvU3RyaW5nKShzLmhlaWdodCkseT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9byhlKSkpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19KHMuY2hpbGRyZW4pO3RyeXtmb3IoeS5zKCk7IShnPXkubigpKS5kb25lOylnLnZhbHVlLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PXZ9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9YnJlYWs7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cy53aWR0aD1NYXRoLm1pbih1LndpZHRoLE1hdGgubWF4KHMud2lkdGgsZCkpLHMuaGVpZ2h0Kz1wLHMuY2hpbGRyZW4ucHVzaCh0KX19LHQuY2hlY2tEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO3ZhciByPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKSxhPXJbbi4kZXh0cmFdJiZyW24uJGV4dHJhXS5hdHRlbXB0fHwwLG89aShmdW5jdGlvbihlKXt2YXIgdCxyLG49IiI9PT1lLnc/TmFOOmUudyxhPSIiPT09ZS5oP05hTjplLmgsaT0wLG89MDtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOmk9bi8yLG89YTticmVhaztjYXNlImJvdHRvbUxlZnQiOmk9MCxvPWE7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6aT1uLG89YTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6aT1uLzIsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjppPTAsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6aT1uLG89YS8yO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjppPW4vMixvPTA7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6aT1uLG89MH1zd2l0Y2goZS5yb3RhdGV8fDApe2Nhc2UgMDp0PS1pLHI9LW87YnJlYWs7Y2FzZSA5MDp0PS1vLHI9aTt2YXIgcz1bYSwtbl07bj1zWzBdLGE9c1sxXTticmVhaztjYXNlIDE4MDp0PWkscj1vO3ZhciBjPVstbiwtYV07bj1jWzBdLGE9Y1sxXTticmVhaztjYXNlIDI3MDp0PW8scj0taTt2YXIgdT1bLWEsbl07bj11WzBdLGE9dVsxXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxuKSxlLnkrcitNYXRoLm1pbigwLGEpLE1hdGguYWJzKG4pLE1hdGguYWJzKGEpXX0oZSksNCkscz1vWzFdLGM9b1syXSx1PW9bM107c3dpdGNoKHIubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWE/ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fDA9PT1yW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIj09PWUud3x8TWF0aC5yb3VuZChjLXQud2lkdGgpPD0yfHwhcltuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKSYmdC5oZWlnaHQ+MjtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm4hIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVtuLiRpc1NwbGl0dGFibGVdKCk/KCIiPT09ZS53fHxNYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fCFyW24uJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQodS10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodStzLXQuaGVpZ2h0KTw9Mnx8dStzPmVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWEuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodS10LmhlaWdodCk8PTI7ZGVmYXVsdDpyZXR1cm4hMH19LHQuZmx1c2hIVE1MPWZ1bmN0aW9uKGUpe2lmKCFlW24uJGV4dHJhXSlyZXR1cm4gbnVsbDt2YXIgdD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmVbbi4kZXh0cmFdLmF0dHJpYnV0ZXMsY2hpbGRyZW46ZVtuLiRleHRyYV0uY2hpbGRyZW59O2lmKGVbbi4kZXh0cmFdLmZhaWxpbmdOb2RlKXt2YXIgcj1lW24uJGV4dHJhXS5mYWlsaW5nTm9kZVtuLiRmbHVzaEhUTUxdKCk7ciYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goYyhlLFtyXSkpOnQuY2hpbGRyZW4ucHVzaChyKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9LHQuZ2V0QXZhaWxhYmxlU3BhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuLiRleHRyYV0uYXZhaWxhYmxlU3BhY2Uscj1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGE9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtuLiRleHRyYV0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1hLWVbbi4kZXh0cmFdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtci1lW24uJGV4dHJhXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtuLiRleHRyYV0uY29sdW1uV2lkdGhzLnNsaWNlKGVbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSkpLGhlaWdodDp0LmhlaWdodC1hfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19O3ZhciBuPXIoMjA2KSxhPXIoMjEzKTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fG8oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29tcHV0ZUJib3g9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhO2lmKCIiIT09ZS53JiYiIiE9PWUuaClhPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIXIpcmV0dXJuIG51bGw7dmFyIGk9ZS53O2lmKCIiPT09aSl7aWYoMD09PWUubWF4Vyl7dmFyIG89ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PW8ubGF5b3V0JiYiIiE9PW8udz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLHIud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD11KGkpfXZhciBzPWUuaDtpZigiIj09PXMpe2lmKDA9PT1lLm1heEgpe3ZhciBjPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtzPSJwb3NpdGlvbiI9PT1jLmxheW91dCYmIiIhPT1jLmg/MDplLm1pbkh9ZWxzZSBzPU1hdGgubWluKGUubWF4SCxyLmhlaWdodCk7dC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD11KHMpfWE9W2UueCxlLnksaSxzXX1yZXR1cm4gYX0sdC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5hdHRyaWJ1dGVzLGE9ci5zdHlsZSxpPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhV3JhcHBlciJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOltdfTtpZihyLmNsYXNzLnB1c2goInhmYVdyYXBwZWQiKSxlLmJvcmRlcil7dmFyIG8scyxjPWUuYm9yZGVyW24uJGV4dHJhXSx1PWMud2lkdGhzLGw9Yy5pbnNldHMsZj1sWzBdLGQ9bFszXSxwPWxbMF0rbFsyXSxnPWxbMV0rbFszXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpmLT11WzBdLzIsZC09dVszXS8yLG89ImNhbGMoMTAwJSArICIuY29uY2F0KCh1WzFdK3VbM10pLzItZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQoKHVbMF0rdVsyXSkvMi1wLCJweCkiKTticmVhaztjYXNlImxlZnQiOmYtPXVbMF0sZC09dVszXSxvPSJjYWxjKDEwMCUgKyAiLmNvbmNhdCh1WzFdK3VbM10tZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQodVswXSt1WzJdLXAsInB4KSIpO2JyZWFrO2Nhc2UicmlnaHQiOm89Zz8iY2FsYygxMDAlIC0gIi5jb25jYXQoZywicHgpIik6IjEwMCUiLHM9cD8iY2FsYygxMDAlIC0gIi5jb25jYXQocCwicHgpIik6IjEwMCUifXZhciB2PVsieGZhQm9yZGVyIl07aChlLmJvcmRlcikmJnYucHVzaCgieGZhUHJpbnRPbmx5Iik7Zm9yKHZhciB5PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOnYsc3R5bGU6e3RvcDoiIi5jb25jYXQoZiwicHgiKSxsZWZ0OiIiLmNvbmNhdChkLCJweCIpLHdpZHRoOm8saGVpZ2h0OnN9fSxjaGlsZHJlbjpbXX0sbT0wLGI9WyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXTttPGIubGVuZ3RoO20rKyl7dmFyIHc9YlttXTt2b2lkIDAhPT1hW3ddJiYoeS5hdHRyaWJ1dGVzLnN0eWxlW3ddPWFbd10sZGVsZXRlIGFbd10pfWkuY2hpbGRyZW4ucHVzaCh5LHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcih2YXIgaz0wLFM9WyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdO2s8Uy5sZW5ndGg7aysrKXt2YXIgeD1TW2tdO3ZvaWQgMCE9PWFbeF0mJihpLmF0dHJpYnV0ZXMuc3R5bGVbeF09YVt4XSxkZWxldGUgYVt4XSl9cmV0dXJuImFic29sdXRlIj09PWEucG9zaXRpb24/aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI6aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZGVsZXRlIGEucG9zaXRpb24sYS5hbGlnblNlbGYmJihpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPWEuYWxpZ25TZWxmLGRlbGV0ZSBhLmFsaWduU2VsZiksaX0sdC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZih0LmxheW91dCYmdC5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgcixhPXRbbi4kZXh0cmFdLGk9ZS5jb2xTcGFuO3I9LTE9PT1pP2EuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKTphLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4sYS5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksaXNOYU4ocil8fChlLnc9cil9dC5sYXlvdXQmJiJwb3NpdGlvbiIhPT10LmxheW91dCYmKGUueD1lLnk9MCksInRhYmxlIj09PWUubGF5b3V0JiYiIj09PWUudyYmQXJyYXkuaXNBcnJheShlLmNvbHVtbldpZHRocykmJihlLnc9ZS5jb2x1bW5XaWR0aHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSl9LHQuZml4VGV4dEluZGVudD1mdW5jdGlvbihlKXt2YXIgdD0oMCxpLmdldE1lYXN1cmVtZW50KShlLnRleHRJbmRlbnQsIjBweCIpO2lmKCEodD49MCkpe3ZhciByPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iiksbj0oMCxpLmdldE1lYXN1cmVtZW50KShlW3JdLCIwcHgiKTtlW3JdPSIiLmNvbmNhdChuLXQsInB4Iil9fSx0LmZpeFVSTD1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUsbnVsbCx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO3JldHVybiB0P3QuaHJlZjpudWxsfSx0LmlzUHJpbnRPbmx5PWgsdC5sYXlvdXRDbGFzcz1mdW5jdGlvbihlKXtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UicG9zaXRpb24iOmRlZmF1bHQ6cmV0dXJuInhmYVBvc2l0aW9uIjtjYXNlImxyLXRiIjpyZXR1cm4ieGZhTHJUYiI7Y2FzZSJybC1yb3ciOnJldHVybiJ4ZmFSbFJvdyI7Y2FzZSJybC10YiI6cmV0dXJuInhmYVJsVGIiO2Nhc2Uicm93IjpyZXR1cm4ieGZhUm93IjtjYXNlInRhYmxlIjpyZXR1cm4ieGZhVGFibGUiO2Nhc2UidGIiOnJldHVybiJ4ZmFUYiJ9fSx0LmxheW91dE5vZGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsLGE9bnVsbCxpPSExO2lmKCghZS53fHwhZS5oKSYmZS52YWx1ZSl7dmFyIG89MCxzPTA7ZS5tYXJnaW4mJihvPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0LHM9ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBjPW51bGwsdT1udWxsO2UucGFyYSYmKHU9T2JqZWN0LmNyZWF0ZShudWxsKSxjPSIiPT09ZS5wYXJhLmxpbmVIZWlnaHQ/bnVsbDplLnBhcmEubGluZUhlaWdodCx1LnRvcD0iIj09PWUucGFyYS5zcGFjZUFib3ZlPzA6ZS5wYXJhLnNwYWNlQWJvdmUsdS5ib3R0b209IiI9PT1lLnBhcmEuc3BhY2VCZWxvdz8wOmUucGFyYS5zcGFjZUJlbG93LHUubGVmdD0iIj09PWUucGFyYS5tYXJnaW5MZWZ0PzA6ZS5wYXJhLm1hcmdpbkxlZnQsdS5yaWdodD0iIj09PWUucGFyYS5tYXJnaW5SaWdodD8wOmUucGFyYS5tYXJnaW5SaWdodCk7dmFyIGw9ZS5mb250O2lmKCFsKWZvcih2YXIgaD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxkPWVbbi4kZ2V0UGFyZW50XSgpO2QmJmQhPT1oOyl7aWYoZC5mb250KXtsPWQuZm9udDticmVha31kPWRbbi4kZ2V0UGFyZW50XSgpfXZhciBwPShlLnd8fHQud2lkdGgpLW8sZz1lW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI7aWYoZS52YWx1ZS5leERhdGEmJmUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdJiYidGV4dC9odG1sIj09PWUudmFsdWUuZXhEYXRhLmNvbnRlbnRUeXBlKXt2YXIgdj1mKGUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdLGwsdSxjLGcscCk7YT12LndpZHRoLHI9di5oZWlnaHQsaT12LmlzQnJva2VufWVsc2V7dmFyIHk9ZS52YWx1ZVtuLiR0ZXh0XSgpO2lmKHkpe3ZhciBtPWYoeSxsLHUsYyxnLHApO2E9bS53aWR0aCxyPW0uaGVpZ2h0LGk9bS5pc0Jyb2tlbn19bnVsbD09PWF8fGUud3x8KGErPW8pLG51bGw9PT1yfHxlLmh8fChyKz1zKX1yZXR1cm57dzphLGg6cixpc0Jyb2tlbjppfX0sdC5tZWFzdXJlVG9TdHJpbmc9dSx0LnNldEFjY2Vzcz1mdW5jdGlvbihlLHQpe3N3aXRjaChlLmFjY2Vzcyl7Y2FzZSJub25JbnRlcmFjdGl2ZSI6dC5wdXNoKCJ4ZmFOb25JbnRlcmFjdGl2ZSIpO2JyZWFrO2Nhc2UicmVhZE9ubHkiOnQucHVzaCgieGZhUmVhZE9ubHkiKTticmVhaztjYXNlInByb3RlY3RlZCI6dC5wdXNoKCJ4ZmFEaXNhYmxlZCIpfX0sdC5zZXRGb250RmFtaWx5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHIpe3ZhciBhPSgwLGkuc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpO24uZm9udEZhbWlseT0nIicuY29uY2F0KGEsJyInKTt2YXIgcz1yLmZpbmQoYSk7aWYocyl7dmFyIGM9cy5yZWd1bGFyLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHk7YyE9PWEmJihuLmZvbnRGYW1pbHk9JyInLmNvbmNhdChjLCciJykpO3ZhciB1PWQodCk7aWYodSYmIiIhPT11LmxpbmVIZWlnaHQpcmV0dXJuO2lmKG4ubGluZUhlaWdodClyZXR1cm47dmFyIGw9KDAsby5zZWxlY3RGb250KShlLHMpO2wmJihuLmxpbmVIZWlnaHQ9TWF0aC5tYXgoMS4yLGwubGluZUhlaWdodCkpfX1lbHNlIGRlbGV0ZSBuLmZvbnRGYW1pbHl9LHQuc2V0TWluTWF4RGltZW5zaW9ucz1mdW5jdGlvbihlLHQpeyJwb3NpdGlvbiI9PT1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0JiYoZS5taW5XPjAmJih0Lm1pbldpZHRoPXUoZS5taW5XKSksZS5tYXhXPjAmJih0Lm1heFdpZHRoPXUoZS5tYXhXKSksZS5taW5IPjAmJih0Lm1pbkhlaWdodD11KGUubWluSCkpLGUubWF4SD4wJiYodC5tYXhIZWlnaHQ9dShlLm1heEgpKSl9LHQuc2V0UGFyYT1mdW5jdGlvbihlLHQscil7aWYoci5hdHRyaWJ1dGVzLmNsYXNzJiZyLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSl7dCYmKCIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKSwiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKSk7dmFyIGE9ZChlKTtpZihhKXt2YXIgaT1yLmF0dHJpYnV0ZXMuc3R5bGU7c3dpdGNoKGkuZGlzcGxheT0iZmxleCIsaS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGEudkFsaWduKXtjYXNlInRvcCI6aS5qdXN0aWZ5Q29udGVudD0ic3RhcnQiO2JyZWFrO2Nhc2UiYm90dG9tIjppLmp1c3RpZnlDb250ZW50PSJlbmQiO2JyZWFrO2Nhc2UibWlkZGxlIjppLmp1c3RpZnlDb250ZW50PSJjZW50ZXIifWZvcih2YXIgbz1hW24uJHRvU3R5bGVdKCkscz0wLHU9T2JqZWN0LmVudHJpZXMobyk7czx1Lmxlbmd0aDtzKyspe3ZhciBsPSgyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHA9dVtzXSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7Zm9yKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShwKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsMik6dm9pZCAwfX0ocCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksZj1sWzBdLGg9bFsxXTtmIGluIGl8fChpW2ZdPWgpfX19dmFyIHB9LHQudG9TdHlsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkocj4xP3ItMTowKSxvPTE7bzxyO28rKylpW28tMV09YXJndW1lbnRzW29dO2Zvcih2YXIgcz0wLGM9aTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXSxmPWVbdV07aWYobnVsbCE9PWYpaWYobC5oYXNPd25Qcm9wZXJ0eSh1KSlsW3VdKGUsdCk7ZWxzZSBpZihmIGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBoPWZbbi4kdG9TdHlsZV0oKTtoP09iamVjdC5hc3NpZ24odCxoKTooMCxhLndhcm4pKCIoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICIuY29uY2F0KHUsIiBub3QgaW1wbGVtZW50ZWQgeWV0IikpfX1yZXR1cm4gdH07dmFyIG49cigyMDYpLGE9cigyKSxpPXIoMjA3KSxvPXIoMjE0KSxzPXIoMjE1KTtmdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/IjBweCI6TnVtYmVyLmlzSW50ZWdlcihlKT8iIi5jb25jYXQoZSwicHgiKToiIi5jb25jYXQoZS50b0ZpeGVkKDIpLCJweCIpfXZhciBsPXthbmNob3JUeXBlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKHImJighci5sYXlvdXR8fCJwb3NpdGlvbiI9PT1yLmxheW91dCkpc3dpdGNoKCJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKSxlLmFuY2hvclR5cGUpe2Nhc2UiYm90dG9tQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC0xMDAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkiO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLDApIjticmVhaztjYXNlInRvcFJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwwKSJ9fSxkaW1lbnNpb25zOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGE9ZS53LGk9ZS5oO2lmKHIubGF5b3V0JiZyLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciBvLHM9cltuLiRleHRyYV0sYz1lLmNvbFNwYW47LTE9PT1jPyhvPXMuY29sdW1uV2lkdGhzLnNsaWNlKHMuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxzLmN1cnJlbnRDb2x1bW49MCk6KG89cy5jb2x1bW5XaWR0aHMuc2xpY2Uocy5jdXJyZW50Q29sdW1uLHMuY3VycmVudENvbHVtbitjKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLHMuY3VycmVudENvbHVtbj0ocy5jdXJyZW50Q29sdW1uK2UuY29sU3Bhbiklcy5jb2x1bW5XaWR0aHMubGVuZ3RoKSxpc05hTihvKXx8KGE9ZS53PW8pfXQud2lkdGg9IiIhPT1hP3UoYSk6ImF1dG8iLHQuaGVpZ2h0PSIiIT09aT91KGkpOiJhdXRvIn0scG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk7ciYmci5sYXlvdXQmJiJwb3NpdGlvbiIhPT1yLmxheW91dHx8KHQucG9zaXRpb249ImFic29sdXRlIix0LmxlZnQ9dShlLngpLHQudG9wPXUoZS55KSl9LHJvdGF0ZTpmdW5jdGlvbihlLHQpe2Uucm90YXRlJiYoInRyYW5zZm9ybSJpbiB0fHwodC50cmFuc2Zvcm09IiIpLHQudHJhbnNmb3JtKz0icm90YXRlKC0iLmNvbmNhdChlLnJvdGF0ZSwiZGVnKSIpLHQudHJhbnNmb3JtT3JpZ2luPSJ0b3AgbGVmdCIpfSxwcmVzZW5jZTpmdW5jdGlvbihlLHQpe3N3aXRjaChlLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6dC52aXNpYmlsaXR5PSJoaWRkZW4iO2JyZWFrO2Nhc2UiaGlkZGVuIjpjYXNlImluYWN0aXZlIjp0LmRpc3BsYXk9Im5vbmUifX0saEFsaWduOmZ1bmN0aW9uKGUsdCl7aWYoInBhcmEiPT09ZVtuLiRub2RlTmFtZV0pc3dpdGNoKGUuaEFsaWduKXtjYXNlImp1c3RpZnlBbGwiOnQudGV4dEFsaWduPSJqdXN0aWZ5LWFsbCI7YnJlYWs7Y2FzZSJyYWRpeCI6dC50ZXh0QWxpZ249ImxlZnQiO2JyZWFrO2RlZmF1bHQ6dC50ZXh0QWxpZ249ZS5oQWxpZ259ZWxzZSBzd2l0Y2goZS5oQWxpZ24pe2Nhc2UibGVmdCI6dC5hbGlnblNlbGY9InN0YXJ0IjticmVhaztjYXNlImNlbnRlciI6dC5hbGlnblNlbGY9ImNlbnRlciI7YnJlYWs7Y2FzZSJyaWdodCI6dC5hbGlnblNlbGY9ImVuZCJ9fSxtYXJnaW46ZnVuY3Rpb24oZSx0KXtlLm1hcmdpbiYmKHQubWFyZ2luPWUubWFyZ2luW24uJHRvU3R5bGVdKCkubWFyZ2luKX19O2Z1bmN0aW9uIGYoZSx0LHIsYSxpLG8pe3ZhciBjPW5ldyBzLlRleHRNZWFzdXJlKHQscixhLGkpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9jLmFkZFN0cmluZyhlKTplW24uJHB1c2hHbHlwaHNdKGMpLGMuY29tcHV0ZShvKX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRGaW5kZXI9dm9pZCAwLHQuZ2V0TWV0cmljcz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9bnVsbDtpZihlKXt2YXIgaT0oMCxhLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKSxvPWVbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGkpO3I9ZChlLG8pfWlmKCFyKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O3ZhciBzPWUuc2l6ZXx8MTAsYz1yLmxpbmVIZWlnaHQ/TWF0aC5tYXgodD8wOjEuMixyLmxpbmVIZWlnaHQpOjEuMix1PXZvaWQgMD09PXIubGluZUdhcD8uMjpyLmxpbmVHYXA7cmV0dXJue2xpbmVIZWlnaHQ6YypzLGxpbmVHYXA6dSpzLGxpbmVOb0dhcDpNYXRoLm1heCgxLGMtdSkqc319LHQuc2VsZWN0Rm9udD1kO3ZhciBuPXIoMjA2KSxhPXIoMjA3KSxpPXIoMik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXUoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1vKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09byhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PW8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmZvbnRzPW5ldyBNYXAsdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMud2FybmVkPW5ldyBTZXQsdGhpcy5kZWZhdWx0Rm9udD1udWxsLHRoaXMuYWRkKHQpfXZhciB0LHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsbj1jKGUpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGE9dC52YWx1ZTt0aGlzLmFkZFBkZkZvbnQoYSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBpLG89Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWU7cy5yZWd1bGFyfHwocy5yZWd1bGFyPXMuaXRhbGljfHxzLmJvbGR8fHMuYm9sZGl0YWxpYyl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfWlmKHImJjAhPT1yLnNpemUpe3ZhciB1LGw9dGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpLGY9YyhyKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7dGhpcy5mb250cy5zZXQoaCxsKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9fX19LHtrZXk6ImFkZFBkZkZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY3NzRm9udEluZm8scj10LmZvbnRGYW1pbHksbj10aGlzLmZvbnRzLmdldChyKTtufHwobj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZm9udHMuc2V0KHIsbiksdGhpcy5kZWZhdWx0Rm9udHx8KHRoaXMuZGVmYXVsdEZvbnQ9bikpO3ZhciBhPSIiLGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP2E9aT49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjppPj03MDAmJihhPSJib2xkIiksYXx8KChlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWUmJmUucHNOYW1lLmluY2x1ZGVzKCJCb2xkIikpJiYoYT0iYm9sZCIpLChlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lJiYoZS5wc05hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLnBzTmFtZS5lbmRzV2l0aCgiSXQiKSkpJiYoYSs9Iml0YWxpYyIpKSxhfHwoYT0icmVndWxhciIpLG5bYV09ZX19LHtrZXk6ImdldERlZmF1bHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9fSx7a2V5OiJmaW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLHI9dGhpcy5mb250cy5nZXQoZSl8fHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpcmV0dXJuIHI7dmFyIG49Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpLGE9ZS5yZXBsYWNlKG4sIiIpO2lmKHI9dGhpcy5mb250cy5nZXQoYSkpcmV0dXJuIHRoaXMuY2FjaGUuc2V0KGUscikscjthPWEudG9Mb3dlckNhc2UoKTt2YXIgbyx1PVtdLGw9Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihsLnMoKTshKG89bC5uKCkpLmRvbmU7KXt2YXIgZj1zKG8udmFsdWUsMiksaD1mWzBdLGQ9ZlsxXTtoLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goZCl9fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfWlmKDA9PT11Lmxlbmd0aCl7dmFyIHAsZz1jKHRoaXMuZm9udHMuZW50cmllcygpKTt0cnl7Zm9yKGcucygpOyEocD1nLm4oKSkuZG9uZTspe3ZhciB2PXMocC52YWx1ZSwyKVsxXTt2LnJlZ3VsYXIubmFtZSYmdi5yZWd1bGFyLm5hbWUucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYSkmJnUucHVzaCh2KX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9fWlmKDA9PT11Lmxlbmd0aCl7YT1hLnJlcGxhY2UoL3BzbXR8bXQvZ2ksIiIpO3ZhciB5LG09Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj1zKHkudmFsdWUsMiksdz1iWzBdLGs9YlsxXTt3LnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goayl9fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfX1pZigwPT09dS5sZW5ndGgpe3ZhciBTLHg9Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7Ty5yZWd1bGFyLm5hbWUmJk8ucmVndWxhci5uYW1lLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goTyl9fWNhdGNoKGUpe3guZShlKX1maW5hbGx5e3guZigpfX1yZXR1cm4gdS5sZW5ndGg+PTE/KDEhPT11Lmxlbmd0aCYmdCYmKDAsaS53YXJuKSgiWEZBIC0gVG9vIG1hbnkgY2hvaWNlcyB0byBndWVzcyB0aGUgY29ycmVjdCBmb250OiAiLmNvbmNhdChlKSksdGhpcy5jYWNoZS5zZXQoZSx1WzBdKSx1WzBdKToodCYmIXRoaXMud2FybmVkLmhhcyhlKSYmKHRoaXMud2FybmVkLmFkZChlKSwoMCxpLndhcm4pKCJYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogIi5jb25jYXQoZSkpKSxudWxsKX19XSxyJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiJpdGFsaWMiPT09ZS5wb3N0dXJlPyJib2xkIj09PWUud2VpZ2h0P3QuYm9sZGl0YWxpYzp0Lml0YWxpYzoiYm9sZCI9PT1lLndlaWdodD90LmJvbGQ6dC5yZWd1bGFyfXQuRm9udEZpbmRlcj1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciBuPXIoMjE0KTtmdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBpKGUpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxpKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8cyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1pKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsYSxpKXtpZih1KHRoaXMsZSksdGhpcy5saW5lSGVpZ2h0PWEsdGhpcy5wYXJhTWFyZ2luPXJ8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH0sIXQpe3ZhciBzPW8odGhpcy5kZWZhdWx0Rm9udChpKSwyKTtyZXR1cm4gdGhpcy5wZGZGb250PXNbMF0sdm9pZCh0aGlzLnhmYUZvbnQ9c1sxXSl9dGhpcy54ZmFGb250PXt0eXBlZmFjZTp0LnR5cGVmYWNlLHBvc3R1cmU6dC5wb3N0dXJlLHdlaWdodDp0LndlaWdodCxzaXplOnQuc2l6ZSxsZXR0ZXJTcGFjaW5nOnQubGV0dGVyU3BhY2luZ307dmFyIGM9aS5maW5kKHQudHlwZWZhY2UpO2lmKCFjKXt2YXIgbD1vKHRoaXMuZGVmYXVsdEZvbnQoaSksMik7cmV0dXJuIHRoaXMucGRmRm9udD1sWzBdLHZvaWQodGhpcy54ZmFGb250PWxbMV0pfWlmKHRoaXMucGRmRm9udD0oMCxuLnNlbGVjdEZvbnQpKHQsYyksIXRoaXMucGRmRm9udCl7dmFyIGY9byh0aGlzLmRlZmF1bHRGb250KGkpLDIpO3RoaXMucGRmRm9udD1mWzBdLHRoaXMueGZhRm9udD1mWzFdfX1yZXR1cm4gZihlLFt7a2V5OiJkZWZhdWx0Rm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodCYmdC5yZWd1bGFyKXt2YXIgcj10LnJlZ3VsYXI7cmV0dXJuW3Ise3R5cGVmYWNlOnIuY3NzRm9udEluZm8uZm9udEZhbWlseSxwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfXJldHVybltudWxsLHt0eXBlZmFjZToiQ291cmllciIscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX19XSksZX0oKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixhKXt1KHRoaXMsZSksdGhpcy5mb250RmluZGVyPWEsdGhpcy5zdGFjaz1bbmV3IGgodCxyLG4sYSldfXJldHVybiBmKGUsW3trZXk6InB1c2hEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMuc3RhY2suYXQoLTEpLGE9MCxpPVsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXTthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtlW29dfHwoZVtvXT1uLnhmYUZvbnRbb10pfWZvcih2YXIgcz0wLGM9WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXTtpc05hTih0W3VdKSYmKHRbdV09bi5wYXJhTWFyZ2luW3VdKX12YXIgbD1uZXcgaChlLHQscnx8bi5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bC5wZGZGb250fHwobC5wZGZGb250PW4ucGRmRm9udCksdGhpcy5zdGFjay5wdXNoKGwpfX0se2tleToicG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0YWNrLnBvcCgpfX0se2tleToidG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fV0pLGV9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7dSh0aGlzLGUpLHRoaXMuZ2x5cGhzPVtdLHRoaXMuZm9udFNlbGVjdG9yPW5ldyBkKHQscixuLGEpLHRoaXMuZXh0cmFIZWlnaHQ9MH1yZXR1cm4gZihlLFt7a2V5OiJwdXNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxyKX19LHtrZXk6InBvcEZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9fSx7a2V5OiJhZGRQYXJhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219fSx7a2V5OiJhZGRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxyPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7dmFyIG4saT10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxvPXQucGRmRm9udCxzPW8ubGluZUhlaWdodHx8MS4yLGM9dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIscykqcix1PXMtKHZvaWQgMD09PW8ubGluZUdhcD8uMjpvLmxpbmVHYXApLGw9TWF0aC5tYXgoMSx1KSpyLGY9ci8xZTMsaD1vLmRlZmF1bHRXaWR0aHx8by5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGgsZD1hKGUuc3BsaXQoL1tcdTIwMjlcbl0vKSk7dHJ5e2ZvcihkLnMoKTshKG49ZC5uKCkpLmRvbmU7KXt2YXIgcCxnPW4udmFsdWUsdj1vLmVuY29kZVN0cmluZyhnKS5qb2luKCIiKSx5PWEoby5jaGFyc1RvR2x5cGhzKHYpKTt0cnl7Zm9yKHkucygpOyEocD15Lm4oKSkuZG9uZTspe3ZhciBtPXAudmFsdWUsYj1tLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW2IqZitpLGMsbCxtLnVuaWNvZGUsITFdKX19Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtkLmUoZSl9ZmluYWxseXtkLmYoKX10aGlzLmdseXBocy5wb3AoKX1lbHNle3ZhciB3LGs9YShlLnNwbGl0KC9bXHUyMDI5XG5dLykpO3RyeXtmb3Ioay5zKCk7ISh3PWsubigpKS5kb25lOyl7dmFyIFMseD1hKHcudmFsdWUuc3BsaXQoIiIpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7dGhpcy5nbHlwaHMucHVzaChbciwxLjIqcixyLE8sITFdKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtrLmUoZSl9ZmluYWxseXtrLmYoKX10aGlzLmdseXBocy5wb3AoKX19fX0se2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLHI9MCxuPTAsYT0wLGk9MCxzPTAsYz0hMSx1PSEwLGw9MCxmPXRoaXMuZ2x5cGhzLmxlbmd0aDtsPGY7bCsrKXt2YXIgaD1vKHRoaXMuZ2x5cGhzW2xdLDUpLGQ9aFswXSxwPWhbMV0sZz1oWzJdLHY9IiAiPT09aFszXSx5PXU/ZzpwO2hbNF0/KG49TWF0aC5tYXgobixpKSxpPTAsYSs9cyxzPXksdD0tMSxyPTAsdT0hMSk6dj9pK2Q+ZT8obj1NYXRoLm1heChuLGkpLGk9MCxhKz1zLHM9eSx0PS0xLHI9MCxjPSEwLHU9ITEpOihzPU1hdGgubWF4KHkscykscj1pLGkrPWQsdD1sKTppK2Q+ZT8oYSs9cyxzPXksLTEhPT10PyhsPXQsbj1NYXRoLm1heChuLHIpLGk9MCx0PS0xLHI9MCk6KG49TWF0aC5tYXgobixpKSxpPWQpLGM9ITAsdT0hMSk6KGkrPWQscz1NYXRoLm1heCh5LHMpKX1yZXR1cm57d2lkdGg6MS4wMioobj1NYXRoLm1heChuLGkpKSxoZWlnaHQ6YSs9cyt0aGlzLmV4dHJhSGVpZ2h0LGlzQnJva2VuOmN9fX1dKSxlfSgpO3QuVGV4dE1lYXN1cmU9cH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFIYW5kbGVyPXZvaWQgMDt2YXIgbj1yKDIwNik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT1yLHRoaXMuZGF0YXNldD10LmRhdGFzZXRzfHxudWxsfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W1stMSx0aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCldXTt0Lmxlbmd0aD4wOyl7dmFyIHI9dC5hdCgtMSksYT1vKHIsMikscz1hWzBdLGM9YVsxXTtpZihzKzEhPT1jLmxlbmd0aCl7dmFyIHU9Y1srK3JbMF1dLGw9ZS5nZXQodVtuLiR1aWRdKTtpZihsKXVbbi4kc2V0VmFsdWVdKGwpO2Vsc2V7dmFyIGYsaD1pKHVbbi4kZ2V0QXR0cmlidXRlc10oKS52YWx1ZXMoKSk7dHJ5e2ZvcihoLnMoKTshKGY9aC5uKCkpLmRvbmU7KXt2YXIgZD1mLnZhbHVlLHA9ZS5nZXQoZFtuLiR1aWRdKTtpZihwKXtkW24uJHNldFZhbHVlXShwKTticmVha319fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX12YXIgZz11W24uJGdldENoaWxkcmVuXSgpO2cubGVuZ3RoPjAmJnQucHVzaChbLTEsZ10pfWVsc2UgdC5wb3AoKX12YXIgdj1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldCl7dmFyIHksbT1pKHRoaXMuZGF0YXNldFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj15LnZhbHVlOyJkYXRhIiE9PWJbbi4kbm9kZU5hbWVdJiZiW24uJHRvU3RyaW5nXSh2KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9fXJldHVybiB0aGlzLmRhdGFbbi4kdG9TdHJpbmddKHYpLHYucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iiksdi5qb2luKCIiKX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkRhdGFIYW5kbGVyPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhGQVBhcnNlcj12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigxOTUpLG89cigyMTgpLHM9cigyKTtmdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGgoZSx0KX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZoKGUsdCl9KHYsZSk7dmFyIHQscixsLHAsZz0obD12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1kKGwpO2lmKHApe3ZhciByPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwoZT1nLmNhbGwodGhpcykpLl9idWlsZGVyPW5ldyBvLkJ1aWxkZXIodCksZS5fc3RhY2s9W10sZS5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fSxlLl9pZHM9bmV3IE1hcCxlLl9jdXJyZW50PWUuX2J1aWxkZXIuYnVpbGRSb290KGUuX2lkcyksZS5fZXJyb3JDb2RlPWkuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IsZS5fd2hpdGVSZWdleD0vXlxzKyQvLGUuX25ic3BzPS9ceGEwKy9nLGUuX3JpY2hUZXh0PXIsZX1yZXR1cm4gdD12LChyPVt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wYXJzZVhtbChlKSx0aGlzLl9lcnJvckNvZGU9PT1pLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXJldHVybiB0aGlzLl9jdXJyZW50W2EuJGZpbmFsaXplXSgpLHRoaXMuX2N1cnJlbnQuZWxlbWVudH19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodGhpcy5fbmJzcHMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKDEpKyIgIn0pKSx0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFthLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLnRyaW0oKSl9fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50W2EuJG9uVGV4dF0oZSl9fSx7a2V5OiJfbWtBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49bnVsbCxpPW51bGwsbz1PYmplY3QuY3JlYXRlKHt9KSxjPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXt2YXIgbD1yLnZhbHVlLGY9bC5uYW1lLGg9bC52YWx1ZTtpZigieG1sbnMiPT09ZiluPygwLHMud2FybikoIlhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwiLmNvbmNhdCh0LCI+IikpOm49aDtlbHNlIGlmKGYuc3RhcnRzV2l0aCgieG1sbnM6Iikpe3ZhciBkPWYuc3Vic3RyaW5nKDYpO2l8fChpPVtdKSxpLnB1c2goe3ByZWZpeDpkLHZhbHVlOmh9KX1lbHNle3ZhciBwPWYuaW5kZXhPZigiOiIpO2lmKC0xPT09cClvW2ZdPWg7ZWxzZXt2YXIgZz1vW2EuJG5zQXR0cmlidXRlc107Z3x8KGc9b1thLiRuc0F0dHJpYnV0ZXNdPU9iamVjdC5jcmVhdGUobnVsbCkpO3ZhciB2PVtmLnNsaWNlKDAscCksZi5zbGljZShwKzEpXSx5PXZbMF0sbT12WzFdLGI9Z1t5XTtifHwoYj1nW3ldPU9iamVjdC5jcmVhdGUobnVsbCkpLGJbbV09aH19fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm5bbixpLG9dfX0se2tleToiX2dldE5hbWVBbmRQcmVmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1yP1tlLG51bGxdOltlLnN1YnN0cmluZyhyKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxyKV19fSx7a2V5OiJvbkJlZ2luRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWModGhpcy5fbWtBdHRyaWJ1dGVzKHQsZSksMyksaT1uWzBdLG89blsxXSxzPW5bMl0sdT1jKHRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSwyKSxsPXVbMF0sZj11WzFdLGg9dGhpcy5fYnVpbGRlci5idWlsZCh7bnNQcmVmaXg6ZixuYW1lOmwsYXR0cmlidXRlczpzLG5hbWVzcGFjZTppLHByZWZpeGVzOm99KTtpZihoW2EuJGdsb2JhbERhdGFdPXRoaXMuX2dsb2JhbERhdGEscilyZXR1cm4gaFthLiRmaW5hbGl6ZV0oKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKGgpJiZoW2EuJHNldElkXSh0aGlzLl9pZHMpLHZvaWQgaFthLiRjbGVhbl0odGhpcy5fYnVpbGRlcik7dGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KSx0aGlzLl9jdXJyZW50PWh9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnQ7aWYodFthLiRpc0NEQVRBWG1sXSgpJiYic3RyaW5nIj09dHlwZW9mIHRbYS4kY29udGVudF0pe3ZhciByPW5ldyB2O3IuX2dsb2JhbERhdGE9dGhpcy5fZ2xvYmFsRGF0YTt2YXIgbj1yLnBhcnNlKHRbYS4kY29udGVudF0pO3RbYS4kY29udGVudF09bnVsbCx0W2EuJG9uQ2hpbGRdKG4pfXRbYS4kZmluYWxpemVdKCksdGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKHQpJiZ0W2EuJHNldElkXSh0aGlzLl9pZHMpLHRbYS4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpfX0se2tleToib25FcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZXJyb3JDb2RlPWV9fV0pJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHZ9KGkuWE1MUGFyc2VyQmFzZSk7dC5YRkFQYXJzZXI9cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQnVpbGRlcj12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpLG89cigyMTkpLHM9cigyMTEpLGM9cigyMjgpLHU9cigyKTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGYoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGYoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBoKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gdCYmcChlLnByb3RvdHlwZSx0KSxyJiZwKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB2KCl7cmV0dXJuIHY9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT13KGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZtKGUsdCl9ZnVuY3Rpb24gbShlLHQpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbShlLHQpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9dyhlKTtpZih0KXt2YXIgaT13KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHcoZSl9dmFyIGs9ZnVuY3Rpb24oZSl7eShyLGUpO3ZhciB0PWIocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKSkuZWxlbWVudD1udWxsLG5baS4kaWRzXT1lLG59cmV0dXJuIGcocixbe2tleTppLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQ9ZSwhMH19LHtrZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2KHcoci5wcm90b3R5cGUpLGkuJGZpbmFsaXplLHRoaXMpLmNhbGwodGhpcyksdGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSYmKHRoaXNbaS4kaWRzXS5zZXQoaS4kcm9vdCx0aGlzLmVsZW1lbnQpLHRoaXMuZWxlbWVudC50ZW1wbGF0ZVtpLiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tpLiRpZHNdKSx0aGlzLmVsZW1lbnQudGVtcGxhdGVbaS4kaWRzXT10aGlzW2kuJGlkc10pfX1dKSxyfShpLlhGQU9iamVjdCksUz1mdW5jdGlvbihlKXt5KHIsZSk7dmFyIHQ9YihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGQodGhpcyxyKSx0LmNhbGwodGhpcywtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gZyhyLFt7a2V5OmkuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fV0pLHJ9KGkuWEZBT2JqZWN0KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7ZCh0aGlzLGUpLHRoaXMuX25hbWVzcGFjZVN0YWNrPVtdLHRoaXMuX25zQWdub3N0aWNMZXZlbD0wLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzPW5ldyBNYXAsdGhpcy5fbmFtZXNwYWNlcz1uZXcgTWFwLHRoaXMuX25leHROc0lkPU1hdGgubWF4LmFwcGx5KE1hdGgsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gaChlKX0odD1PYmplY3QudmFsdWVzKGEuTmFtZXNwYWNlSWRzKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSkpKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8Zih0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdGhpcy5fY3VycmVudE5hbWVzcGFjZT1yfHxuZXcgYy5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfXJldHVybiBnKGUsW3trZXk6ImJ1aWxkUm9vdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubnNQcmVmaXgscj1lLm5hbWUsbj1lLmF0dHJpYnV0ZXMscz1lLm5hbWVzcGFjZSxjPWUucHJlZml4ZXMsdT1udWxsIT09cztpZih1JiYodGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKSx0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShzKSksYyYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KGMpLG4uaGFzT3duUHJvcGVydHkoaS4kbnNBdHRyaWJ1dGVzKSl7Zm9yKHZhciBmPW8uTmFtZXNwYWNlU2V0VXAuZGF0YXNldHMsaD1uW2kuJG5zQXR0cmlidXRlc10sZD1udWxsLHA9MCxnPU9iamVjdC5lbnRyaWVzKGgpO3A8Zy5sZW5ndGg7cCsrKXt2YXIgdj1sKGdbcF0sMikseT12WzBdLG09dlsxXTtpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZSh5KT09PWYpe2Q9e3hmYTptfTticmVha319ZD9uW2kuJG5zQXR0cmlidXRlc109ZDpkZWxldGUgbltpLiRuc0F0dHJpYnV0ZXNdfXZhciBiPXRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKHQpLHc9YiYmYlthLiRidWlsZFhGQU9iamVjdF0ocixuKXx8bmV3IFM7cmV0dXJuIHdbaS4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKywodXx8Y3x8d1tpLiRpc05zQWdub3N0aWNdKCkpJiYod1tpLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOnUscHJlZml4ZXM6Yyxuc0Fnbm9zdGljOndbaS4kaXNOc0Fnbm9zdGljXSgpfSksd319LHtrZXk6ImlzTnNBZ25vc3RpYyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbnNBZ25vc3RpY0xldmVsPjB9fSx7a2V5OiJfc2VhcmNoTmFtZXNwYWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lc3BhY2VzLmdldChlKTtpZih0KXJldHVybiB0O2Zvcih2YXIgcj0wLG49T2JqZWN0LmVudHJpZXMoYS5OYW1lc3BhY2VJZHMpO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1sKG5bcl0sMikscz1pWzBdO2lmKCgwLGlbMV0uY2hlY2spKGUpKXtpZih0PW8uTmFtZXNwYWNlU2V0VXBbc10pcmV0dXJuIHRoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCksdDticmVha319cmV0dXJuIHQ9bmV3IGMuVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKSx0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpLHR9fSx7a2V5OiJfYWRkTmFtZXNwYWNlUHJlZml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlLGE9bi5wcmVmaXgsaT1uLnZhbHVlLG89dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGkpLHM9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGEpO3N8fChzPVtdLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChhLHMpKSxzLnB1c2gobyl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19LHtrZXk6Il9nZXROYW1lc3BhY2VUb1VzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7dmFyIHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO3JldHVybiB0JiZ0Lmxlbmd0aD4wP3QuYXQoLTEpOigoMCx1Lndhcm4pKCJVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICIuY29uY2F0KGUsIi4iKSksbnVsbCl9fSx7a2V5OiJjbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFzTmFtZXNwYWNlLG49ZS5wcmVmaXhlcyxhPWUubnNBZ25vc3RpYztyJiYodGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKSksbiYmbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLnByZWZpeDt0Ll9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocikucG9wKCl9KSksYSYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fV0pLGV9KCk7dC5CdWlsZGVyPXh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VTZXRVcD12b2lkIDA7dmFyIG49cigyMjApLGE9cigyMjEpLGk9cigyMjIpLG89cigyMjMpLHM9cigyMjQpLGM9cigyMjUpLHU9cigyMTEpLGw9cigyMjYpLGY9cigyMjcpLGg9e2NvbmZpZzpuLkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOmEuQ29ubmVjdGlvblNldE5hbWVzcGFjZSxkYXRhc2V0czppLkRhdGFzZXRzTmFtZXNwYWNlLGxvY2FsZVNldDpvLkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6cy5TaWduYXR1cmVOYW1lc3BhY2Usc3R5bGVzaGVldDpjLlN0eWxlc2hlZXROYW1lc3BhY2UsdGVtcGxhdGU6dS5UZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6bC5YZHBOYW1lc3BhY2UseGh0bWw6Zi5YaHRtbE5hbWVzcGFjZX07dC5OYW1lc3BhY2VTZXRVcD1ofSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db25maWdOYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gdCYmdShlLnByb3RvdHlwZSx0KSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9YS5OYW1lc3BhY2VJZHMuY29uZmlnLmlkLHk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFjcm9iYXQiLCEwKSkuYWNyb2JhdDc9bnVsbCxuLmF1dG9TYXZlPW51bGwsbi5jb21tb249bnVsbCxuLnZhbGlkYXRlPW51bGwsbi52YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcz1udWxsLG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhY3JvYmF0NyIsITApKS5keW5hbWljUmVuZGVyPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLGI9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNEZWJ1Z2dlciIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRTaWxlbnRQcmludCIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxTPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx4PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGp1c3REYXRhIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMTApLE89ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD04fSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFnZW50IiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5jb21tb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFsd2F5c0VtYmVkIil9cmV0dXJuIGwocil9KGkuQ29udGVudE9iamVjdCksRj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiYW1kIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhcmVhIikpLmxldmVsPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MSYmZTw9M319KSxuLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxFPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiYXNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJiYXRjaE91dHB1dCIpKS5mb3JtYXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiZWhhdmlvck92ZXJyaWRlIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09bmV3IE1hcCh0aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcygiOiIpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoIjoiLDIpfSkpKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjYWNoZSIsITApKS50ZW1wbGF0ZUNhY2hlPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNoYW5nZSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxSPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21tb24iLCEwKSkuZGF0YT1udWxsLG4ubG9jYWxlPW51bGwsbi5sb2NhbGVTZXQ9bnVsbCxuLm1lc3NhZ2luZz1udWxsLG4uc3VwcHJlc3NCYW5uZXI9bnVsbCxuLnRlbXBsYXRlPW51bGwsbi52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGwsbi52ZXJzaW9uQ29udHJvbD1udWxsLG4ubG9nPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxOPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21wcmVzcyIpKS5zY29wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxEPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29tcHJlc3NPYmplY3RTdHJlYW0iKX1yZXR1cm4gbChyKX0oaS5PcHRpb24xMCksVT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29tcHJlc3Npb24iLCEwKSkuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGwsbi5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsLG4ubGV2ZWw9bnVsbCxuLnR5cGU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29uZmlnIiwhMCkpLmFjcm9iYXQ9bnVsbCxuLnByZXNlbnQ9bnVsbCxuLnRyYWNlPW51bGwsbi5hZ2VudD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxIPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb250ZW50Q29weSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxxPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb3BpZXMiLDEsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNyZWF0b3IiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImN1cnJlbnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxXPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJkYXRhIiwhMCkpLmFkanVzdERhdGE9bnVsbCxuLmF0dHJpYnV0ZXM9bnVsbCxuLmluY3JlbWVudGFsTG9hZD1udWxsLG4ub3V0cHV0WFNMPW51bGwsbi5yYW5nZT1udWxsLG4ucmVjb3JkPW51bGwsbi5zdGFydE5vZGU9bnVsbCxuLnVyaT1udWxsLG4ud2luZG93PW51bGwsbi54c2w9bnVsbCxuLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZGVidWciLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImRlZmF1bHRUeXBlZmFjZSIpKS53cml0aW5nU2NyaXB0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLndyaXRpbmdTY3JpcHQsWyIqIiwiQXJhYmljIiwiQ3lyaWxsaWMiLCJFYXN0RXVyb3BlYW5Sb21hbiIsIkdyZWVrIiwiSGVicmV3IiwiSmFwYW5lc2UiLCJLb3JlYW4iLCJSb21hbiIsIlNpbXBsaWZpZWRDaGluZXNlIiwiVGhhaSIsIlRyYWRpdGlvbmFsQ2hpbmVzZSIsIlZpZXRuYW1lc2UiXSksbn1yZXR1cm4gbChyKX0oaS5Db250ZW50T2JqZWN0KSxLPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImRvY3VtZW50QXNzZW1ibHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksWj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZHJpdmVyIiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5mb250SW5mbz1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksdGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVtYmVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLHJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmNyeXB0Iil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLG5lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJlbmNyeXB0aW9uIiwhMCkpLmVuY3J5cHQ9bnVsbCxuLmVuY3J5cHRpb25MZXZlbD1udWxsLG4ucGVybWlzc2lvbnM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmZvcmNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxvZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZXF1YXRlIikpLmZvcmNlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9fSksbi5mcm9tPWUuZnJvbXx8IiIsbi50bz1lLnRvfHwiIixufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksc2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImVxdWF0ZVJhbmdlIikpLmZyb209ZS5mcm9tfHwiIixuLnRvPWUudG98fCIiLG4uX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiIsbn1yZXR1cm4gbChyLFt7a2V5OiJ1bmljb2RlUmFuZ2UiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj0vVVwrKFswLTlhLWZBLUZdKykvLG49ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0odGhpcy5fdW5pY29kZVJhbmdlLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTsxPT09KGE9YS5zcGxpdCgiLSIsMikubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKHIpO3JldHVybiB0P3BhcnNlSW50KHRbMV0sMTYpOjB9KSkpLmxlbmd0aCYmYS5wdXNoKGFbMF0pLHQucHVzaChhKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsInVuaWNvZGVSYW5nZSIsdCl9fV0pLHJ9KGkuWEZBT2JqZWN0KSxjZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSx1ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZU5TIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxsZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxmZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZm9udEluZm8iLCEwKSkuZW1iZWQ9bnVsbCxuLm1hcD1udWxsLG4uc3Vic2V0QmVsb3c9bnVsbCxuLmFsd2F5c0VtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZGVmYXVsdFR5cGVmYWNlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ubmV2ZXJFbWJlZD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImZvcm1GaWVsZEZpbGxpbmciKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksZGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImdyb3VwUGFyZW50Iil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxwZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaWZFbXB0eSIsWyJkYXRhVmFsdWUiLCJkYXRhR3JvdXAiLCJpZ25vcmUiLCJyZW1vdmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxnZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaW5jbHVkZVhEUENvbnRlbnQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkseWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImluY3JlbWVudGFsTWVyZ2UiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksbWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImludGVyYWN0aXZlIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLGJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsYWJlbFByaW50ZXIiLCEwKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKSxuLmJhdGNoT3V0cHV0PW51bGwsbi5mbGlwTGFiZWw9bnVsbCxuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksa2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksU2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxldmVsIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT4wfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLHhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsaW5lYXJpemVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE9lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEFlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGVTZXQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLENlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsb2ciLCEwKSkubW9kZT1udWxsLG4udGhyZXNob2xkPW51bGwsbi50bz1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtYXAiLCEwKSkuZXF1YXRlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZXF1YXRlUmFuZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtZWRpdW1JbmZvIiwhMCkpLm1hcD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwibWVzc2FnZSIsITApKS5tc2dJZD1udWxsLG4uc2V2ZXJpdHk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm1lc3NhZ2luZyIsITApKS5tZXNzYWdlPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxFZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxqZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kaWZ5QW5ub3RzIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE1lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJtc2dJZCIsMSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksX2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIm5hbWVBdHRyIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxMZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibmV2ZXJFbWJlZCIpfXJldHVybiBsKHIpfShpLkNvbnRlbnRPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTImJmU8PTV9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksTmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm9wZW5BY3Rpb24iLCEwKSkuZGVzdGluYXRpb249bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksRGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm91dHB1dCIsITApKS50bz1udWxsLG4udHlwZT1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdXRwdXRCaW4iKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLFVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJvdXRwdXRYU0wiLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCRlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdmVycHJpbnQiLFsibm9uZSIsImJvdGgiLCJkcmF3IiwiZmllbGQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxYZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFja2V0cyIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXsiKiIhPT10aGlzW2kuJGNvbnRlbnRdJiYodGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm5bImNvbmZpZyIsImRhdGFzZXRzIiwidGVtcGxhdGUiLCJ4ZmRmIiwieHNsdCJdLmluY2x1ZGVzKGUpfSkpKX19XSkscn0oaS5TdHJpbmdPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwYWdlT2Zmc2V0IikpLng9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLnk9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBhZ2VSYW5nZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpLHQ9W10scj0wLG49ZS5sZW5ndGg7cjxuO3IrPTIpdC5wdXNoKGUuc2xpY2UocixyKzIpKTt0aGlzW2kuJGNvbnRlbnRdPXR9fV0pLHJ9KGkuU3RyaW5nT2JqZWN0KSxHZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx6ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbk92ZXJyaWRlIixbIm5vbmUiLCJmb3JjZUR1cGxleCIsImZvcmNlRHVwbGV4TG9uZ0VkZ2UiLCJmb3JjZUR1cGxleFNob3J0RWRnZSIsImZvcmNlU2ltcGxleCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLFdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwYXJ0IiwxLChmdW5jdGlvbihlKXtyZXR1cm4hMX0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxWZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwicGNsIiwhMCkpLm5hbWU9ZS5uYW1lfHwiIixuLmJhdGNoT3V0cHV0PW51bGwsbi5mb250SW5mbz1udWxsLG4uam9nPW51bGwsbi5tZWRpdW1JbmZvPW51bGwsbi5vdXRwdXRCaW49bnVsbCxuLnBhZ2VPZmZzZXQ9bnVsbCxuLnN0YXBsZT1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwZGYiLCEwKSkubmFtZT1lLm5hbWV8fCIiLG4uYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmNvbXByZXNzaW9uPW51bGwsbi5jcmVhdG9yPW51bGwsbi5lbmNyeXB0aW9uPW51bGwsbi5mb250SW5mbz1udWxsLG4uaW50ZXJhY3RpdmU9bnVsbCxuLmxpbmVhcml6ZWQ9bnVsbCxuLm9wZW5BY3Rpb249bnVsbCxuLnBkZmE9bnVsbCxuLnByb2R1Y2VyPW51bGwsbi5yZW5kZXJQb2xpY3k9bnVsbCxuLnNjcmlwdE1vZGVsPW51bGwsbi5zaWxlbnRQcmludD1udWxsLG4uc3VibWl0Rm9ybWF0PW51bGwsbi50YWdnZWQ9bnVsbCxuLnZlcnNpb249bnVsbCxuLnZpZXdlclByZWZlcmVuY2VzPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksS2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBkZmEiLCEwKSkuYW1kPW51bGwsbi5jb25mb3JtYW5jZT1udWxsLG4uaW5jbHVkZVhEUENvbnRlbnQ9bnVsbCxuLnBhcnQ9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBlcm1pc3Npb25zIiwhMCkpLmFjY2Vzc2libGVDb250ZW50PW51bGwsbi5jaGFuZ2U9bnVsbCxuLmNvbnRlbnRDb3B5PW51bGwsbi5kb2N1bWVudEFzc2VtYmx5PW51bGwsbi5mb3JtRmllbGRGaWxsaW5nPW51bGwsbi5tb2RpZnlBbm5vdHM9bnVsbCxuLnBsYWludGV4dE1ldGFkYXRhPW51bGwsbi5wcmludD1udWxsLG4ucHJpbnRIaWdoUXVhbGl0eT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxaZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGlja1RyYXlCeVBERlNpemUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksUWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBpY3R1cmUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwbGFpbnRleHRNZXRhZGF0YSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx0dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJlc2VuY2UiLFsicHJlc2VydmUiLCJkaXNzb2x2ZSIsImRpc3NvbHZlU3RydWN0dXJlIiwiaWdub3JlIiwicmVtb3ZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInByZXNlbnQiLCEwKSkuYmVoYXZpb3JPdmVycmlkZT1udWxsLG4uY2FjaGU9bnVsbCxuLmNvbW1vbj1udWxsLG4uY29waWVzPW51bGwsbi5kZXN0aW5hdGlvbj1udWxsLG4uaW5jcmVtZW50YWxNZXJnZT1udWxsLG4ubGF5b3V0PW51bGwsbi5vdXRwdXQ9bnVsbCxuLm92ZXJwcmludD1udWxsLG4ucGFnaW5hdGlvbj1udWxsLG4ucGFnaW5hdGlvbk92ZXJyaWRlPW51bGwsbi5zY3JpcHQ9bnVsbCxuLnZhbGlkYXRlPW51bGwsbi54ZHA9bnVsbCxuLmRyaXZlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLmxhYmVsUHJpbnRlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBjbD1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBkZj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBzPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ud2ViQ2xpZW50PW5ldyBpLlhGQU9iamVjdEFycmF5LG4uenBsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxudD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJpbnQiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksYXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50SGlnaFF1YWxpdHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksaXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50ZXJOYW1lIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxzdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJvZHVjZXIiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGN0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwcyIsITApKS5uYW1lPWUubmFtZXx8IiIsbi5iYXRjaE91dHB1dD1udWxsLG4uZm9udEluZm89bnVsbCxuLmpvZz1udWxsLG4ubWVkaXVtSW5mbz1udWxsLG4ub3V0cHV0QmluPW51bGwsbi5zdGFwbGU9bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx1dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmFuZ2UiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiLSIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUudHJpbSgpLDEwKX0pKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4oZSl9KSl9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSksZX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxsdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVjb3JkIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCk7dmFyIGU9cGFyc2VJbnQodGhpc1tpLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tpLiRjb250ZW50XT1lKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxmdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVsZXZhbnQiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksaHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmFtZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLCh0aGlzW2kuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbaS4kY29udGVudF0pKSYmKDAscy53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksZHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxwdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzY3JpcHQiLCEwKSkuY3VycmVudFBhZ2U9bnVsbCxuLmV4Y2x1ZGU9bnVsbCxuLnJ1blNjcmlwdHM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksdnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx5dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic2V2ZXJpdHkiLFsiaWdub3JlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsInRyYWNlIiwid2FybmluZyJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLG10PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzaWxlbnRQcmludCIsITApKS5hZGRTaWxlbnRQcmludD1udWxsLG4ucHJpbnRlck5hbWU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInN0YXBsZSIpKS5tb2RlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx3dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnROb2RlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxrdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4hMH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxTdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJtaXRVcmwiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLE90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJzZXRCZWxvdyIsMTAwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MTAwfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEF0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdXBwcmVzc0Jhbm5lciIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxDdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGFnZ2VkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLEZ0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZSIsITApKS5iYXNlPW51bGwsbi5yZWxldmFudD1udWxsLG4uc3RhcnRQYWdlPW51bGwsbi51cmk9bnVsbCxuLnhzbD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxQdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGhyZXNob2xkIixbInRyYWNlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsIndhcm5pbmciXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxUdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEl0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZUNhY2hlIikpLm1heEVudHJpZXM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0cmFjZSIsITApKS5hcmVhPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxqdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwidHJhbnNmb3JtIiwhMCkpLmdyb3VwUGFyZW50PW51bGwsbi5pZkVtcHR5PW51bGwsbi5uYW1lQXR0cj1udWxsLG4ucGljdHVyZT1udWxsLG4ucHJlc2VuY2U9bnVsbCxuLnJlbmFtZT1udWxsLG4ud2hpdGVzcGFjZT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLF90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ1cmkiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEx0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksUnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuWyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSl9KSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksTnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRpb25NZXNzYWdpbmciLFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCJhbGxNZXNzYWdlc1RvZ2V0aGVyIiwiZmlyc3RNZXNzYWdlT25seSIsIm5vTWVzc2FnZXMiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxEdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxCdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiVmVyc2lvbkNvbnRyb2wiKSkub3V0cHV0QmVsb3c9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSksbi5zb3VyY2VBYm92ZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKSxuLnNvdXJjZUJlbG93PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApKS5BREJFX0pTQ29uc29sZT1udWxsLG4uQURCRV9KU0RlYnVnZ2VyPW51bGwsbi5hZGRWaWV3ZXJQcmVmZXJlbmNlcz1udWxsLG4uZHVwbGV4T3B0aW9uPW51bGwsbi5lbmZvcmNlPW51bGwsbi5udW1iZXJPZkNvcGllcz1udWxsLG4ucGFnZVJhbmdlPW51bGwsbi5waWNrVHJheUJ5UERGU2l6ZT1udWxsLG4ucHJpbnRTY2FsaW5nPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCR0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ3ZWJDbGllbnQiLCEwKSkubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIixuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIndoaXRlc3BhY2UiLFsicHJlc2VydmUiLCJsdHJpbSIsIm5vcm1hbGl6ZSIsInJ0cmltIiwidHJpbSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ3aW5kb3ciKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpO2Uuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSkpP3RoaXNbaS4kY29udGVudF09WzAsMF06KDE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pLHRoaXNbaS4kY29udGVudF09ZSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCkscXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInhkYyIsITApKS51cmk9bmV3IGkuWEZBT2JqZWN0QXJyYXksbi54c2w9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ4ZHAiLCEwKSkucGFja2V0cz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx6dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwieHNsIiwhMCkpLmRlYnVnPW51bGwsbi51cmk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksV3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInpwbCIsITApKS5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmZsaXBMYWJlbD1udWxsLG4uZm9udEluZm89bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxWdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGwoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImFjcm9iYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeShlKX19LHtrZXk6ImFjcm9iYXQ3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG0oZSl9fSx7a2V5OiJBREJFX0pTQ29uc29sZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiQURCRV9KU0RlYnVnZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJhZGRTaWxlbnRQcmludCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYWRkVmlld2VyUHJlZmVyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6ImFkanVzdERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTyhlKX19LHtrZXk6ImFnZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fSx7a2V5OiJhbHdheXNFbWJlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToiYW1kIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEYoZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFAoZSl9fSx7a2V5OiJhdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJhdXRvU2F2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJKGUpfX0se2tleToiYmFzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFKGUpfX0se2tleToiYmF0Y2hPdXRwdXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaihlKX19LHtrZXk6ImJlaGF2aW9yT3ZlcnJpZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTShlKX19LHtrZXk6ImNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJjaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTChlKX19LHtrZXk6ImNvbW1vbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSKGUpfX0se2tleToiY29tcHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTihlKX19LHtrZXk6ImNvbXByZXNzTG9naWNhbFN0cnVjdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEKGUpfX0se2tleToiY29tcHJlc3NPYmplY3RTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihlKX19LHtrZXk6ImNvbXByZXNzaW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFUoZSl9fSx7a2V5OiJjb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgJChlKX19LHtrZXk6ImNvbmZvcm1hbmNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFgoZSl9fSx7a2V5OiJjb250ZW50Q29weSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIKGUpfX0se2tleToiY29waWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHEoZSl9fSx7a2V5OiJjcmVhdG9yIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEcoZSl9fSx7a2V5OiJjdXJyZW50UGFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6KGUpfX0se2tleToiZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXKGUpfX0se2tleToiZGVidWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImRlZmF1bHRUeXBlZmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZKGUpfX0se2tleToiZGVzdGluYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImRvY3VtZW50QXNzZW1ibHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSihlKX19LHtrZXk6ImRyaXZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiZHVwbGV4T3B0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFEoZSl9fSx7a2V5OiJkeW5hbWljUmVuZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiZW1iZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuZShlKX19LHtrZXk6ImVuY3J5cHRpb25MZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhZShlKX19LHtrZXk6ImVuZm9yY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJlcXVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb2UoZSl9fSx7a2V5OiJlcXVhdGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzZShlKX19LHtrZXk6ImV4Y2x1ZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJleGNsdWRlTlMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdWUoZSl9fSx7a2V5OiJmbGlwTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJmb250SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImZvcm1GaWVsZEZpbGxpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJncm91cFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkZShlKX19LHtrZXk6ImlmRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJpbmNsdWRlWERQQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnZShlKX19LHtrZXk6ImluY3JlbWVudGFsTG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2ZShlKX19LHtrZXk6ImluY3JlbWVudGFsTWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJpbnRlcmFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtZShlKX19LHtrZXk6ImpvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiZShlKX19LHtrZXk6ImxhYmVsUHJpbnRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3ZShlKX19LHtrZXk6ImxheW91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImxldmVsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFNlKGUpfX0se2tleToibGluZWFyaXplZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB4ZShlKX19LHtrZXk6ImxvY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPZShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDZShlKX19LHtrZXk6Im1hcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBGZShlKX19LHtrZXk6Im1lZGl1bUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUGUoZSl9fSx7a2V5OiJtZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToibWVzc2FnaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEllKGUpfX0se2tleToibW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFZShlKX19LHtrZXk6Im1vZGlmeUFubm90cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6Im1zZ0lkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToibmFtZUF0dHIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX2UoZSl9fSx7a2V5OiJuZXZlckVtYmVkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IExlKGUpfX0se2tleToibnVtYmVyT2ZDb3BpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJvcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToib3V0cHV0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToib3V0cHV0QmluIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJlKGUpfX0se2tleToib3V0cHV0WFNMIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToib3ZlcnByaW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToicGFja2V0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYZShlKX19LHtrZXk6InBhZ2VPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSGUoZSl9fSx7a2V5OiJwYWdlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcWUoZSl9fSx7a2V5OiJwYWdpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEdlKGUpfX0se2tleToicGFnaW5hdGlvbk92ZXJyaWRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToicGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXZShlKX19LHtrZXk6InBjbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBWZShlKX19LHtrZXk6InBkZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZZShlKX19LHtrZXk6InBkZmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgS2UoZSl9fSx7a2V5OiJwZXJtaXNzaW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKZShlKX19LHtrZXk6InBpY2tUcmF5QnlQREZTaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFplKGUpfX0se2tleToicGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRZShlKX19LHtrZXk6InBsYWludGV4dE1ldGFkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGV0KGUpfX0se2tleToicHJlc2VuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdHQoZSl9fSx7a2V5OiJwcmVzZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJ0KGUpfX0se2tleToicHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbnQoZSl9fSx7a2V5OiJwcmludEhpZ2hRdWFsaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToicHJpbnRTY2FsaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToicHJpbnRlck5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb3QoZSl9fSx7a2V5OiJwcm9kdWNlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6InBzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToicmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJyZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJyZWxldmFudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmdChlKX19LHtrZXk6InJlbmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBodChlKX19LHtrZXk6InJlbmRlclBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InJ1blNjcmlwdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ3QoZSl9fSx7a2V5OiJzY3JpcHRNb2RlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2dChlKX19LHtrZXk6InNldmVyaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHl0KGUpfX0se2tleToic2lsZW50UHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJzdGFwbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYnQoZSl9fSx7a2V5OiJzdGFydE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3QoZSl9fSx7a2V5OiJzdGFydFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3QoZSl9fSx7a2V5OiJzdWJtaXRGb3JtYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJzdWJtaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJzdWJzZXRCZWxvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPdChlKX19LHtrZXk6InN1cHByZXNzQmFubmVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEF0KGUpfX0se2tleToidGFnZ2VkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEN0KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRnQoZSl9fSx7a2V5OiJ0ZW1wbGF0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToidGhyZXNob2xkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToidG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVHQoZSl9fSx7a2V5OiJ0cmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFdChlKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqdChlKX19LHtrZXk6InR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTXQoZSl9fSx7a2V5OiJ1cmkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMdChlKX19LHtrZXk6InZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToidmFsaWRhdGlvbk1lc3NhZ2luZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOdChlKX19LHtrZXk6InZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ2ZXJzaW9uQ29udHJvbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBCdChlKX19LHtrZXk6InZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUpfX0se2tleToid2ViQ2xpZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToid2hpdGVzcGFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYdChlKX19LHtrZXk6IndpbmRvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InhkYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InhkcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHdChlKX19LHtrZXk6InhzbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6dChlKX19LHtrZXk6InpwbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19XSksZX0oKTt0LkNvbmZpZ05hbWVzcGFjZT1WdH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCxyKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxyJiZvKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbChlLHQpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9aChlKTtpZih0KXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9dmFyIGQ9YS5OYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJjb25uZWN0aW9uU2V0IiwhMCkpLndzZGxDb25uZWN0aW9uPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ueG1sQ29ubmVjdGlvbj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnhzZENvbm5lY3Rpb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gcyhyKX0oaS5YRkFPYmplY3QpLGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsImVmZmVjdGl2ZUlucHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksdj1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZWZmZWN0aXZlT3V0cHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCkseT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwib3BlcmF0aW9uIikpLmlkPWUuaWR8fCIiLG4uaW5wdXQ9ZS5pbnB1dHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5vdXRwdXQ9ZS5vdXRwdXR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksbT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwicm9vdEVsZW1lbnQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxiPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJzb2FwQWN0aW9uIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksdz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwic29hcEFkZHJlc3MiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ1cmkiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ3c2RsQWRkcmVzcyIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gcyhyKX0oaS5TdHJpbmdPYmplY3QpLHg9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsIndzZGxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsLG4uZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGwsbi5vcGVyYXRpb249bnVsbCxuLnNvYXBBY3Rpb249bnVsbCxuLnNvYXBBZGRyZXNzPW51bGwsbi53c2RsQWRkcmVzcz1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ4bWxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51cmk9bnVsbCxufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksQT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwieHNkQ29ubmVjdGlvbiIsITApKS5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4ucm9vdEVsZW1lbnQ9bnVsbCxuLnVyaT1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2ModGhpcyxlKX1yZXR1cm4gcyhlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBlW3RdKHIpfX0se2tleToiY29ubmVjdGlvblNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwKGUpfX0se2tleToiZWZmZWN0aXZlSW5wdXRQb2xpY3kiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZyhlKX19LHtrZXk6ImVmZmVjdGl2ZU91dHB1dFBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2KGUpfX0se2tleToib3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHkoZSl9fSx7a2V5OiJyb290RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtKGUpfX0se2tleToic29hcEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToic29hcEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdyhlKX19LHtrZXk6InVyaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToid3NkbEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6IndzZGxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHgoZSl9fSx7a2V5OiJ4bWxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJ4c2RDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fV0pLGV9KCk7dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPUN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFzZXRzTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwNiksaT1yKDIwOCk7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1pLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8odGhpcyxyKSx0LmNhbGwodGhpcyxkLCJkYXRhIixlKX1yZXR1cm4gYyhyLFt7a2V5OmEuJGlzTnNBZ25vc3RpYyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX1dKSxyfShhLlhtbE9iamVjdCksZz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZGF0YXNldHMiLCEwKSkuZGF0YT1udWxsLG4uU2lnbmF0dXJlPW51bGwsbn1yZXR1cm4gYyhyLFt7a2V5OmEuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVthLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbYS4kbmFtZXNwYWNlSWRdPT09ZHx8IlNpZ25hdHVyZSI9PT10JiZlW2EuJG5hbWVzcGFjZUlkXT09PWkuTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpLHRoaXNbYS4kYXBwZW5kQ2hpbGRdKGUpfX1dKSxyfShhLlhGQU9iamVjdCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmkuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImRhdGFzZXRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGcoZSl9fSx7a2V5OiJkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHAoZSl9fV0pLGV9KCk7dC5EYXRhc2V0c05hbWVzcGFjZT12fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Mb2NhbGVTZXROYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWQoZSk7aWYodCl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWEuTmFtZXNwYWNlSWRzLmxvY2FsZVNldC5pZCxnPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjYWxlbmRhclN5bWJvbHMiLCEwKSkubmFtZT0iZ3JlZ29yaWFuIixuLmRheU5hbWVzPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG4uZXJhTmFtZXM9bnVsbCxuLm1lcmlkaWVtTmFtZXM9bnVsbCxuLm1vbnRoTmFtZXM9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLHY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImN1cnJlbmN5U3ltYm9sIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSx5PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjdXJyZW5jeVN5bWJvbHMiLCEwKSkuY3VycmVuY3lTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMyksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLG09ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLGI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJucyIsITApKS5kYXRlUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF0ZVRpbWVTeW1ib2xzIil9cmV0dXJuIGMocil9KGkuQ29udGVudE9iamVjdCksaz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF5Iil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJkYXlOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLmRheT1uZXcgaS5YRkFPYmplY3RBcnJheSg3KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCkseD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZXJhIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJlcmFOYW1lcyIsITApKS5lcmE9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEE9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZSIsITApKS5kZXNjPWUuZGVzY3x8IiIsbi5uYW1lPSJpc29uYW1lIixuLmNhbGVuZGFyU3ltYm9scz1udWxsLG4uY3VycmVuY3lTeW1ib2xzPW51bGwsbi5kYXRlUGF0dGVybnM9bnVsbCxuLmRhdGVUaW1lU3ltYm9scz1udWxsLG4ubnVtYmVyUGF0dGVybnM9bnVsbCxuLm51bWJlclN5bWJvbHM9bnVsbCxuLnRpbWVQYXR0ZXJucz1udWxsLG4udHlwZUZhY2VzPW51bGwsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZVNldCIsITApKS5sb2NhbGU9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLHAsIm1lcmlkaWVtIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJtZXJpZGllbU5hbWVzIiwhMCkpLm1lcmlkaWVtPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxwLCJtb250aCIpfXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksST1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibW9udGhOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLm1vbnRoPW5ldyBpLlhGQU9iamVjdEFycmF5KDEyKSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksRT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyUGF0dGVybiIpKS5uYW1lPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJQYXR0ZXJucyIsITApKS5udW1iZXJQYXR0ZXJuPW5ldyBpLlhGQU9iamVjdEFycmF5KDQpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJTeW1ib2wiKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKSxufXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksXz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyU3ltYm9scyIsITApKS5udW1iZXJTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoNSksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLFI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJucyIsITApKS50aW1lUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksTj1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwidHlwZUZhY2UiLCEwKSkubmFtZT0iInxlLm5hbWUsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInR5cGVGYWNlcyIsITApKS50eXBlRmFjZT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt1KHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImNhbGVuZGFyU3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnKGUpfX0se2tleToiY3VycmVuY3lTeW1ib2wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdihlKX19LHtrZXk6ImN1cnJlbmN5U3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5KGUpfX0se2tleToiZGF0ZVBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbShlKX19LHtrZXk6ImRhdGVQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiZGF0ZVRpbWVTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJkYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgayhlKX19LHtrZXk6ImRheU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFMoZSl9fSx7a2V5OiJlcmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImVyYU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJsb2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToibWVyaWRpZW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRihlKX19LHtrZXk6Im1lcmlkaWVtTmFtZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUChlKX19LHtrZXk6Im1vbnRoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJtb250aE5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqKGUpfX0se2tleToibnVtYmVyU3ltYm9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE0oZSl9fSx7a2V5OiJudW1iZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJ0aW1lUGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToidGltZVBhdHRlcm5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFIoZSl9fSx7a2V5OiJ0eXBlRmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOKGUpfX0se2tleToidHlwZUZhY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fV0pLGV9KCk7dC5Mb2NhbGVTZXROYW1lc3BhY2U9Qn0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGModGhpcyxpKSxhLmNhbGwodGhpcyxmLCJzaWduYXR1cmUiLCEwKX1yZXR1cm4gcyhpKX0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBzKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJzaWduYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlNpZ25hdHVyZU5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHlsZXNoZWV0TmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkLGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9bCh0KTtpZihyKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBjKHRoaXMsaSksYS5jYWxsKHRoaXMsZiwic3R5bGVzaGVldCIsITApfXJldHVybiBzKGkpfShpLlhGQU9iamVjdCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtjKHRoaXMsZSl9cmV0dXJuIHMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6InN0eWxlc2hlZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9ZH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWGRwTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy54ZHAuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShoLGUpO3ZhciB0LHIscz0odD1oLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGgoZSl7dmFyIHQ7cmV0dXJuIG8odGhpcyxoKSwodD1zLmNhbGwodGhpcyxmLCJ4ZHAiLCEwKSkudXVpZD1lLnV1aWR8fCIiLHQudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIix0LmNvbmZpZz1udWxsLHQuY29ubmVjdGlvblNldD1udWxsLHQuZGF0YXNldHM9bnVsbCx0LmxvY2FsZVNldD1udWxsLHQuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheSx0LnRlbXBsYXRlPW51bGwsdH1yZXR1cm4gYyhoLFt7a2V5OmkuJG9uQ2hpbGRDaGVjayx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hLk5hbWVzcGFjZUlkc1tlW2kuJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbaS4kbmFtZXNwYWNlSWRdPT09dC5pZH19XSksaH0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiBjKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJ4ZHAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlhkcE5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigyMDgpLG89cigyMTMpLHM9cigyMDcpO2Z1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIHQmJnUoZS5wcm90b3R5cGUsdCksciYmdShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gZigpe3JldHVybiBmPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ZyhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGgoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZChlLHQpfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGQoZSx0KX1mdW5jdGlvbiBwKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWcoZSk7aWYodCl7dmFyIGk9Zyh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8bShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24geShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9bShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gbShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgdz1pLk5hbWVzcGFjZUlkcy54aHRtbC5pZCxrPVN5bWJvbCgpLFM9bmV3IFNldChbImNvbG9yIiwiZm9udCIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtd2VpZ2h0IiwibWFyZ2luIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsImxldHRlci1zcGFjaW5nIiwibGluZS1oZWlnaHQiLCJvcnBoYW5zIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJ0YWItaW50ZXJ2YWwiLCJ0YWItc3RvcCIsInRleHQtYWxpZ24iLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWluZGVudCIsInZlcnRpY2FsLWFsaWduIiwid2lkb3dzIiwia2VybmluZy1tb2RlIiwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIiwieGZhLXNwYWNlcnVuIiwieGZhLXRhYi1zdG9wcyJdKSx4PW5ldyBNYXAoW1sicGFnZS1icmVhay1hZnRlciIsImJyZWFrQWZ0ZXIiXSxbInBhZ2UtYnJlYWstYmVmb3JlIiwiYnJlYWtCZWZvcmUiXSxbInBhZ2UtYnJlYWstaW5zaWRlIiwiYnJlYWtJbnNpZGUiXSxbImtlcm5pbmctbW9kZSIsZnVuY3Rpb24oZSl7cmV0dXJuIm5vbmUiPT09ZT8ibm9uZSI6Im5vcm1hbCJ9XSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGZ1bmN0aW9uKGUpe3JldHVybiJzY2FsZVgoIi5jb25jYXQoTWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpLCIpIil9XSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixmdW5jdGlvbihlKXtyZXR1cm4ic2NhbGVZKCIuY29uY2F0KE1hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKSwiKSIpfV0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpLCgwLG8ubWVhc3VyZVRvU3RyaW5nKSguOTkqZSl9XSxbImxldHRlci1zcGFjaW5nIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJsaW5lLWhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tYm90dG9tIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tbGVmdCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luLXJpZ2h0IixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tdG9wIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJ0ZXh0LWluZGVudCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsiZm9udC1mYW1pbHkiLGZ1bmN0aW9uKGUpe3JldHVybiBlfV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dXSksTz0vXHMrL2csQT0vW1xyXG5dKy9nLEM9L1xyXG4/L2c7ZnVuY3Rpb24gRihlLHQscil7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gbjt2YXIgaSxjPU9iamVjdC5jcmVhdGUobnVsbCksdT15KGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2Zvcih1LnMoKTshKGk9dS5uKCkpLmRvbmU7KXt2YXIgbD12KGkudmFsdWUsMiksZj1sWzBdLGg9bFsxXSxkPXguZ2V0KGYpO2lmKCIiIT09ZCl7dmFyIHA9aDtkJiYocD0ic3RyaW5nIj09dHlwZW9mIGQ/ZDpkKGgsYykpLGYuZW5kc1dpdGgoInNjYWxlIik/bi50cmFuc2Zvcm0/bi50cmFuc2Zvcm09IiIuY29uY2F0KG5bZl0sIiAiKS5jb25jYXQocCk6bi50cmFuc2Zvcm09cDpuW2YucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSkpXT1wfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9aWYobi5mb250RmFtaWx5JiYoMCxvLnNldEZvbnRGYW1pbHkpKHt0eXBlZmFjZTpuLmZvbnRGYW1pbHksd2VpZ2h0Om4uZm9udFdlaWdodHx8Im5vcm1hbCIscG9zdHVyZTpuLmZvbnRTdHlsZXx8Im5vcm1hbCIsc2l6ZTpjLmZvbnRTaXplfHwwfSx0LHRbYS4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixuKSxyJiZuLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09bi52ZXJ0aWNhbEFsaWduJiZuLmZvbnRTaXplKXt2YXIgZz0oMCxzLmdldE1lYXN1cmVtZW50KShuLmZvbnRTaXplKTtuLmZvbnRTaXplPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSguNTgzKmcpLG4udmVydGljYWxBbGlnbj0oMCxvLm1lYXN1cmVUb1N0cmluZykoTWF0aC5zaWduKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4udmVydGljYWxBbGlnbikpKmcqLjMzMyl9cmV0dXJuIHImJm4uZm9udFNpemUmJihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KG4uZm9udFNpemUsIiAqIHZhcigtLXNjYWxlLWZhY3RvcikpIikpLCgwLG8uZml4VGV4dEluZGVudCkobiksbn12YXIgUD1uZXcgU2V0KFsiYm9keSIsImh0bWwiXSksVD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIGModGhpcyxyKSwoYT10LmNhbGwodGhpcyx3LG4pKVtrXT0hMSxhLnN0eWxlPWUuc3R5bGV8fCIiLGF9cmV0dXJuIGwocixbe2tleTphLiRjbGVhbix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtmKGcoci5wcm90b3R5cGUpLGEuJGNsZWFuLHRoaXMpLmNhbGwodGhpcyxlKSx0aGlzLnN0eWxlPSh0PXRoaXMpLnN0eWxlP3Quc3R5bGUudHJpbSgpLnNwbGl0KC9ccyo7XHMqLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHMqOlxzKi8sMil9KSkuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgcj12KGUsMiksbj1yWzBdLGk9clsxXTtyZXR1cm4iZm9udC1mYW1pbHkiPT09biYmdFthLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChpKSxTLmhhcyhuKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oIjoiKX0pKS5qb2luKCI7Iik6IiJ9fSx7a2V5OmEuJGFjY2VwdFdoaXRlc3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hUC5oYXModGhpc1thLiRub2RlTmFtZV0pfX0se2tleTphLiRvblRleHQsdmFsdWU6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXT90aGlzW2tdPSEwOihlPWUucmVwbGFjZShBLCIiKSx0aGlzLnN0eWxlLmluY2x1ZGVzKCJ4ZmEtc3BhY2VydW46eWVzIil8fChlPWUucmVwbGFjZShPLCIgIikpKSxlJiYodGhpc1thLiRjb250ZW50XSs9ZSl9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPXt0b3A6TmFOLGJvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOfSxvPW51bGwsYz15KHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2ZvcihjLnMoKTshKHQ9Yy5uKCkpLmRvbmU7KXt2YXIgdT12KHQudmFsdWUsMiksbD11WzBdLGY9dVsxXTtzd2l0Y2gobCl7Y2FzZSJmb250LWZhbWlseSI6bi50eXBlZmFjZT0oMCxzLnN0cmlwUXVvdGVzKShmKTticmVhaztjYXNlImZvbnQtc2l6ZSI6bi5zaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOm4ud2VpZ2h0PWY7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjpuLnBvc3R1cmU9ZjticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjpuLmxldHRlclNwYWNpbmc9KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4iOnZhciBoPWYuc3BsaXQoLyBcdC8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5nZXRNZWFzdXJlbWVudCkoZSl9KSk7c3dpdGNoKGgubGVuZ3RoKXtjYXNlIDE6aS50b3A9aS5ib3R0b209aS5sZWZ0PWkucmlnaHQ9aFswXTticmVhaztjYXNlIDI6aS50b3A9aS5ib3R0b209aFswXSxpLmxlZnQ9aS5yaWdodD1oWzFdO2JyZWFrO2Nhc2UgMzppLnRvcD1oWzBdLGkuYm90dG9tPWhbMl0saS5sZWZ0PWkucmlnaHQ9aFsxXTticmVhaztjYXNlIDQ6aS50b3A9aFswXSxpLmxlZnQ9aFsxXSxpLmJvdHRvbT1oWzJdLGkucmlnaHQ9aFszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmkudG9wPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6aS5ib3R0b209KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6aS5sZWZ0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjppLnJpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOm89KDAscy5nZXRNZWFzdXJlbWVudCkoZil9fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1pZihlLnB1c2hEYXRhKG4saSxvKSx0aGlzW2EuJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbYS4kY29udGVudF0pO2Vsc2V7dmFyIGQscD15KHRoaXNbYS4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTsiI3RleHQiIT09Z1thLiRub2RlTmFtZV0/Z1thLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyhnW2EuJGNvbnRlbnRdKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fXImJmUucG9wRm9udCgpfX0se2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1bXTtyZXR1cm4gdGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnJ9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwIT09ci5sZW5ndGh8fHRoaXNbYS4kY29udGVudF0/KHQ9dGhpc1trXT90aGlzW2EuJGNvbnRlbnRdP3RoaXNbYS4kY29udGVudF0ucmVwbGFjZShDLCJcbiIpOnZvaWQgMDp0aGlzW2EuJGNvbnRlbnRdfHx2b2lkIDAscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1thLiRub2RlTmFtZV0sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6Rih0aGlzLnN0eWxlLHRoaXMsdGhpc1trXSl9LGNoaWxkcmVuOnIsdmFsdWU6dH0pKTpzLkhUTUxSZXN1bHQuRU1QVFl9fV0pLHJ9KGEuWG1sT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxlLCJhIikpLmhyZWY9KDAsby5maXhVUkwpKGUuaHJlZil8fCIiLG59cmV0dXJuIGwocil9KFQpLEU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImIiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pLGYoZyhyLnByb3RvdHlwZSksYS4kcHVzaEdseXBocyx0aGlzKS5jYWxsKHRoaXMsZSksZS5wb3BGb250KCl9fV0pLHJ9KFQpLGo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImJvZHkiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1mKGcoci5wcm90b3R5cGUpLGEuJHRvSFRNTCx0aGlzKS5jYWxsKHRoaXMsZSksbj10Lmh0bWw7cmV0dXJuIG4/KG4ubmFtZT0iZGl2IixuLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl0sdCk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShUKSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJiciIpfXJldHVybiBsKHIsW3trZXk6YS4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJcbiJ9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5hZGRTdHJpbmcoIlxuIil9fSx7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1dKSxyfShUKSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJodG1sIil9cmV0dXJuIGwocixbe2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnR9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwPT09dC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW2EuJGNvbnRlbnRdfHwiIn0pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIHI9dFswXTtpZihyLmF0dHJpYnV0ZXMmJnIuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhyKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19XSkscn0oVCksTD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiaSIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSksZihnKHIucHJvdG90eXBlKSxhLiRwdXNoR2x5cGhzLHRoaXMpLmNhbGwodGhpcyxlKSxlLnBvcEZvbnQoKX19XSkscn0oVCksUj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwibGkiKX1yZXR1cm4gbChyKX0oVCksTj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwib2wiKX1yZXR1cm4gbChyKX0oVCksRD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwicCIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtmKGcoci5wcm90b3R5cGUpLGEuJHB1c2hHbHlwaHMsdGhpcykuY2FsbCh0aGlzLGUsITEpLGUuYWRkU3RyaW5nKCJcbiIpLGUuYWRkUGFyYSgpLGUucG9wRm9udCgpfX0se2tleTphLiR0ZXh0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYS4kZ2V0UGFyZW50XSgpW2EuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcyk6ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcykrIlxuIn19XSkscn0oVCksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3BhbiIpfXJldHVybiBsKHIpfShUKSxVPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJzdWIiKX1yZXR1cm4gbChyKX0oVCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3VwIil9cmV0dXJuIGwocil9KFQpLFg9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsInVsIil9cmV0dXJuIGwocil9KFQpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBsKGUsbnVsbCxbe2tleTppLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJiIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJib2R5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGooZSl9fSx7a2V5OiJiciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNKGUpfX0se2tleToiaHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBfKGUpfX0se2tleToiaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToibGkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUihlKX19LHtrZXk6Im9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE4oZSl9fSx7a2V5OiJwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fSx7a2V5OiJzcGFuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEIoZSl9fSx7a2V5OiJzdWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVShlKX19LHtrZXk6InN1cCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyAkKGUpfX0se2tleToidWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWChlKX19XSksZX0oKTt0LlhodG1sTmFtZXNwYWNlPUh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIwOCksYT1yKDIwNik7ZnVuY3Rpb24gaShlKXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0saShlKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWkoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1pKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aShhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMubmFtZXNwYWNlSWQ9dH12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6bi4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGEuWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LlVua25vd25OYW1lc3BhY2U9c30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGF0YXNldFJlYWRlcj12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTk1KTtmdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoKXtyZXR1cm4gbD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSx0KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmbnVsbCE9PShlPWgoZSkpOyk7cmV0dXJuIGV9KGUsdCk7aWYobil7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiBhLmdldD9hLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9lOnIpOmEudmFsdWV9fSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX1mdW5jdGlvbiBkKGUpe3RyeXtyZXR1cm4oMCxhLnN0cmluZ1RvVVRGOFN0cmluZykoZSl9Y2F0Y2godCl7cmV0dXJuKDAsYS53YXJuKSgnVVRGLTggZGVjb2RpbmcgZmFpbGVkOiAiJy5jb25jYXQodCwnIi4nKSksZX19dmFyIHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9aCh0KTtpZihyKXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3ZhciB0O3JldHVybiBzKHRoaXMsaSksKHQ9YS5jYWxsKHRoaXMsZSkpLm5vZGU9bnVsbCx0fXJldHVybiB1KGksW3trZXk6Im9uRW5kRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bChoKGkucHJvdG90eXBlKSwib25FbmRFbGVtZW50Iix0aGlzKS5jYWxsKHRoaXMsZSk7aWYodCYmInhmYTpkYXRhc2V0cyI9PT1lKXRocm93IHRoaXMubm9kZT10LG5ldyBFcnJvcigiQWJvcnRpbmcgRGF0YXNldFhNTFBhcnNlci4iKX19XSksaX0oby5TaW1wbGVYTUxQYXJzZXIpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKHModGhpcyxlKSx0LmRhdGFzZXRzKXRoaXMubm9kZT1uZXcgby5TaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcodC5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7dmFyIHI9bmV3IHAoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7ci5wYXJzZUZyb21TdHJpbmcodFsieGRwOnhkcCJdKX1jYXRjaChlKXt9dGhpcy5ub2RlPXIubm9kZX19cmV0dXJuIHUoZSxbe2tleToiZ2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLm5vZGV8fCFlKXJldHVybiIiO3ZhciB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKCgwLGkucGFyc2VYRkFQYXRoKShlKSwwKTtpZighdClyZXR1cm4iIjt2YXIgcj10LmZpcnN0Q2hpbGQ7cmV0dXJuIHImJiJ2YWx1ZSI9PT1yLm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZChlLnRleHRDb250ZW50KX0pKTpkKHQudGV4dENvbnRlbnQpfX1dKSxlfSgpO3QuRGF0YXNldFJlYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWFJlZj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTQ2KSxzPXIoMTM2KSxjPXIoMTk2KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoKXtsPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciBsPWMuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXUoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGYoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2YoaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2YoaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBwKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cChlLHQpOnZvaWQgMH19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5wZGZNYW5hZ2VyPXIsdGhpcy5lbnRyaWVzPVtdLHRoaXMueHJlZnN0bXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9jYWNoZU1hcD1uZXcgTWFwLHRoaXMuX3BlbmRpbmdSZWZzPW5ldyBhLlJlZlNldCx0aGlzLnN0YXRzPW5ldyBpLkRvY1N0YXRzKHIubXNnSGFuZGxlciksdGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsLHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsfXZhciB0LHIsdSxmO3JldHVybiB0PWUscj1be2tleToiZ2V0TmV3UGVyc2lzdGVudFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSl7bnVsbD09PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0mJih0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3ZhciB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKztyZXR1cm4gdGhpcy5fY2FjaGVNYXAuc2V0KHQsZSksYS5SZWYuZ2V0KHQsMCl9fSx7a2V5OiJnZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0mJih0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09dGhpcy5lbnRyaWVzLmxlbmd0aHx8MSksYS5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfX0se2tleToicmVzZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9fSx7a2V5OiJzZXRTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG89YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtvPygoMCxuLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKSxlPXRoaXMuaW5kZXhPYmplY3RzKCkpOmU9dGhpcy5yZWFkWFJlZigpLGUuYXNzaWduWHJlZih0aGlzKSx0aGlzLnRyYWlsZXI9ZTt0cnl7dD1lLmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHQgaW5zdGFuY2VvZiBhLkRpY3Qpe3ZhciBzPWUuZ2V0KCJJRCIpLHU9cyYmcy5sZW5ndGg/c1swXToiIjt0LnN1cHByZXNzRW5jcnlwdGlvbj0hMCx0aGlzLmVuY3J5cHQ9bmV3IGMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSh0LHUsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7cj1lLmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHIgaW5zdGFuY2VvZiBhLkRpY3QpdHJ5e2lmKHIuZ2V0KCJQYWdlcyIpaW5zdGFuY2VvZiBhLkRpY3QpcmV0dXJuIHZvaWQodGhpcy5yb290PXIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICInLmNvbmNhdChlLCciLicpKX1pZighbyl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IG4uSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBSb290IHJlZmVyZW5jZS4iKX19LHtrZXk6InByb2Nlc3NYUmVmVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO3ZhciB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsYS5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO3ZhciByPWUuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIGEuRGljdHx8IXIuZGljdHx8KHI9ci5kaWN0KSwhKHIgaW5zdGFuY2VvZiBhLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtyZXR1cm4gZGVsZXRlIHRoaXMudGFibGVTdGF0ZSxyfX0se2tleToicmVhZFhSZWZUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxleGVyLnN0cmVhbSxpPXRoaXMudGFibGVTdGF0ZTtmb3Ioci5wb3M9aS5zdHJlYW1Qb3MsZS5idWYxPWkucGFyc2VyQnVmMSxlLmJ1ZjI9aS5wYXJzZXJCdWYyOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gaSl8fCEoImVudHJ5Q291bnQiaW4gaSkpe2lmKCgwLGEuaXNDbWQpKHQ9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO2kuZmlyc3RFbnRyeU51bT10LGkuZW50cnlDb3VudD1lLmdldE9iaigpfXZhciBvPWkuZmlyc3RFbnRyeU51bSxzPWkuZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihvKXx8IU51bWJlci5pc0ludGVnZXIocykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IodmFyIGM9aS5lbnRyeU51bTtjPHM7YysrKXtpLnN0cmVhbVBvcz1yLnBvcyxpLmVudHJ5TnVtPWMsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyO3ZhciB1PXt9O3Uub2Zmc2V0PWUuZ2V0T2JqKCksdS5nZW49ZS5nZXRPYmooKTt2YXIgbD1lLmdldE9iaigpO2lmKGwgaW5zdGFuY2VvZiBhLkNtZClzd2l0Y2gobC5jbWQpe2Nhc2UiZiI6dS5mcmVlPSEwO2JyZWFrO2Nhc2UibiI6dS51bmNvbXByZXNzZWQ9ITB9aWYoIU51bWJlci5pc0ludGVnZXIodS5vZmZzZXQpfHwhTnVtYmVyLmlzSW50ZWdlcih1Lmdlbil8fCF1LmZyZWUmJiF1LnVuY29tcHJlc3NlZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICIuY29uY2F0KG8sIiwgIikuY29uY2F0KHMpKTswPT09YyYmdS5mcmVlJiYxPT09byYmKG89MCksdGhpcy5lbnRyaWVzW2Mrb118fCh0aGlzLmVudHJpZXNbYytvXT11KX1pLmVudHJ5TnVtPTAsaS5zdHJlYW1Qb3M9ci5wb3MsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyLGRlbGV0ZSBpLmZpcnN0RW50cnlOdW0sZGVsZXRlIGkuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB1bmV4cGVjdGVkIGZpcnN0IG9iamVjdCIpO3JldHVybiB0fX0se2tleToicHJvY2Vzc1hSZWZTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCEoInN0cmVhbVN0YXRlImluIHRoaXMpKXt2YXIgdD1lLmRpY3Qscj10LmdldCgiVyIpLG49dC5nZXQoIkluZGV4Iik7bnx8KG49WzAsdC5nZXQoIlNpemUiKV0pLHRoaXMuc3RyZWFtU3RhdGU9e2VudHJ5UmFuZ2VzOm4sYnl0ZVdpZHRoczpyLGVudHJ5TnVtOjAsc3RyZWFtUG9zOmUucG9zfX1yZXR1cm4gdGhpcy5yZWFkWFJlZlN0cmVhbShlKSxkZWxldGUgdGhpcy5zdHJlYW1TdGF0ZSxlLmRpY3R9fSx7a2V5OiJyZWFkWFJlZlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJlYW1TdGF0ZTtlLnBvcz10LnN0cmVhbVBvcztmb3IodmFyIHI9ZCh0LmJ5dGVXaWR0aHMsMyksYT1yWzBdLGk9clsxXSxvPXJbMl0scz10LmVudHJ5UmFuZ2VzO3MubGVuZ3RoPjA7KXt2YXIgYz1kKHMsMiksdT1jWzBdLGw9Y1sxXTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6ICIuY29uY2F0KHUsIiwgIikuY29uY2F0KGwpKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogIi5jb25jYXQodSwiLCAiKS5jb25jYXQobCkpO2Zvcih2YXIgZj10LmVudHJ5TnVtO2Y8bDsrK2Ype3QuZW50cnlOdW09Zix0LnN0cmVhbVBvcz1lLnBvcztmb3IodmFyIGg9MCxwPTAsZz0wLHY9MDt2PGE7Kyt2KXt2YXIgeT1lLmdldEJ5dGUoKTtpZigtMT09PXkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtoPWg8PDh8eX0wPT09YSYmKGg9MSk7Zm9yKHZhciBtPTA7bTxpOysrbSl7dmFyIGI9ZS5nZXRCeXRlKCk7aWYoLTE9PT1iKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtwPXA8PDh8Yn1mb3IodmFyIHc9MDt3PG87Kyt3KXt2YXIgaz1lLmdldEJ5dGUoKTtpZigtMT09PWspdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtnPWc8PDh8a312YXIgUz17fTtzd2l0Y2goUy5vZmZzZXQ9cCxTLmdlbj1nLGgpe2Nhc2UgMDpTLmZyZWU9ITA7YnJlYWs7Y2FzZSAxOlMudW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogIi5jb25jYXQoaCkpfXRoaXMuZW50cmllc1t1K2ZdfHwodGhpcy5lbnRyaWVzW3UrZl09Uyl9dC5lbnRyeU51bT0wLHQuc3RyZWFtUG9zPWUucG9zLHMuc3BsaWNlKDAsMil9fX0se2tleToiaW5kZXhPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9IiIsbj1lW3RdOzEwIT09biYmMTMhPT1uJiY2MCE9PW4mJiEoKyt0Pj1lLmxlbmd0aCk7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUobiksbj1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHQoZSx0LHIpe2Zvcih2YXIgbj1yLmxlbmd0aCxhPWUubGVuZ3RoLGk9MDt0PGE7KXtmb3IodmFyIG89MDtvPG4mJmVbdCtvXT09PXJbb107KSsrbztpZihvPj1uKWJyZWFrO3QrKyxpKyt9cmV0dXJuIGl9dmFyIHI9L1xiKGVuZG9ianxcZCtccytcZCtccytvYmp8eHJlZnx0cmFpbGVyKVxiL2cscz0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGM9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHU9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksbD1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLGY9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTAsdGhpcy5fY2FjaGVNYXAuY2xlYXIoKTt2YXIgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2Zvcih2YXIgZCxwLGc9aC5nZXRCeXRlcygpLHY9KDAsbi5ieXRlc1RvU3RyaW5nKShnKSx5PWcubGVuZ3RoLG09aC5zdGFydCxiPVtdLHc9W107bTx5Oyl7dmFyIGs9Z1ttXTtpZig5IT09ayYmMTAhPT1rJiYxMyE9PWsmJjMyIT09aylpZigzNyE9PWspe3ZhciBTPWUoZyxtKSx4PXZvaWQgMDtpZihTLnN0YXJ0c1dpdGgoInhyZWYiKSYmKDQ9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbNF0pKSltKz10KGcsbSx1KSxiLnB1c2gobSksbSs9dChnLG0sbCk7ZWxzZSBpZih4PWMuZXhlYyhTKSl7dmFyIE89MHx4WzFdLEE9MHx4WzJdLEM9bStTLmxlbmd0aCxGPXZvaWQgMCxQPSExO2lmKHRoaXMuZW50cmllc1tPXSl7aWYodGhpcy5lbnRyaWVzW09dLmdlbj09PUEpdHJ5e25ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKEMpKX0pLmdldE9iaigpLFA9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIGkuUGFyc2VyRU9GRXhjZXB0aW9uPygwLG4ud2FybikoImluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCIuY29uY2F0KFMsJyk6ICInKS5jb25jYXQoZSwnIi4nKSk6UD0hMH19ZWxzZSBQPSEwO1AmJih0aGlzLmVudHJpZXNbT109e29mZnNldDptLWguc3RhcnQsZ2VuOkEsdW5jb21wcmVzc2VkOiEwfSksci5sYXN0SW5kZXg9Qzt2YXIgVD1yLmV4ZWModik7VD8oRj1yLmxhc3RJbmRleCsxLW0sImVuZG9iaiIhPT1UWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoVFsxXSwnIiBpbnNpZGUgb2YgYW5vdGhlciAib2JqIiwgJykrJ2NhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLicpLEYtPVRbMV0ubGVuZ3RoKzEpKTpGPXktbTt2YXIgST1nLnN1YmFycmF5KG0sbStGKSxFPXQoSSwwLGYpO0U8RiYmSVtFKzVdPDY0JiYody5wdXNoKG0taC5zdGFydCksdGhpcy54cmVmc3Rtc1ttLWguc3RhcnRdPTEpLG0rPUZ9ZWxzZSBpZihTLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbN10pKSl7Yi5wdXNoKG0pO3ZhciBqPW0rUy5sZW5ndGgsTT12b2lkIDA7cy5sYXN0SW5kZXg9ajt2YXIgXz1zLmV4ZWModik7Xz8oTT1zLmxhc3RJbmRleCsxLW0sInN0YXJ0eHJlZiIhPT1fWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoX1sxXSwnIiBhZnRlciAidHJhaWxlciIsICcpKydjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxNLT1fWzFdLmxlbmd0aCsxKSk6TT15LW0sbSs9TX1lbHNlIG0rPVMubGVuZ3RoKzF9ZWxzZSBkb3tpZigrK20+PXkpYnJlYWs7az1nW21dfXdoaWxlKDEwIT09ayYmMTMhPT1rKTtlbHNlKyttfWZvcih2YXIgTD0wLFI9dztMPFIubGVuZ3RoO0wrKyl7dmFyIE49UltMXTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goTiksdGhpcy5yZWFkWFJlZighMCl9Zm9yKHZhciBEPTAsQj1bXS5jb25jYXQoYixbImdlbmVyYXRpb25GYWxsYmFjayJdLGIpO0Q8Qi5sZW5ndGg7RCsrKXt2YXIgVT1CW0RdO2lmKCJnZW5lcmF0aW9uRmFsbGJhY2siIT09VSl7aC5wb3M9VTt2YXIgJD1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSksWD0kLmdldE9iaigpO2lmKCgwLGEuaXNDbWQpKFgsInRyYWlsZXIiKSl7dmFyIEg9JC5nZXRPYmooKTtpZihIIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcT0hMTt0cnl7dmFyIEc9SC5nZXQoIlJvb3QiKTtpZighKEcgaW5zdGFuY2VvZiBhLkRpY3QpKWNvbnRpbnVlO3ZhciB6PUcuZ2V0KCJQYWdlcyIpO2lmKCEoeiBpbnN0YW5jZW9mIGEuRGljdCkpY29udGludWU7dmFyIFc9ei5nZXQoIkNvdW50Iik7TnVtYmVyLmlzSW50ZWdlcihXKSYmKHE9ITApfWNhdGNoKGUpe3A9ZTtjb250aW51ZX1pZihxJiZILmhhcygiSUQiKSlyZXR1cm4gSDtkPUh9fX1lbHNle2lmKCFwKWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMH19aWYoZClyZXR1cm4gZDtpZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDt0aHJvdyBuZXcgbi5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9fSx7a2V5OiJyZWFkWFJlZiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PXRoaXMuc3RyZWFtLHI9bmV3IFNldDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXt2YXIgYz10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKHIuaGFzKGMpKXsoMCxuLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpLHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1yLmFkZChjKSx0LnBvcz1jK3Quc3RhcnQ7dmFyIHU9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksbD11LmdldE9iaigpLGY9dm9pZCAwO2lmKCgwLGEuaXNDbWQpKGwsInhyZWYiKSl7aWYoZj10aGlzLnByb2Nlc3NYUmVmVGFibGUodSksdGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWYpLGw9Zi5nZXQoIlhSZWZTdG0iKSxOdW1iZXIuaXNJbnRlZ2VyKGwpKXt2YXIgaD1sO2ggaW4gdGhpcy54cmVmc3Rtc3x8KHRoaXMueHJlZnN0bXNbaF09MSx0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goaCkpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih1LmdldE9iaigpKSYmKDAsYS5pc0NtZCkodS5nZXRPYmooKSwib2JqIikmJihsPXUuZ2V0T2JqKCkpaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7aWYoZj10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpLHRoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1mKSwhZil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWYuZ2V0KCJQcmV2IiksTnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn19LHtrZXk6ImdldEVudHJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH19LHtrZXk6ImZldGNoSWZSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07cmV0dXJuIGUgaW5zdGFuY2VvZiBhLlJlZj90aGlzLmZldGNoKGUsdCk6ZX19LHtrZXk6ImZldGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKCEoZSBpbnN0YW5jZW9mIGEuUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7dmFyIHI9ZS5udW0saT10aGlzLl9jYWNoZU1hcC5nZXQocik7aWYodm9pZCAwIT09aSlyZXR1cm4gaSBpbnN0YW5jZW9mIGEuRGljdCYmIWkub2JqSWQmJihpLm9iaklkPWUudG9TdHJpbmcoKSksaTt2YXIgbz10aGlzLmdldEVudHJ5KHIpO2lmKG51bGw9PT1vKXJldHVybiB0aGlzLl9jYWNoZU1hcC5zZXQocixvKSxvO2lmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSlyZXR1cm4gdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpLCgwLG4ud2FybikoIklnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogIi5jb25jYXQoZSwiLiIpKSxhLkNJUkNVTEFSX1JFRjt0aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e289by51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLG8sdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxvLHQpLHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aHJvdyB0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSksdH1yZXR1cm4gbyBpbnN0YW5jZW9mIGEuRGljdD9vLm9iaklkPWUudG9TdHJpbmcoKTpvIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoby5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksb319LHtrZXk6ImZldGNoVW5jb21wcmVzc2VkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYz1lLmdlbix1PWUubnVtO2lmKHQuZ2VuIT09Yyl7dmFyIGw9IkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICIuY29uY2F0KGUpO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48YylyZXR1cm4oMCxuLndhcm4pKGwpLHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQoYS5SZWYuZ2V0KHUsdC5nZW4pLHQscik7dGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKGwpfXZhciBmPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLGg9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcihmKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksZD1oLmdldE9iaigpLHA9aC5nZXRPYmooKSxnPWguZ2V0T2JqKCk7aWYoZCE9PXV8fHAhPT1jfHwhKGcgaW5zdGFuY2VvZiBhLkNtZCkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO2lmKCJvYmoiIT09Zy5jbWQpe2lmKGcuY21kLnN0YXJ0c1dpdGgoIm9iaiIpJiYodT1wYXJzZUludChnLmNtZC5zdWJzdHJpbmcoMyksMTApLCFOdW1iZXIuaXNOYU4odSkpKXJldHVybiB1O3Rocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKX1yZXR1cm4odD10aGlzLmVuY3J5cHQmJiFyP2guZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odSxjKSk6aC5nZXRPYmooKSlpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KHUsdCksdH19LHtrZXk6ImZldGNoQ29tcHJlc3NlZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10Lm9mZnNldCxjPXRoaXMuZmV0Y2goYS5SZWYuZ2V0KHIsMCkpO2lmKCEoYyBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImJhZCBPYmpTdG0gc3RyZWFtIik7dmFyIHU9Yy5kaWN0LmdldCgiRmlyc3QiKSxsPWMuZGljdC5nZXQoIk4iKTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpO2Zvcih2YXIgZj1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGMpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxoPW5ldyBBcnJheShsKSxkPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCl7dmFyIGc9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihnKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdChnKSk7dmFyIHY9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcih2KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdCh2KSk7aFtwXT1nLGRbcF09dn1mb3IodmFyIHk9KGMuc3RhcnR8fDApK3UsbT1uZXcgQXJyYXkobCksYj0wO2I8bDsrK2Ipe3ZhciB3PWI8bC0xP2RbYisxXS1kW2JdOnZvaWQgMDtpZih3PDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtLiIpO3ZhciBrPShmPW5ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoYy5tYWtlU3ViU3RyZWFtKHkrZFtiXSx3LGMuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSkuZ2V0T2JqKCk7aWYobVtiXT1rLCEoayBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpe3ZhciBTPWhbYl0seD10aGlzLmVudHJpZXNbU107eCYmeC5vZmZzZXQ9PT1yJiZ4Lmdlbj09PWImJnRoaXMuX2NhY2hlTWFwLnNldChTLGspfX1pZih2b2lkIDA9PT0odD1tW3QuZ2VuXSkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKTtyZXR1cm4gdH19LHtrZXk6ImZldGNoSWZSZWZBc3luYyIsdmFsdWU6KGY9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0IGluc3RhbmNlb2YgYS5SZWYpKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5mZXRjaEFzeW5jKHQscikpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hBc3luYyIsdmFsdWU6KHU9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2godCxyKSk7Y2FzZSA0OmlmKGUucHJldj00LGUudDA9ZS5jYXRjaCgwKSxlLnQwIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCx0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGUudDAuYmVnaW4sZS50MC5lbmQpO2Nhc2UgMTA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw0XV0pfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYXRhbG9nT2JqIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9fV0sciYmZyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWFJlZj12fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixjPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8sYyl7dmFyIHU9aChlW25dLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8sYyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLG8obCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8sYyl9KSl9Yyh1LmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LHUsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gaShlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1zKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSl7c3dpdGNoKGUgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKGUpJiZudWxsIT09ZXx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGUubWVzc2FnZSxlLnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3ZhciBhPXRoaXM7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zb3VyY2VOYW1lPXQsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZT09PWEuc291cmNlTmFtZSlpZih0LnN0cmVhbSlhLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtlbHNlIGlmKHQuY2FsbGJhY2spe3ZhciByPXQuY2FsbGJhY2tJZCxpPWEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PXQuY2FsbGJhY2spaS5yZXNvbHZlKHQuZGF0YSk7ZWxzZXtpZigyIT09dC5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2kucmVqZWN0KGModC5yZWFzb24pKX19ZWxzZXt2YXIgbz1hLmFjdGlvbkhhbmRsZXJbdC5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KHQuYWN0aW9uKSk7aWYodC5jYWxsYmFja0lkKXt2YXIgcz1hLnNvdXJjZU5hbWUsdT10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uobyh0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihlKXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTplfSl9KSwoZnVuY3Rpb24oZSl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjpjKGUpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP2EuX2NyZWF0ZVN0cmVhbVNpbmsodCk6byh0LmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIHQscixzLHU7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYocltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7cltlXT10fX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5jYWxsYmFja0lkKyssaT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbYV09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6YSxkYXRhOnR9LHIpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGk9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBjPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6YyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246ZSxzdHJlYW1JZDpvLGRhdGE6dCxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxhKSxjLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gaS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD10LGwucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciB0PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD10LGkuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpjKGUpfSksdC5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbihlKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgYz10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sYz4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo0LHN0cmVhbUlkOnQsY2h1bms6ZX0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGkucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjMsc3RyZWFtSWQ6dH0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW3RdKX0sZXJyb3I6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsaS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NSxzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW3RdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocyhlLmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06OCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo4LHN0cmVhbUlkOnQscmVhc29uOmMoZSl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxzPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIDg6ZS5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNzplLnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo3LHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjcsc3RyZWFtSWQ6dCxyZWFzb246YyhlKX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUoZS5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihjKGUucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLHQpO2JyZWFrO2Nhc2UgMjplLnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGMoZS5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt0KHMub25DYW5jZWwmJnMub25DYW5jZWwoYyhlLnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjIsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06MixzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QoYyhlLnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbdF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9YSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW3Quc3RhcnRDYWxsJiZ0LnN0YXJ0Q2FsbC5wcm9taXNlLHQucHVsbENhbGwmJnQucHVsbENhbGwucHJvbWlzZSx0LmNhbmNlbENhbGwmJnQuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXMuYXBwbHkoZSx0KTtmdW5jdGlvbiBvKGUpe2koYSxyLG4sbyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2koYSxyLG4sbyxjLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NZXNzYWdlSGFuZGxlcj11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGV29ya2VyU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGwoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7bCh7fSwiIil9Y2F0Y2goZSl7bD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307bCh5LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLG8pJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtsKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLGMpe3ZhciB1PWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBsPXUuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXMoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLGMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8sYyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLGMpfSkpfWModS5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtvXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1sKHYsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGwoZSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGwoUy5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGwodyx1LCJHZW5lcmF0b3IiKSxsKHcsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxsKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGkoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe2kobyxuLGEscyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2kobyxuLGEscyxjLCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGYoZSxbe2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgZCh0aGlzLl9tc2dIYW5kbGVyKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBwKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXImJnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChlKTt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl0LnZhbHVlLmNhbmNlbChlKX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19fV0pLGV9KCk7dC5QREZXb3JrZXJTdHJlYW09aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dGhpczt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO3ZhciBuPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJlYWRlciIpO3RoaXMuX3JlYWRlcj1uLmdldFJlYWRlcigpLHRoaXMuX2hlYWRlcnNSZWFkeT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiUmVhZGVySGVhZGVyc1JlYWR5IikudGhlbigoZnVuY3Rpb24oZSl7ci5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZCxyLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZCxyLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOih0PW8oYSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSAyOmlmKHQ9ZS5zZW50LHI9dC52YWx1ZSwhdC5kb25lKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6ci5idWZmZXIsZG9uZTohMX0pO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19XSksZX0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dSh0aGlzLGUpLHRoaXMuX21zZ0hhbmRsZXI9bix0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt2YXIgYT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSYW5nZVJlYWRlciIse2JlZ2luOnQsZW5kOnJ9KTt0aGlzLl9yZWFkZXI9YS5nZXRSZWFkZXIoKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJyZWFkIix2YWx1ZToodD1vKGEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgMjppZih0PWUuc2VudCxyPXQudmFsdWUsIXQuZG9uZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIuYnVmZmVyLGRvbmU6ITF9KTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fV0pLGV9KCl9XSx0PXt9O2Z1bmN0aW9uIHIobil7dmFyIGE9dFtuXTtpZih2b2lkIDAhPT1hKXJldHVybiBhLmV4cG9ydHM7dmFyIGk9dFtuXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbbl0oaSxpLmV4cG9ydHMsciksaS5leHBvcnRzfXIuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KXIubyh0LG4pJiYhci5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sci5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxyLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9O3JldHVybigoKT0+e3ZhciBlPW47T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9cigxKX0pKCksbn0pKCksIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKTs=",a="LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgcGRmLmpzLkxJQ0VOU0UudHh0ICovCnZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LHJvb3QsZmFjdG9yeTtyb290PWdsb2JhbFRoaXMsZmFjdG9yeT0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189WywodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGkodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gYSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxvKHQpfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1vKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gZSYmcyh0LnByb3RvdHlwZSxlKSxyJiZzKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiB1KHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZoKHQsZSl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0saCh0LGUpfWZ1bmN0aW9uIGYodCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZCh0KTtpZihlKXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW8oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGQodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVmVyYm9zaXR5TGV2ZWw9ZS5VdGlsPWUuVW5rbm93bkVycm9yRXhjZXB0aW9uPWUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPWUuVU5TVVBQT1JURURfRkVBVFVSRVM9ZS5UZXh0UmVuZGVyaW5nTW9kZT1lLlN0cmVhbVR5cGU9ZS5SZW5kZXJpbmdJbnRlbnRGbGFnPWUuUGVybWlzc2lvbkZsYWc9ZS5QYXNzd29yZFJlc3BvbnNlcz1lLlBhc3N3b3JkRXhjZXB0aW9uPWUuUGFnZUFjdGlvbkV2ZW50VHlwZT1lLk9QUz1lLk1pc3NpbmdQREZFeGNlcHRpb249ZS5MSU5FX0ZBQ1RPUj1lLkxJTkVfREVTQ0VOVF9GQUNUT1I9ZS5JbnZhbGlkUERGRXhjZXB0aW9uPWUuSW1hZ2VLaW5kPWUuSURFTlRJVFlfTUFUUklYPWUuRm9ybWF0RXJyb3I9ZS5Gb250VHlwZT1lLkZlYXR1cmVUZXN0PWUuRk9OVF9JREVOVElUWV9NQVRSSVg9ZS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT1lLkNNYXBDb21wcmVzc2lvblR5cGU9ZS5CYXNlRXhjZXB0aW9uPWUuQkFTRUxJTkVfRkFDVE9SPWUuQW5ub3RhdGlvblR5cGU9ZS5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9ZS5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9ZS5Bbm5vdGF0aW9uUmVwbHlUeXBlPWUuQW5ub3RhdGlvbk1vZGU9ZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9ZS5Bbm5vdGF0aW9uRmxhZz1lLkFubm90YXRpb25GaWVsZEZsYWc9ZS5Bbm5vdGF0aW9uRWRpdG9yVHlwZT1lLkFubm90YXRpb25FZGl0b3JQcmVmaXg9ZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT1lLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9ZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPWUuQWJvcnRFeGNlcHRpb249dm9pZCAwLGUuYXJyYXlCeXRlTGVuZ3RoPVQsZS5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDE9PT1lJiZ0WzBdaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiB0WzBdO2Zvcih2YXIgcj0wLG49MDtuPGU7bisrKXIrPVQodFtuXSk7Zm9yKHZhciBpPTAsYT1uZXcgVWludDhBcnJheShyKSxvPTA7bzxlO28rKyl7dmFyIHM9dFtvXTtzIGluc3RhbmNlb2YgVWludDhBcnJheXx8KHM9InN0cmluZyI9PXR5cGVvZiBzP1Aocyk6bmV3IFVpbnQ4QXJyYXkocykpO3ZhciBsPXMuYnl0ZUxlbmd0aDthLnNldChzLGkpLGkrPWx9cmV0dXJuIGF9LGUuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7dHx8bShlKX0sZS5ieXRlc1RvU3RyaW5nPWZ1bmN0aW9uKHQpeyJvYmplY3QiPT09byh0KSYmbnVsbCE9PXQmJnZvaWQgMCE9PXQubGVuZ3RofHxtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIGU9dC5sZW5ndGgscj04MTkyO2lmKGU8cilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpO2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krPXIpe3ZhciBhPU1hdGgubWluKGkrcixlKSxzPXQuc3ViYXJyYXkoaSxhKTtuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMpKX1yZXR1cm4gbi5qb2luKCIiKX0sZS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eT1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0hMTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldHRsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX19KSx0LnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dC5yZXNvbHZlPWZ1bmN0aW9uKHQpe2U9ITAscih0KX0sdC5yZWplY3Q9ZnVuY3Rpb24odCl7ZT0hMCxuKHQpfX0pKSx0fSxlLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighdClyZXR1cm4gbnVsbDt0cnl7aWYociYmInN0cmluZyI9PXR5cGVvZiB0KXtpZihyLmFkZERlZmF1bHRQcm90b2NvbCYmdC5zdGFydHNXaXRoKCJ3d3cuIikpe3ZhciBuPXQubWF0Y2goL1wuL2cpO24mJm4ubGVuZ3RoPj0yJiYodD0iaHR0cDovLyIuY29uY2F0KHQpKX1pZihyLnRyeUNvbnZlcnRFbmNvZGluZyl0cnl7dD1SKHQpfWNhdGNoKHQpe319dmFyIGk9ZT9uZXcgVVJMKHQsZSk6bmV3IFVSTCh0KTtpZihmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtzd2l0Y2godC5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOmNhc2UiZnRwOiI6Y2FzZSJtYWlsdG86IjpjYXNlInRlbDoiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fShpKSlyZXR1cm4gaX1jYXRjaCh0KXt9cmV0dXJuIG51bGx9LGUuZ2V0TW9kaWZpY2F0aW9uRGF0ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgRGF0ZTtyZXR1cm5bdC5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKHQuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfSxlLmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGUuaW5mbz1mdW5jdGlvbih0KXt2Pj1wLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIi5jb25jYXQodCkpfSxlLmlzQXJyYXlCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PT1vKHQpJiZudWxsIT09dCYmdm9pZCAwIT09dC5ieXRlTGVuZ3RofSxlLmlzQXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfSxlLm9iamVjdEZyb21NYXA9ZnVuY3Rpb24odCl7dmFyIGUscixuPU9iamVjdC5jcmVhdGUobnVsbCksYT1mdW5jdGlvbih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9aSh0KSkpe3ImJih0PXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsbD0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIHM9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7bD0hMCxvPXR9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IG99fX19KHQpO3RyeXtmb3IoYS5zKCk7IShlPWEubigpKS5kb25lOyl7dmFyIG89KHI9ZS52YWx1ZSwyLGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHIpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2ZvcihhPShyPXIuY2FsbCh0KSkubmV4dCwwOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0ocil8fGkociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSxzPW9bMF0sbD1vWzFdO25bc109bH19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIG59LGUub2JqZWN0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RofSxlLnNldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKHQpe051bWJlci5pc0ludGVnZXIodCkmJih2PXQpfSxlLnNoYWRvdz1nLGUuc3RyaW5nMzI9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9LGUuc3RyaW5nVG9CeXRlcz1QLGUuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU7aWYodFswXT49IsOvIiYmKCLDviI9PT10WzBdJiYiw78iPT09dFsxXT9lPSJ1dGYtMTZiZSI6IsO/Ij09PXRbMF0mJiLDviI9PT10WzFdP2U9InV0Zi0xNmxlIjoiw68iPT09dFswXSYmIsK7Ij09PXRbMV0mJiLCvyI9PT10WzJdJiYoZT0idXRmLTgiKSxlKSl0cnl7dmFyIHI9bmV3IFRleHREZWNvZGVyKGUse2ZhdGFsOiEwfSksbj1QKHQpO3JldHVybiByLmRlY29kZShuKX1jYXRjaCh0KXt5KCdzdHJpbmdUb1BERlN0cmluZzogIicuY29uY2F0KHQsJyIuJykpfWZvcih2YXIgaT1bXSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXt2YXIgcz1NW3QuY2hhckNvZGVBdChhKV07aS5wdXNoKHM/U3RyaW5nLmZyb21DaGFyQ29kZShzKTp0LmNoYXJBdChhKSl9cmV0dXJuIGkuam9pbigiIil9LGUuc3RyaW5nVG9VVEY4U3RyaW5nPVIsZS51bnJlYWNoYWJsZT1tLGUudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpfSxlLndhcm49eSxnbG9iYWxUaGlzLl9wZGZqc0NvbXBhdGliaWxpdHlDaGVja2VkfHwoZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMCxyKDIpKSxlLklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLGUuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSxlLkxJTkVfRkFDVE9SPTEuMzUsZS5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNSxlLkJBU0VMSU5FX0ZBQ1RPUj0uMjU5MjU5MjU5MjU5MjU5MjQsZS5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxTQVZFOjgsQU5OT1RBVElPTlNfRk9STVM6MTYsQU5OT1RBVElPTlNfU1RPUkFHRTozMixBTk5PVEFUSU9OU19ESVNBQkxFOjY0LE9QTElTVDoyNTZ9LGUuQW5ub3RhdGlvbk1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRk9STVM6MixFTkFCTEVfU1RPUkFHRTozfSxlLkFubm90YXRpb25FZGl0b3JQcmVmaXg9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iLGUuQW5ub3RhdGlvbkVkaXRvclR5cGU9e0RJU0FCTEU6LTEsTk9ORTowLEZSRUVURVhUOjMsSU5LOjE1fSxlLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXtGUkVFVEVYVF9TSVpFOjEsRlJFRVRFWFRfQ09MT1I6MixGUkVFVEVYVF9PUEFDSVRZOjMsSU5LX0NPTE9SOjExLElOS19USElDS05FU1M6MTIsSU5LX09QQUNJVFk6MTN9LGUuUGVybWlzc2lvbkZsYWc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH0sZS5UZXh0UmVuZGVyaW5nTW9kZT17RklMTDowLFNUUk9LRToxLEZJTExfU1RST0tFOjIsSU5WSVNJQkxFOjMsRklMTF9BRERfVE9fUEFUSDo0LFNUUk9LRV9BRERfVE9fUEFUSDo1LEZJTExfU1RST0tFX0FERF9UT19QQVRIOjYsQUREX1RPX1BBVEg6NyxGSUxMX1NUUk9LRV9NQVNLOjMsQUREX1RPX1BBVEhfRkxBRzo0fSxlLkltYWdlS2luZD17R1JBWVNDQUxFXzFCUFA6MSxSR0JfMjRCUFA6MixSR0JBXzMyQlBQOjN9LGUuQW5ub3RhdGlvblR5cGU9e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fSxlLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZT17TUFSS0VEOiJNYXJrZWQiLFJFVklFVzoiUmV2aWV3In0sZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9e01BUktFRDoiTWFya2VkIixVTk1BUktFRDoiVW5tYXJrZWQifSxlLkFubm90YXRpb25SZXZpZXdTdGF0ZT17QUNDRVBURUQ6IkFjY2VwdGVkIixSRUpFQ1RFRDoiUmVqZWN0ZWQiLENBTkNFTExFRDoiQ2FuY2VsbGVkIixDT01QTEVURUQ6IkNvbXBsZXRlZCIsTk9ORToiTm9uZSJ9LGUuQW5ub3RhdGlvblJlcGx5VHlwZT17R1JPVVA6Ikdyb3VwIixSRVBMWToiUiJ9LGUuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LGUuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sZS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSxlLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9LGUuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9LGUuUGFnZUFjdGlvbkV2ZW50VHlwZT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9LGUuU3RyZWFtVHlwZT17VU5LTk9XTjoiVU5LTk9XTiIsRkxBVEU6IkZMQVRFIixMWlc6IkxaVyIsRENUOiJEQ1QiLEpQWDoiSlBYIixKQklHOiJKQklHIixBODU6IkE4NSIsQUhYOiJBSFgiLENDRjoiQ0NGIixSTFg6IlJMWCJ9LGUuRm9udFR5cGU9e1VOS05PV046IlVOS05PV04iLFRZUEUxOiJUWVBFMSIsVFlQRTFTVEFOREFSRDoiVFlQRTFTVEFOREFSRCIsVFlQRTFDOiJUWVBFMUMiLENJREZPTlRUWVBFMDoiQ0lERk9OVFRZUEUwIixDSURGT05UVFlQRTBDOiJDSURGT05UVFlQRTBDIixUUlVFVFlQRToiVFJVRVRZUEUiLENJREZPTlRUWVBFMjoiQ0lERk9OVFRZUEUyIixUWVBFMzoiVFlQRTMiLE9QRU5UWVBFOiJPUEVOVFlQRSIsVFlQRTA6IlRZUEUwIixNTVRZUEUxOiJNTVRZUEUxIn07dmFyIHA9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07ZS5WZXJib3NpdHlMZXZlbD1wLGUuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfSxlLk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSxlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXtmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNpZ25hdHVyZXM6InNpZ25hdHVyZXMiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixlcnJvclRpbGluZ1BhdHRlcm46ImVycm9yVGlsaW5nUGF0dGVybiIsZXJyb3JFeHRHU3RhdGU6ImVycm9yRXh0R1N0YXRlIixlcnJvclhPYmplY3Q6ImVycm9yWE9iamVjdCIsZXJyb3JGb250TG9hZFR5cGUzOiJlcnJvckZvbnRMb2FkVHlwZTMiLGVycm9yRm9udFN0YXRlOiJlcnJvckZvbnRTdGF0ZSIsZXJyb3JGb250TWlzc2luZzoiZXJyb3JGb250TWlzc2luZyIsZXJyb3JGb250VHJhbnNsYXRlOiJlcnJvckZvbnRUcmFuc2xhdGUiLGVycm9yQ29sb3JTcGFjZToiZXJyb3JDb2xvclNwYWNlIixlcnJvck9wZXJhdG9yTGlzdDoiZXJyb3JPcGVyYXRvckxpc3QiLGVycm9yRm9udFRvVW5pY29kZToiZXJyb3JGb250VG9Vbmljb2RlIixlcnJvckZvbnRMb2FkTmF0aXZlOiJlcnJvckZvbnRMb2FkTmF0aXZlIixlcnJvckZvbnRCdWlsZFBhdGg6ImVycm9yRm9udEJ1aWxkUGF0aCIsZXJyb3JGb250R2V0UGF0aDoiZXJyb3JGb250R2V0UGF0aCIsZXJyb3JNYXJrZWRDb250ZW50OiJlcnJvck1hcmtlZENvbnRlbnQiLGVycm9yQ29udGVudFN1YlN0cmVhbToiZXJyb3JDb250ZW50U3ViU3RyZWFtIn0sZS5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgdj1wLldBUk5JTkdTO2Z1bmN0aW9uIHkodCl7dj49cC5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIuY29uY2F0KHQpKX1mdW5jdGlvbiBtKHQpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6IW4sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExfSkscn12YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt0aGlzLmNvbnN0cnVjdG9yPT09dCYmbSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi4iKSx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9cn1yZXR1cm4gdC5wcm90b3R5cGU9bmV3IEVycm9yLHQuY29uc3RydWN0b3I9dCx0fSgpO2UuQmFzZUV4Y2VwdGlvbj1iO3ZhciBfPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlBhc3N3b3JkRXhjZXB0aW9uIikpLmNvZGU9bixpfXJldHVybiBsKHIpfShiKTtlLlBhc3N3b3JkRXhjZXB0aW9uPV87dmFyIHc9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0LG4pe3ZhciBpO3JldHVybiB1KHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiVW5rbm93bkVycm9yRXhjZXB0aW9uIikpLmRldGFpbHM9bixpfXJldHVybiBsKHIpfShiKTtlLlVua25vd25FcnJvckV4Y2VwdGlvbj13O3ZhciBBPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJJbnZhbGlkUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuSW52YWxpZFBERkV4Y2VwdGlvbj1BO3ZhciBrPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJNaXNzaW5nUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuTWlzc2luZ1BERkV4Y2VwdGlvbj1rO3ZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIpKS5zdGF0dXM9bixpfXJldHVybiBsKHIpfShiKTtlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1TO3ZhciB4PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJGb3JtYXRFcnJvciIpfXJldHVybiBsKHIpfShiKTtlLkZvcm1hdEVycm9yPXg7dmFyIEU9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdSh0aGlzLHIpLGUuY2FsbCh0aGlzLHQsIkFib3J0RXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2Z1bmN0aW9uIFAodCl7InN0cmluZyIhPXR5cGVvZiB0JiZtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO248ZTsrK24pcltuXT0yNTUmdC5jaGFyQ29kZUF0KG4pO3JldHVybiByfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHZvaWQgMCE9PXQubGVuZ3RoP3QubGVuZ3RoOnZvaWQgMCE9PXQuYnl0ZUxlbmd0aD90LmJ5dGVMZW5ndGg6dm9pZCBtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBhcnJheUJ5dGVMZW5ndGgiKX1lLkFib3J0RXhjZXB0aW9uPUU7dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToiaXNMaXR0bGVFbmRpYW4iLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzTGl0dGxlRW5kaWFuIiwoKHQ9bmV3IFVpbnQ4QXJyYXkoNCkpWzBdPTEsMT09PW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLDEpWzBdKSk7dmFyIHR9fSx7a2V5OiJpc0V2YWxTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbigiIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpKX19LHtrZXk6ImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfX0se2tleToicGxhdGZvcm0iLGdldDpmdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP2codGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOmcodGhpcywicGxhdGZvcm0iLHtpc1dpbjpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLGlzTWFjOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiTWFjIil9KX19XSksdH0oKTtlLkZlYXR1cmVUZXN0PUM7dmFyIE89bihBcnJheSgyNTYpLmtleXMoKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfSkpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToibWFrZUhleENvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIiMiLmNvbmNhdChPW3RdKS5jb25jYXQoT1tlXSkuY29uY2F0KE9bcl0pfX0se2tleToic2NhbGVNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7dFswXT8odFswXTwwJiYocj1lWzBdLGVbMF09ZVsxXSxlWzFdPXIpLGVbMF0qPXRbMF0sZVsxXSo9dFswXSx0WzNdPDAmJihyPWVbMl0sZVsyXT1lWzNdLGVbM109ciksZVsyXSo9dFszXSxlWzNdKj10WzNdKToocj1lWzBdLGVbMF09ZVsyXSxlWzJdPXIscj1lWzFdLGVbMV09ZVszXSxlWzNdPXIsdFsxXTwwJiYocj1lWzJdLGVbMl09ZVszXSxlWzNdPXIpLGVbMl0qPXRbMV0sZVszXSo9dFsxXSx0WzJdPDAmJihyPWVbMF0sZVswXT1lWzFdLGVbMV09ciksZVswXSo9dFsyXSxlWzFdKj10WzJdKSxlWzBdKz10WzRdLGVbMV0rPXRbNF0sZVsyXSs9dFs1XSxlWzNdKz10WzVdfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsyXSplWzFdLHRbMV0qZVswXSt0WzNdKmVbMV0sdFswXSplWzJdK3RbMl0qZVszXSx0WzFdKmVbMl0rdFszXSplWzNdLHRbMF0qZVs0XSt0WzJdKmVbNV0rdFs0XSx0WzFdKmVbNF0rdFszXSplWzVdK3RbNV1dfX0se2tleToiYXBwbHlUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0qZVswXSt0WzFdKmVbMl0rZVs0XSx0WzBdKmVbMV0rdFsxXSplWzNdK2VbNV1dfX0se2tleToiYXBwbHlJbnZlcnNlVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuWyh0WzBdKmVbM10tdFsxXSplWzJdK2VbMl0qZVs1XS1lWzRdKmVbM10pL3IsKC10WzBdKmVbMV0rdFsxXSplWzBdK2VbNF0qZVsxXS1lWzVdKmVbMF0pL3JdfX0se2tleToiZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUscil7dmFyIG49dC5hcHBseVRyYW5zZm9ybShlLHIpLGk9dC5hcHBseVRyYW5zZm9ybShlLnNsaWNlKDIsNCksciksYT10LmFwcGx5VHJhbnNmb3JtKFtlWzBdLGVbM11dLHIpLG89dC5hcHBseVRyYW5zZm9ybShbZVsyXSxlWzFdXSxyKTtyZXR1cm5bTWF0aC5taW4oblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5taW4oblsxXSxpWzFdLGFbMV0sb1sxXSksTWF0aC5tYXgoblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5tYXgoblsxXSxpWzFdLGFbMV0sb1sxXSldfX0se2tleToiaW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bdFszXS9lLC10WzFdL2UsLXRbMl0vZSx0WzBdL2UsKHRbMl0qdFs1XS10WzRdKnRbM10pL2UsKHRbNF0qdFsxXS10WzVdKnRbMF0pL2VdfX0se2tleToic2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVt0WzBdLHRbMl0sdFsxXSx0WzNdXSxyPXRbMF0qZVswXSt0WzFdKmVbMl0sbj10WzBdKmVbMV0rdFsxXSplWzNdLGk9dFsyXSplWzBdK3RbM10qZVsyXSxhPXRbMl0qZVsxXSt0WzNdKmVbM10sbz0ocithKS8yLHM9TWF0aC5zcXJ0KE1hdGgucG93KHIrYSwyKS00KihyKmEtaSpuKSkvMixsPW8rc3x8MSx1PW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydCh1KV19fSx7a2V5OiJub3JtYWxpemVSZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDApO3JldHVybiB0WzBdPnRbMl0mJihlWzBdPXRbMl0sZVsyXT10WzBdKSx0WzFdPnRbM10mJihlWzFdPXRbM10sZVszXT10WzFdKSxlfX0se2tleToiaW50ZXJzZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgubWF4KE1hdGgubWluKHRbMF0sdFsyXSksTWF0aC5taW4oZVswXSxlWzJdKSksbj1NYXRoLm1pbihNYXRoLm1heCh0WzBdLHRbMl0pLE1hdGgubWF4KGVbMF0sZVsyXSkpO2lmKHI+bilyZXR1cm4gbnVsbDt2YXIgaT1NYXRoLm1heChNYXRoLm1pbih0WzFdLHRbM10pLE1hdGgubWluKGVbMV0sZVszXSkpLGE9TWF0aC5taW4oTWF0aC5tYXgodFsxXSx0WzNdKSxNYXRoLm1heChlWzFdLGVbM10pKTtyZXR1cm4gaT5hP251bGw6W3IsaSxuLGFdfX0se2tleToiYmV6aWVyQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGksYSxvLHMsbCl7Zm9yKHZhciB1LGMsaCxmLGQscCx2LHksbT1bXSxnPVtbXSxbXV0sYj0wO2I8MjsrK2IpaWYoMD09PWI/KGM9Nip0LTEyKnIrNiphLHU9LTMqdCs5KnItOSphKzMqcyxoPTMqci0zKnQpOihjPTYqZS0xMippKzYqbyx1PS0zKmUrOSppLTkqbyszKmwsaD0zKmktMyplKSxNYXRoLmFicyh1KTwxZS0xMil7aWYoTWF0aC5hYnMoYyk8MWUtMTIpY29udGludWU7MDwoZj0taC9jKSYmZjwxJiZtLnB1c2goZil9ZWxzZSB2PWMqYy00KmgqdSx5PU1hdGguc3FydCh2KSx2PDB8fCgwPChkPSgtYyt5KS8oMip1KSkmJmQ8MSYmbS5wdXNoKGQpLDA8KHA9KC1jLXkpLygyKnUpKSYmcDwxJiZtLnB1c2gocCkpO2Zvcih2YXIgXyx3PW0ubGVuZ3RoLEE9dzt3LS07KV89MS0oZj1tW3ddKSxnWzBdW3ddPV8qXypfKnQrMypfKl8qZipyKzMqXypmKmYqYStmKmYqZipzLGdbMV1bd109XypfKl8qZSszKl8qXypmKmkrMypfKmYqZipvK2YqZipmKmw7cmV0dXJuIGdbMF1bQV09dCxnWzFdW0FdPWUsZ1swXVtBKzFdPXMsZ1sxXVtBKzFdPWwsZ1swXS5sZW5ndGg9Z1sxXS5sZW5ndGg9QSsyLFtNYXRoLm1pbi5hcHBseShNYXRoLG4oZ1swXSkpLE1hdGgubWluLmFwcGx5KE1hdGgsbihnWzFdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKGdbMF0pKSxNYXRoLm1heC5hcHBseShNYXRoLG4oZ1sxXSkpXX19XSksdH0oKTtlLlV0aWw9Rjt2YXIgTT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gUih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh0KSl9fSwodCxlLHIpPT57dmFyIG49cigzKTshZ2xvYmFsVGhpcy5idG9hJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5idG9hPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiaW5hcnkiKS50b1N0cmluZygiYmFzZTY0Iil9KSwhZ2xvYmFsVGhpcy5hdG9iJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5hdG9iPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5Iil9KSwhZ2xvYmFsVGhpcy5ET01NYXRyaXgmJm4uaXNOb2RlSlMmJihnbG9iYWxUaGlzLkRPTU1hdHJpeD1yZXF1aXJlKCJjYW52YXMiKS5ET01NYXRyaXgpLCFnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbT1yZXF1aXJlKCJ3ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbnlmaWxsLmpzIikuUmVhZGFibGVTdHJlYW0pLEFycmF5LnByb3RvdHlwZS5hdHx8cig0KSxVaW50OEFycmF5LnByb3RvdHlwZS5hdHx8cig3OCksZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmV8fHIoODgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuaXNOb2RlSlM9dm9pZCAwO3ZhciBuPSEoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBwcm9jZXNzPyJ1bmRlZmluZWQiOnIocHJvY2VzcykpfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTtlLmlzTm9kZUpTPW59LCh0LGUscik9PntyKDUpO3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1uKCJBcnJheSIsImF0Iil9LCh0LGUscik9Pnt2YXIgbj1yKDYpLGk9cig0MyksYT1yKDY3KSxvPXIoNjUpLHM9cig3Mik7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLHI9YShlKSxuPW8odCkscz1uPj0wP246cituO3JldHVybiBzPDB8fHM+PXI/dm9pZCAwOmVbc119fSkscygiYXQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDgpLmYsYT1yKDQ3KSxvPXIoNTEpLHM9cig0MSksbD1yKDU5KSx1PXIoNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaCxmLGQscD10LnRhcmdldCx2PXQuZ2xvYmFsLHk9dC5zdGF0O2lmKHI9dj9uOnk/bltwXXx8cyhwLHt9KToobltwXXx8e30pLnByb3RvdHlwZSlmb3IoYyBpbiBlKXtpZihmPWVbY10saD10LmRvbnRDYWxsR2V0U2V0PyhkPWkocixjKSkmJmQudmFsdWU6cltjXSwhdSh2P2M6cCsoeT8iLiI6IiMiKStjLHQuZm9yY2VkKSYmdm9pZCAwIT09aCl7aWYodHlwZW9mIGY9PXR5cGVvZiBoKWNvbnRpbnVlO2woZixoKX0odC5zaGFtfHxoJiZoLnNoYW0pJiZhKGYsInNoYW0iLCEwKSxvKHIsYyxmLHQpfX19LHQ9Pnt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9ZSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxlKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxlKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGUoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cigxMSksYT1yKDEzKSxvPXIoMTQpLHM9cigxNSksbD1yKDIxKSx1PXIoNDIpLGM9cig0NSksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1uP2g6ZnVuY3Rpb24odCxlKXtpZih0PXModCksZT1sKGUpLGMpdHJ5e3JldHVybiBoKHQsZSl9Y2F0Y2godCl7fWlmKHUodCxlKSlyZXR1cm4gbyghaShhLmYsdCxlKSx0W2VdKX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dC5leHBvcnRzPW4/aS5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoaSxhcmd1bWVudHMpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKX0sKHQsZSk9Pnt2YXIgcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1uJiYhci5jYWxsKHsxOjJ9LDEpO2UuZj1pP2Z1bmN0aW9uKHQpe3ZhciBlPW4odGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06cn0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LCh0LGUscik9Pnt2YXIgbj1yKDE2KSxpPXIoMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMTApLGE9cigxOCksbz1PYmplY3Qscz1uKCIiLnNwbGl0KTt0LmV4cG9ydHM9aSgoZnVuY3Rpb24oKXtyZXR1cm4hbygieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1hKHQpP3ModCwiIik6byh0KX06b30sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9aS5jYWxsLG89biYmaS5iaW5kLmJpbmQoYSxhKTt0LmV4cG9ydHM9bj9vOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KHQsYXJndW1lbnRzKX19fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1uKHt9LnRvU3RyaW5nKSxhPW4oIiIuc2xpY2UpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpLDgsLTEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjApLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXRocm93IGkoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSx0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjIpLGk9cigyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCwic3RyaW5nIik7cmV0dXJuIGkoZSk/ZTplKyIifX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigyMyksYT1yKDI2KSxvPXIoMzMpLHM9cigzNiksbD1yKDM3KSx1PVR5cGVFcnJvcixjPWwoInRvUHJpbWl0aXZlIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCl8fGEodCkpcmV0dXJuIHQ7dmFyIHIsbD1vKHQsYyk7aWYobCl7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPW4obCx0LGUpLCFpKHIpfHxhKHIpKXJldHVybiByO3Rocm93IHUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIikscyh0LGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjQpLGk9cigyNSksYT1pLmFsbDt0LmV4cG9ydHM9aS5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDpuKHQpfHx0PT09YX06ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10Om4odCl9fSwodCxlLHIpPT57dmFyIG49cigyNSksaT1uLmFsbDt0LmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHx0PT09aX06ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9fSx0PT57dmFyIGU9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLHI9dm9pZCAwPT09ZSYmdm9pZCAwIT09ZTt0LmV4cG9ydHM9e2FsbDplLElTX0hUTUxEREE6cn19LCh0LGUscik9Pnt2YXIgbj1yKDI3KSxpPXIoMjQpLGE9cigyOCksbz1yKDI5KSxzPU9iamVjdDt0LmV4cG9ydHM9bz9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPW4oIlN5bWJvbCIpO3JldHVybiBpKGUpJiZhKGUucHJvdG90eXBlLHModCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhyPW5bdF0saShyKT9yOnZvaWQgMCk6blt0XSYmblt0XVtlXTt2YXIgcn19LCh0LGUscik9Pnt2YXIgbj1yKDE3KTt0LmV4cG9ydHM9bih7fS5pc1Byb3RvdHlwZU9mKX0sKHQsZSxyKT0+e3ZhciBuPXIoMzApO3QuZXhwb3J0cz1uJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwodCxlLHIpPT57dmFyIG49cigzMSksaT1yKDEwKTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhaSgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZuJiZuPDQxfSkpfSwodCxlLHIpPT57dmFyIG4saSxhPXIoNyksbz1yKDMyKSxzPWEucHJvY2VzcyxsPWEuRGVubyx1PXMmJnMudmVyc2lvbnN8fGwmJmwudmVyc2lvbixjPXUmJnUudjg7YyYmKGk9KG49Yy5zcGxpdCgiLiIpKVswXT4wJiZuWzBdPDQ/MTorKG5bMF0rblsxXSkpLCFpJiZvJiYoIShuPW8ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxuWzFdPj03NCkmJihuPW8ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihpPStuWzFdKSx0LmV4cG9ydHM9aX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpO3QuZXhwb3J0cz1uKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LCh0LGUscik9Pnt2YXIgbj1yKDM0KSxpPXIoMjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbZV07cmV0dXJuIGkocik/dm9pZCAwOm4ocil9fSwodCxlLHIpPT57dmFyIG49cigyNCksaT1yKDM1KSxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobih0KSlyZXR1cm4gdDt0aHJvdyBhKGkodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sdD0+e3ZhciBlPVN0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlKHQpfWNhdGNoKHQpe3JldHVybiJPYmplY3QifX19LCh0LGUscik9Pnt2YXIgbj1yKDExKSxpPXIoMjQpLGE9cigyMyksbz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscztpZigic3RyaW5nIj09PWUmJmkocj10LnRvU3RyaW5nKSYmIWEocz1uKHIsdCkpKXJldHVybiBzO2lmKGkocj10LnZhbHVlT2YpJiYhYShzPW4ocix0KSkpcmV0dXJuIHM7aWYoInN0cmluZyIhPT1lJiZpKHI9dC50b1N0cmluZykmJiFhKHM9bihyLHQpKSlyZXR1cm4gczt0aHJvdyBvKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigzOCksYT1yKDQyKSxvPXIoNDQpLHM9cigzMCksbD1yKDI5KSx1PWkoIndrcyIpLGM9bi5TeW1ib2wsaD1jJiZjLmZvcixmPWw/YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fG87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHUsdCl8fCFzJiYic3RyaW5nIiE9dHlwZW9mIHVbdF0pe3ZhciBlPSJTeW1ib2wuIit0O3MmJmEoYyx0KT91W3RdPWNbdF06dVt0XT1sJiZoP2goZSk6ZihlKX1yZXR1cm4gdVt0XX19LCh0LGUscik9Pnt2YXIgbj1yKDM5KSxpPXIoNDApOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XXx8KGlbdF09dm9pZCAwIT09ZT9lOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMjYuMSIsbW9kZTpuPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4yNi4xL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9LHQ9Pnt0LmV4cG9ydHM9ITF9LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cig0MSksYT0iX19jb3JlLWpzX3NoYXJlZF9fIixvPW5bYV18fGkoYSx7fSk7dC5leHBvcnRzPW99LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtpKG4sdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtuW3RdPWV9cmV0dXJuIGV9fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDQzKSxhPW4oe30uaGFzT3duUHJvcGVydHkpO3QuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSwodCxlLHIpPT57dmFyIG49cigxOSksaT1PYmplY3Q7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9MCxhPU1hdGgucmFuZG9tKCksbz1uKDEuLnRvU3RyaW5nKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbygrK2krYSwzNil9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApLGE9cig0Nik7dC5leHBvcnRzPSFuJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGEoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDIzKSxhPW4uZG9jdW1lbnQsbz1pKGEpJiZpKGEuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2EuY3JlYXRlRWxlbWVudCh0KTp7fX19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9bj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGkuZih0LGUsYSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0NSksYT1yKDQ5KSxvPXIoNTApLHM9cigyMSksbD1UeXBlRXJyb3IsdT1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9ImVudW1lcmFibGUiLGY9ImNvbmZpZ3VyYWJsZSIsZD0id3JpdGFibGUiO2UuZj1uP2E/ZnVuY3Rpb24odCxlLHIpe2lmKG8odCksZT1zKGUpLG8ociksImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJwcm90b3R5cGUiPT09ZSYmInZhbHVlImluIHImJmQgaW4gciYmIXJbZF0pe3ZhciBuPWModCxlKTtuJiZuW2RdJiYodFtlXT1yLnZhbHVlLHI9e2NvbmZpZ3VyYWJsZTpmIGluIHI/cltmXTpuW2ZdLGVudW1lcmFibGU6aCBpbiByP3JbaF06bltoXSx3cml0YWJsZTohMX0pfXJldHVybiB1KHQsZSxyKX06dTpmdW5jdGlvbih0LGUscil7aWYobyh0KSxlPXMoZSksbyhyKSxpKXRyeXtyZXR1cm4gdSh0LGUscil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IGwoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIHImJih0W2VdPXIudmFsdWUpLHR9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApO3QuZXhwb3J0cz1uJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMjMpLGk9U3RyaW5nLGE9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXJldHVybiB0O3Rocm93IGEoaSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoNDgpLGE9cig1Miksbz1yKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3x8KHM9e30pO3ZhciBsPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6ZTtpZihuKHIpJiZhKHIsdSxzKSxzLmdsb2JhbClsP3RbZV09cjpvKGUscik7ZWxzZXt0cnl7cy51bnNhZmU/dFtlXSYmKGw9ITApOmRlbGV0ZSB0W2VdfWNhdGNoKHQpe31sP3RbZV09cjppLmYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApLGk9cigyNCksYT1yKDQyKSxvPXIoOSkscz1yKDUzKS5DT05GSUdVUkFCTEUsbD1yKDU0KSx1PXIoNTUpLGM9dS5lbmZvcmNlLGg9dS5nZXQsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksZD1vJiYhbigoZnVuY3Rpb24oKXtyZXR1cm4gOCE9PWYoKGZ1bmN0aW9uKCl7fSksImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSkscD1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksdj10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJTeW1ib2woIj09PVN0cmluZyhlKS5zbGljZSgwLDcpJiYoZT0iWyIrU3RyaW5nKGUpLnJlcGxhY2UoL15TeW1ib2xcKChbXildKilcKS8sIiQxIikrIl0iKSxyJiZyLmdldHRlciYmKGU9ImdldCAiK2UpLHImJnIuc2V0dGVyJiYoZT0ic2V0ICIrZSksKCFhKHQsIm5hbWUiKXx8cyYmdC5uYW1lIT09ZSkmJihvP2YodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSk6dC5uYW1lPWUpLGQmJnImJmEociwiYXJpdHkiKSYmdC5sZW5ndGghPT1yLmFyaXR5JiZmKHQsImxlbmd0aCIse3ZhbHVlOnIuYXJpdHl9KTt0cnl7ciYmYShyLCJjb25zdHJ1Y3RvciIpJiZyLmNvbnN0cnVjdG9yP28mJmYodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTp0LnByb3RvdHlwZSYmKHQucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2godCl7fXZhciBuPWModCk7cmV0dXJuIGEobiwic291cmNlIil8fChuLnNvdXJjZT1wLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0fTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9digoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzKSYmaCh0aGlzKS5zb3VyY2V8fGwodGhpcyl9KSwidG9TdHJpbmciKX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQyKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxvPW4mJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1pKGEsIm5hbWUiKSxsPXMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsdT1zJiYoIW58fG4mJm8oYSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7dC5leHBvcnRzPXtFWElTVFM6cyxQUk9QRVI6bCxDT05GSUdVUkFCTEU6dX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMjQpLGE9cig0MCksbz1uKEZ1bmN0aW9uLnRvU3RyaW5nKTtpKGEuaW5zcGVjdFNvdXJjZSl8fChhLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9KSx0LmV4cG9ydHM9YS5pbnNwZWN0U291cmNlfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig1Nikscz1yKDcpLGw9cigyMyksdT1yKDQ3KSxjPXIoNDIpLGg9cig0MCksZj1yKDU3KSxkPXIoNTgpLHA9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIix2PXMuVHlwZUVycm9yLHk9cy5XZWFrTWFwO2lmKG98fGguc3RhdGUpe3ZhciBtPWguc3RhdGV8fChoLnN0YXRlPW5ldyB5KTttLmdldD1tLmdldCxtLmhhcz1tLmhhcyxtLnNldD1tLnNldCxuPWZ1bmN0aW9uKHQsZSl7aWYobS5oYXModCkpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCxtLnNldCh0LGUpLGV9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIG0uZ2V0KHQpfHx7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gbS5oYXModCl9fWVsc2V7dmFyIGc9Zigic3RhdGUiKTtkW2ddPSEwLG49ZnVuY3Rpb24odCxlKXtpZihjKHQsZykpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCx1KHQsZyxlKSxlfSxpPWZ1bmN0aW9uKHQpe3JldHVybiBjKHQsZyk/dFtnXTp7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gYyh0LGcpfX10LmV4cG9ydHM9e3NldDpuLGdldDppLGhhczphLGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/aSh0KTpuKHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByO2lmKCFsKGUpfHwocj1pKGUpKS50eXBlIT09dCl0aHJvdyB2KCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigyNCksYT1uLldlYWtNYXA7dC5leHBvcnRzPWkoYSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoYSkpfSwodCxlLHIpPT57dmFyIG49cigzOCksaT1yKDQ0KSxhPW4oImtleXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbdF18fChhW3RdPWkodCkpfX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cig2MCksYT1yKDgpLG89cig0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIHM9aShlKSxsPW8uZix1PWEuZixjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY107bih0LGgpfHxyJiZuKHIsaCl8fGwodCxoLHUoZSxoKSl9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cigxNyksYT1yKDYxKSxvPXIoNzApLHM9cig1MCksbD1pKFtdLmNvbmNhdCk7dC5leHBvcnRzPW4oIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPWEuZihzKHQpKSxyPW8uZjtyZXR1cm4gcj9sKGUscih0KSk6ZX19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9cig0MiksYT1yKDE1KSxvPXIoNjMpLmluZGV4T2Yscz1yKDU4KSxsPW4oW10ucHVzaCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1hKHQpLHU9MCxjPVtdO2ZvcihyIGluIG4pIWkocyxyKSYmaShuLHIpJiZsKGMscik7Zm9yKDtlLmxlbmd0aD51OylpKG4scj1lW3UrK10pJiYofm8oYyxyKXx8bChjLHIpKTtyZXR1cm4gY319LCh0LGUscik9Pnt2YXIgbj1yKDE1KSxpPXIoNjQpLGE9cig2Nyksbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG8pe3ZhciBzLGw9bihlKSx1PWEobCksYz1pKG8sdSk7aWYodCYmciE9cil7Zm9yKDt1PmM7KWlmKChzPWxbYysrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+YztjKyspaWYoKHR8fGMgaW4gbCkmJmxbY109PT1yKXJldHVybiB0fHxjfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6byghMCksaW5kZXhPZjpvKCExKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWF4LGE9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KTtyZXR1cm4gcjwwP2kocitlLDApOmEocixlKX19LCh0LGUscik9Pnt2YXIgbj1yKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6bihlKX19LHQ9Pnt2YXIgZT1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgbj0rdDtyZXR1cm4obj4wP3I6ZSkobil9fSwodCxlLHIpPT57dmFyIG49cig2OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQubGVuZ3RoKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2kobih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sdD0+e3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwodCxlKT0+e2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDI0KSxhPS8jfFwucHJvdG90eXBlXC4vLG89ZnVuY3Rpb24odCxlKXt2YXIgcj1sW3ModCldO3JldHVybiByPT1jfHxyIT11JiYoaShlKT9uKGUpOiEhZSl9LHM9by5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKGEsIi4iKS50b0xvd2VyQ2FzZSgpfSxsPW8uZGF0YT17fSx1PW8uTkFUSVZFPSJOIixjPW8uUE9MWUZJTEw9IlAiO3QuZXhwb3J0cz1vfSwodCxlLHIpPT57dmFyIG49cigzNyksaT1yKDczKSxhPXIoNDgpLmYsbz1uKCJ1bnNjb3BhYmxlcyIpLHM9QXJyYXkucHJvdG90eXBlO251bGw9PXNbb10mJmEocyxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6aShudWxsKX0pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtzW29dW3RdPSEwfX0sKHQsZSxyKT0+e3ZhciBuLGk9cig1MCksYT1yKDc0KSxvPXIoNjkpLHM9cig1OCksbD1yKDc2KSx1PXIoNDYpLGM9cig1NyksaD0icHJvdG90eXBlIixmPSJzY3JpcHQiLGQ9YygiSUVfUFJPVE8iKSxwPWZ1bmN0aW9uKCl7fSx2PWZ1bmN0aW9uKHQpe3JldHVybiI8IitmKyI+Iit0KyI8LyIrZisiPiJ9LHk9ZnVuY3Rpb24odCl7dC53cml0ZSh2KCIiKSksdC5jbG9zZSgpO3ZhciBlPXQucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gdD1udWxsLGV9LG09ZnVuY3Rpb24oKXt0cnl7bj1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaCh0KXt9dmFyIHQsZSxyO209InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJm4/eShuKTooZT11KCJpZnJhbWUiKSxyPSJqYXZhIitmKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGwuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKHIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUodigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6eShuKTtmb3IodmFyIGk9by5sZW5ndGg7aS0tOylkZWxldGUgbVtoXVtvW2ldXTtyZXR1cm4gbSgpfTtzW2RdPSEwLHQuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8ocFtoXT1pKHQpLHI9bmV3IHAscFtoXT1udWxsLHJbZF09dCk6cj1tKCksdm9pZCAwPT09ZT9yOmEuZihyLGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQ5KSxhPXIoNDgpLG89cig1MCkscz1yKDE1KSxsPXIoNzUpO2UuZj1uJiYhaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe28odCk7Zm9yKHZhciByLG49cyhlKSxpPWwoZSksdT1pLmxlbmd0aCxjPTA7dT5jOylhLmYodCxyPWlbYysrXSxuW3JdKTtyZXR1cm4gdH19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LCh0LGUscik9Pnt2YXIgbj1yKDI3KTt0LmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuW3RdLnByb3RvdHlwZVtlXSl9fSwodCxlLHIpPT57cig3OSl9LCh0LGUscik9Pnt2YXIgbj1yKDgwKSxpPXIoNjcpLGE9cig2NSksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzKSxyPWkoZSksbj1hKHQpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDplW3NdfSkpfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig4MSkscz1yKDkpLGw9cig3KSx1PXIoMjQpLGM9cigyMyksaD1yKDQyKSxmPXIoODIpLGQ9cigzNSkscD1yKDQ3KSx2PXIoNTEpLHk9cig0OCkuZixtPXIoMjgpLGc9cig4NCksYj1yKDg2KSxfPXIoMzcpLHc9cig0NCksQT1yKDU1KSxrPUEuZW5mb3JjZSxTPUEuZ2V0LHg9bC5JbnQ4QXJyYXksRT14JiZ4LnByb3RvdHlwZSxQPWwuVWludDhDbGFtcGVkQXJyYXksVD1QJiZQLnByb3RvdHlwZSxDPXgmJmcoeCksTz1FJiZnKEUpLEY9T2JqZWN0LnByb3RvdHlwZSxNPWwuVHlwZUVycm9yLFI9XygidG9TdHJpbmdUYWciKSxJPXcoIlRZUEVEX0FSUkFZX1RBRyIpLGo9IlR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsTD1vJiYhIWImJiJPcGVyYSIhPT1mKGwub3BlcmEpLEQ9ITEsTj17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LFU9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSxXPWZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7aWYoYyhlKSl7dmFyIHI9UyhlKTtyZXR1cm4gciYmaChyLGopP3Jbal06VyhlKX19LEc9ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4gaChOLGUpfHxoKFUsZSl9O2ZvcihuIGluIE4pKGE9KGk9bFtuXSkmJmkucHJvdG90eXBlKT9rKGEpW2pdPWk6TD0hMTtmb3IobiBpbiBVKShhPShpPWxbbl0pJiZpLnByb3RvdHlwZSkmJihrKGEpW2pdPWkpO2lmKCghTHx8IXUoQyl8fEM9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoQz1mdW5jdGlvbigpe3Rocm93IE0oIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEwpKWZvcihuIGluIE4pbFtuXSYmYihsW25dLEMpO2lmKCghTHx8IU98fE89PT1GKSYmKE89Qy5wcm90b3R5cGUsTCkpZm9yKG4gaW4gTilsW25dJiZiKGxbbl0ucHJvdG90eXBlLE8pO2lmKEwmJmcoVCkhPT1PJiZiKFQsTykscyYmIWgoTyxSKSlmb3IobiBpbiBEPSEwLHkoTyxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKT90aGlzW0ldOnZvaWQgMH19KSxOKWxbbl0mJnAobFtuXSxJLG4pO3QuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpMLFRZUEVEX0FSUkFZX1RBRzpEJiZJLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKEcodCkpcmV0dXJuIHQ7dGhyb3cgTSgiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYodSh0KSYmKCFifHxtKEMsdCkpKXJldHVybiB0O3Rocm93IE0oZCh0KSsiIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLHIsbil7aWYocyl7aWYocilmb3IodmFyIGkgaW4gTil7dmFyIGE9bFtpXTtpZihhJiZoKGEucHJvdG90eXBlLHQpKXRyeXtkZWxldGUgYS5wcm90b3R5cGVbdF19Y2F0Y2gocil7dHJ5e2EucHJvdG90eXBlW3RdPWV9Y2F0Y2godCl7fX19T1t0XSYmIXJ8fHYoTyx0LHI/ZTpMJiZFW3RdfHxlLG4pfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihzKXtpZihiKXtpZihyKWZvcihuIGluIE4paWYoKGk9bFtuXSkmJmgoaSx0KSl0cnl7ZGVsZXRlIGlbdF19Y2F0Y2godCl7fWlmKENbdF0mJiFyKXJldHVybjt0cnl7cmV0dXJuIHYoQyx0LHI/ZTpMJiZDW3RdfHxlKX1jYXRjaCh0KXt9fWZvcihuIGluIE4pIShpPWxbbl0pfHxpW3RdJiYhcnx8dihpLHQsZSl9fSxnZXRUeXBlZEFycmF5Q29uc3RydWN0b3I6Vyxpc1ZpZXc6ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8aChOLGUpfHxoKFUsZSl9LGlzVHlwZWRBcnJheTpHLFR5cGVkQXJyYXk6QyxUeXBlZEFycmF5UHJvdG90eXBlOk99fSx0PT57dC5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXd9LCh0LGUscik9Pnt2YXIgbj1yKDgzKSxpPXIoMjQpLGE9cigxOCksbz1yKDM3KSgidG9TdHJpbmdUYWciKSxzPU9iamVjdCxsPSJBcmd1bWVudHMiPT1hKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPW4/YTpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPXModCksbykpP3I6bD9hKGUpOiJPYmplY3QiPT0obj1hKGUpKSYmaShlLmNhbGxlZSk/IkFyZ3VtZW50cyI6bn19LCh0LGUscik9Pnt2YXIgbj17fTtuW3IoMzcpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhuKX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cigyNCksYT1yKDQzKSxvPXIoNTcpLHM9cig4NSksbD1vKCJJRV9QUk9UTyIpLHU9T2JqZWN0LGM9dS5wcm90b3R5cGU7dC5leHBvcnRzPXM/dS5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXt2YXIgZT1hKHQpO2lmKG4oZSxsKSlyZXR1cm4gZVtsXTt2YXIgcj1lLmNvbnN0cnVjdG9yO3JldHVybiBpKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgdT9jOm51bGx9fSwodCxlLHIpPT57dmFyIG49cigxMCk7dC5leHBvcnRzPSFuKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDUwKSxhPXIoODcpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgdCxlPSExLHI9e307dHJ5eyh0PW4oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpKShyLFtdKSxlPXIgaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGkociksYShuKSxlP3QocixuKTpyLl9fcHJvdG9fXz1uLHJ9fSgpOnZvaWQgMCl9LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPVN0cmluZyxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0fHxuKHQpKXJldHVybiB0O3Rocm93IGEoIkNhbid0IHNldCAiK2kodCkrIiBhcyBhIHByb3RvdHlwZSIpfX0sKHQsZSxyKT0+e3IoODkpLHIoOTYpLHIoOTgpLHIoMTIxKSxyKDEyMyk7dmFyIG49cigxMzIpO3QuZXhwb3J0cz1uLnN0cnVjdHVyZWRDbG9uZX0sKHQsZSxyKT0+e3ZhciBuPXIoMTUpLGk9cig3MiksYT1yKDkwKSxvPXIoNTUpLHM9cig0OCkuZixsPXIoOTEpLHU9cig5NSksYz1yKDM5KSxoPXIoOSksZj0iQXJyYXkgSXRlcmF0b3IiLGQ9by5zZXQscD1vLmdldHRlckZvcihmKTt0LmV4cG9ydHM9bChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe2QodGhpcyx7dHlwZTpmLHRhcmdldDpuKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC50YXJnZXQscj10LmtpbmQsbj10LmluZGV4Kys7cmV0dXJuIWV8fG4+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAsdSh2b2lkIDAsITApKTp1KCJrZXlzIj09cj9uOiJ2YWx1ZXMiPT1yP2Vbbl06W24sZVtuXV0sITEpfSksInZhbHVlcyIpO3ZhciB2PWEuQXJndW1lbnRzPWEuQXJyYXk7aWYoaSgia2V5cyIpLGkoInZhbHVlcyIpLGkoImVudHJpZXMiKSwhYyYmaCYmInZhbHVlcyIhPT12Lm5hbWUpdHJ5e3ModiwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2godCl7fX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDExKSxhPXIoMzkpLG89cig1Mykscz1yKDI0KSxsPXIoOTIpLHU9cig4NCksYz1yKDg2KSxoPXIoOTQpLGY9cig0NyksZD1yKDUxKSxwPXIoMzcpLHY9cig5MCkseT1yKDkzKSxtPW8uUFJPUEVSLGc9by5DT05GSUdVUkFCTEUsYj15Lkl0ZXJhdG9yUHJvdG90eXBlLF89eS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLHc9cCgiaXRlcmF0b3IiKSxBPSJrZXlzIixrPSJ2YWx1ZXMiLFM9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scCx5LEUpe2wocixlLG8pO3ZhciBQLFQsQyxPPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZqKXJldHVybiBqO2lmKCFfJiZ0IGluIFIpcmV0dXJuIFJbdF07c3dpdGNoKHQpe2Nhc2UgQTpjYXNlIGs6Y2FzZSBTOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyl9fSxGPWUrIiBJdGVyYXRvciIsTT0hMSxSPXQucHJvdG90eXBlLEk9Ult3XXx8UlsiQEBpdGVyYXRvciJdfHxwJiZSW3BdLGo9IV8mJkl8fE8ocCksTD0iQXJyYXkiPT1lJiZSLmVudHJpZXN8fEk7aWYoTCYmKFA9dShMLmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZQLm5leHQmJihhfHx1KFApPT09Ynx8KGM/YyhQLGIpOnMoUFt3XSl8fGQoUCx3LHgpKSxoKFAsRiwhMCwhMCksYSYmKHZbRl09eCkpLG0mJnA9PWsmJkkmJkkubmFtZSE9PWsmJighYSYmZz9mKFIsIm5hbWUiLGspOihNPSEwLGo9ZnVuY3Rpb24oKXtyZXR1cm4gaShJLHRoaXMpfSkpLHApaWYoVD17dmFsdWVzOk8oayksa2V5czp5P2o6TyhBKSxlbnRyaWVzOk8oUyl9LEUpZm9yKEMgaW4gVCkoX3x8TXx8IShDIGluIFIpKSYmZChSLEMsVFtDXSk7ZWxzZSBuKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6X3x8TX0sVCk7cmV0dXJuIGEmJiFFfHxSW3ddPT09anx8ZChSLHcsaix7bmFtZTpwfSksdltlXT1qLFR9fSwodCxlLHIpPT57dmFyIG49cig5MykuSXRlcmF0b3JQcm90b3R5cGUsaT1yKDczKSxhPXIoMTQpLG89cig5NCkscz1yKDkwKSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgYz1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1pKG4se25leHQ6YSgrIXUscil9KSxvKHQsYywhMSwhMCksc1tjXT1sLHR9fSwodCxlLHIpPT57dmFyIG4saSxhLG89cigxMCkscz1yKDI0KSxsPXIoMjMpLHU9cig3MyksYz1yKDg0KSxoPXIoNTEpLGY9cigzNyksZD1yKDM5KSxwPWYoIml0ZXJhdG9yIiksdj0hMTtbXS5rZXlzJiYoIm5leHQiaW4oYT1bXS5rZXlzKCkpPyhpPWMoYyhhKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKG49aSk6dj0hMCksIWwobil8fG8oKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIG5bcF0uY2FsbCh0KSE9PXR9KSk/bj17fTpkJiYobj11KG4pKSxzKG5bcF0pfHxoKG4scCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOm4sQlVHR1lfU0FGQVJJX0lURVJBVE9SUzp2fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDQyKSxhPXIoMzcpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dCYmIXImJih0PXQucHJvdG90eXBlKSx0JiYhaSh0LGEpJiZuKHQsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LHQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6dCxkb25lOmV9fX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig1MSksYT1yKDk3KTtufHxpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixhLHt1bnNhZmU6ITB9KX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig4Mik7dC5leHBvcnRzPW4/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK2kodGhpcykrIl0ifX0sKHQsZSxyKT0+e3IoOTkpfSwodCxlLHIpPT57cigxMDApKCJNYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDcpLGE9cigxNyksbz1yKDcxKSxzPXIoNTEpLGw9cigxMDEpLHU9cigxMDgpLGM9cigxMTUpLGg9cigyNCksZj1yKDIwKSxkPXIoMjMpLHA9cigxMCksdj1yKDExNikseT1yKDk0KSxtPXIoMTE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBnPS0xIT09dC5pbmRleE9mKCJNYXAiKSxiPS0xIT09dC5pbmRleE9mKCJXZWFrIiksXz1nPyJzZXQiOiJhZGQiLHc9aVt0XSxBPXcmJncucHJvdG90eXBlLGs9dyxTPXt9LHg9ZnVuY3Rpb24odCl7dmFyIGU9YShBW3RdKTtzKEEsdCwiYWRkIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShiJiYhZCh0KSkmJmUodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gYiYmIWQodCk/dm9pZCAwOmUodGhpcywwPT09dD8wOnQpfToiaGFzIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGImJiFkKHQpKSYmZSh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQscil7cmV0dXJuIGUodGhpcywwPT09dD8wOnQsciksdGhpc30pfTtpZihvKHQsIWgodyl8fCEoYnx8QS5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IHcpLmVudHJpZXMoKS5uZXh0KCl9KSkpKSlrPXIuZ2V0Q29uc3RydWN0b3IoZSx0LGcsXyksbC5lbmFibGUoKTtlbHNlIGlmKG8odCwhMCkpe3ZhciBFPW5ldyBrLFA9RVtfXShiP3t9Oi0wLDEpIT1FLFQ9cCgoZnVuY3Rpb24oKXtFLmhhcygxKX0pKSxDPXYoKGZ1bmN0aW9uKHQpe25ldyB3KHQpfSkpLE89IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyB3LGU9NTtlLS07KXRbX10oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO0N8fCgoaz1lKChmdW5jdGlvbih0LGUpe2ModCxBKTt2YXIgcj1tKG5ldyB3LHQsayk7cmV0dXJuIGYoZSl8fHUoZSxyW19dLHt0aGF0OnIsQVNfRU5UUklFUzpnfSkscn0pKSkucHJvdG90eXBlPUEsQS5jb25zdHJ1Y3Rvcj1rKSwoVHx8TykmJih4KCJkZWxldGUiKSx4KCJoYXMiKSxnJiZ4KCJnZXQiKSksKE98fFApJiZ4KF8pLGImJkEuY2xlYXImJmRlbGV0ZSBBLmNsZWFyfXJldHVybiBTW3RdPWssbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDprIT13fSxTKSx5KGssdCksYnx8ci5zZXRTdHJvbmcoayx0LGcpLGt9fSwodCxlLHIpPT57dmFyIG49cig2KSxpPXIoMTcpLGE9cig1OCksbz1yKDIzKSxzPXIoNDIpLGw9cig0OCkuZix1PXIoNjEpLGM9cigxMDIpLGg9cigxMDUpLGY9cig0NCksZD1yKDEwNykscD0hMSx2PWYoIm1ldGEiKSx5PTAsbT1mdW5jdGlvbih0KXtsKHQsdix7dmFsdWU6e29iamVjdElEOiJPIit5Kyssd2Vha0RhdGE6e319fSl9LGc9dC5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXtnLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgdD11LmYsZT1pKFtdLnNwbGljZSkscj17fTtyW3ZdPTEsdChyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksaT0wLGE9bi5sZW5ndGg7aTxhO2krKylpZihuW2ldPT09dil7ZShuLGksMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6Yy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFzKHQsdikpe2lmKCFoKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7bSh0KX1yZXR1cm4gdFt2XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighcyh0LHYpKXtpZighaCh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTttKHQpfXJldHVybiB0W3ZdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gZCYmcCYmaCh0KSYmIXModCx2KSYmbSh0KSx0fX07YVt2XT0hMH0sKHQsZSxyKT0+e3ZhciBuPXIoMTgpLGk9cigxNSksYT1yKDYxKS5mLG89cigxMDMpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gcyYmIldpbmRvdyI9PW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhKHQpfWNhdGNoKHQpe3JldHVybiBvKHMpfX0odCk6YShpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDY0KSxpPXIoNjcpLGE9cigxMDQpLG89QXJyYXkscz1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbD1pKHQpLHU9bihlLGwpLGM9bih2b2lkIDA9PT1yP2w6cixsKSxoPW8ocyhjLXUsMCkpLGY9MDt1PGM7dSsrLGYrKylhKGgsZix0W3VdKTtyZXR1cm4gaC5sZW5ndGg9ZixofX0sKHQsZSxyKT0+e3ZhciBuPXIoMjEpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPW4oZSk7byBpbiB0P2kuZih0LG8sYSgwLHIpKTp0W29dPXJ9fSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDIzKSxhPXIoMTgpLG89cigxMDYpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTt0LmV4cG9ydHM9bHx8bz9mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighb3x8IkFycmF5QnVmZmVyIiE9YSh0KSkmJighc3x8cyh0KSl9OnN9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciB0PW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYSIse3ZhbHVlOjh9KX19KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwOSksaT1yKDExKSxhPXIoNTApLG89cigzNSkscz1yKDExMSksbD1yKDY3KSx1PXIoMjgpLGM9cigxMTIpLGg9cigxMTMpLGY9cigxMTQpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSx2PXAucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHksbSxnLGIsXyx3LEEsaz1yJiZyLnRoYXQsUz0hKCFyfHwhci5BU19FTlRSSUVTKSx4PSEoIXJ8fCFyLklTX1JFQ09SRCksRT0hKCFyfHwhci5JU19JVEVSQVRPUiksUD0hKCFyfHwhci5JTlRFUlJVUFRFRCksVD1uKGUsayksQz1mdW5jdGlvbih0KXtyZXR1cm4geSYmZih5LCJub3JtYWwiLHQpLG5ldyBwKCEwLHQpfSxPPWZ1bmN0aW9uKHQpe3JldHVybiBTPyhhKHQpLFA/VCh0WzBdLHRbMV0sQyk6VCh0WzBdLHRbMV0pKTpQP1QodCxDKTpUKHQpfTtpZih4KXk9dC5pdGVyYXRvcjtlbHNlIGlmKEUpeT10O2Vsc2V7aWYoIShtPWgodCkpKXRocm93IGQobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMobSkpe2ZvcihnPTAsYj1sKHQpO2I+ZztnKyspaWYoKF89Tyh0W2ddKSkmJnUodixfKSlyZXR1cm4gXztyZXR1cm4gbmV3IHAoITEpfXk9Yyh0LG0pfWZvcih3PXg/dC5uZXh0OnkubmV4dDshKEE9aSh3LHkpKS5kb25lOyl7dHJ5e189TyhBLnZhbHVlKX1jYXRjaCh0KXtmKHksInRocm93Iix0KX1pZigib2JqZWN0Ij09dHlwZW9mIF8mJl8mJnUodixfKSlyZXR1cm4gX31yZXR1cm4gbmV3IHAoITEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEwKSxpPXIoMzQpLGE9cigxMiksbz1uKG4uYmluZCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCksdm9pZCAwPT09ZT90OmE/byh0LGUpOmZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LCh0LGUscik9Pnt2YXIgbj1yKDE4KSxpPXIoMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiRnVuY3Rpb24iPT09bih0KSlyZXR1cm4gaSh0KX19LCh0LGUscik9Pnt2YXIgbj1yKDM3KSxpPXIoOTApLGE9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihpLkFycmF5PT09dHx8b1thXT09PXQpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigzNCksYT1yKDUwKSxvPXIoMzUpLHM9cigxMTMpLGw9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKHQpOmU7aWYoaShyKSlyZXR1cm4gYShuKHIsdCkpO3Rocm93IGwobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKHQsZSxyKT0+e3ZhciBuPXIoODIpLGk9cigzMyksYT1yKDIwKSxvPXIoOTApLHM9cigzNykoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiBpKHQscyl8fGkodCwiQEBpdGVyYXRvciIpfHxvW24odCldfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig1MCksYT1yKDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM7aSh0KTt0cnl7aWYoIShvPWEodCwicmV0dXJuIikpKXtpZigidGhyb3ciPT09ZSl0aHJvdyByO3JldHVybiByfW89bihvLHQpfWNhdGNoKHQpe3M9ITAsbz10fWlmKCJ0aHJvdyI9PT1lKXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBpKG8pLHJ9fSwodCxlLHIpPT57dmFyIG49cigyOCksaT1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlLHQpKXJldHVybiB0O3Rocm93IGkoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwodCxlLHIpPT57dmFyIG49cigzNykoIml0ZXJhdG9yIiksaT0hMTt0cnl7dmFyIGE9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFhKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtpPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFpKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgYT17fTthW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSx0KGEpfWNhdGNoKHQpe31yZXR1cm4gcn19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoMjMpLGE9cig4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzO3JldHVybiBhJiZuKG89ZS5jb25zdHJ1Y3RvcikmJm8hPT1yJiZpKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmEodCxzKSx0fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDczKSxhPXIoMTE5KSxvPXIoMTA5KSxzPXIoMTE1KSxsPXIoMjApLHU9cigxMDgpLGM9cig5MSksaD1yKDk1KSxmPXIoMTIwKSxkPXIoOSkscD1yKDEwMSkuZmFzdEtleSx2PXIoNTUpLHk9di5zZXQsbT12LmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciBoPXQoKGZ1bmN0aW9uKHQsbil7cyh0LGYpLHkodCx7dHlwZTplLGluZGV4OmkobnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLGR8fCh0LnNpemU9MCksbChuKXx8dShuLHRbY10se3RoYXQ6dCxBU19FTlRSSUVTOnJ9KX0pKSxmPWgucHJvdG90eXBlLHY9bShlKSxnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dih0KSxvPWIodCxlKTtyZXR1cm4gbz9vLnZhbHVlPXI6KGEubGFzdD1vPXtpbmRleDppPXAoZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWEubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxhLmZpcnN0fHwoYS5maXJzdD1vKSxuJiYobi5uZXh0PW8pLGQ/YS5zaXplKys6dC5zaXplKyssIkYiIT09aSYmKGEuaW5kZXhbaV09bykpLHR9LGI9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXYodCksaT1wKGUpO2lmKCJGIiE9PWkpcmV0dXJuIG4uaW5kZXhbaV07Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT1lKXJldHVybiByfTtyZXR1cm4gYShmLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD12KHRoaXMpLGU9dC5pbmRleCxyPXQuZmlyc3Q7cjspci5yZW1vdmVkPSEwLHIucHJldmlvdXMmJihyLnByZXZpb3VzPXIucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW3IuaW5kZXhdLHI9ci5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxkP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXYoZSksbj1iKGUsdCk7aWYobil7dmFyIGk9bi5uZXh0LGE9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsYSYmKGEubmV4dD1pKSxpJiYoaS5wcmV2aW91cz1hKSxyLmZpcnN0PT1uJiYoci5maXJzdD1pKSxyLmxhc3Q9PW4mJihyLmxhc3Q9YSksZD9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dih0aGlzKSxuPW8odCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7ZT1lP2UubmV4dDpyLmZpcnN0Oylmb3IobihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFiKHRoaXMsdCl9fSksYShmLHI/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGQmJm4oZiwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMpLnNpemV9fSksaH0sc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lKyIgSXRlcmF0b3IiLGk9bShlKSxhPW0obik7Yyh0LGUsKGZ1bmN0aW9uKHQsZSl7eSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6aSh0KSxraW5kOmUsbGFzdDp2b2lkIDB9KX0pLChmdW5jdGlvbigpe2Zvcih2YXIgdD1hKHRoaXMpLGU9dC5raW5kLHI9dC5sYXN0O3ImJnIucmVtb3ZlZDspcj1yLnByZXZpb3VzO3JldHVybiB0LnRhcmdldCYmKHQubGFzdD1yPXI/ci5uZXh0OnQuc3RhdGUuZmlyc3QpP2goImtleXMiPT1lP3Iua2V5OiJ2YWx1ZXMiPT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdLCExKToodC50YXJnZXQ9dm9pZCAwLGgodm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksZihlKX19fSwodCxlLHIpPT57dmFyIG49cig1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGkgaW4gZSluKHQsaSxlW2ldLHIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cig0OCksYT1yKDM3KSxvPXIoOSkscz1hKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1pLmY7byYmZSYmIWVbc10mJnIoZSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwodCxlLHIpPT57cigxMjIpfSwodCxlLHIpPT57cigxMDApKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuLGk9cigzOSksYT1yKDYpLG89cig3KSxzPXIoMjcpLGw9cigxNyksdT1yKDEwKSxjPXIoNDQpLGg9cigyNCksZj1yKDEyNCksZD1yKDIwKSxwPXIoMjMpLHY9cigyNikseT1yKDEwOCksbT1yKDUwKSxnPXIoODIpLGI9cig0MiksXz1yKDEwNCksdz1yKDQ3KSxBPXIoNjcpLGs9cigxMjUpLFM9cigxMjYpLHg9cigxMjgpLEU9cigzMSksUD1yKDEyOSksVD1yKDEzMCksQz1yKDEzMSksTz1vLk9iamVjdCxGPW8uRGF0ZSxNPW8uRXJyb3IsUj1vLkV2YWxFcnJvcixJPW8uUmFuZ2VFcnJvcixqPW8uUmVmZXJlbmNlRXJyb3IsTD1vLlN5bnRheEVycm9yLEQ9by5UeXBlRXJyb3IsTj1vLlVSSUVycm9yLFU9by5QZXJmb3JtYW5jZU1hcmssVz1vLldlYkFzc2VtYmx5LEc9VyYmVy5Db21waWxlRXJyb3J8fE0sQj1XJiZXLkxpbmtFcnJvcnx8TSxxPVcmJlcuUnVudGltZUVycm9yfHxNLEg9cygiRE9NRXhjZXB0aW9uIiksej1zKCJTZXQiKSxWPXMoIk1hcCIpLFg9Vi5wcm90b3R5cGUsWT1sKFguaGFzKSxLPWwoWC5nZXQpLEo9bChYLnNldCksUT1sKHoucHJvdG90eXBlLmFkZCksJD1zKCJPYmplY3QiLCJrZXlzIiksWj1sKFtdLnB1c2gpLHR0PWwoKCEwKS52YWx1ZU9mKSxldD1sKDEuLnZhbHVlT2YpLHJ0PWwoIiIudmFsdWVPZiksbnQ9bChGLnByb3RvdHlwZS5nZXRUaW1lKSxpdD1jKCJzdHJ1Y3R1cmVkQ2xvbmUiKSxhdD0iRGF0YUNsb25lRXJyb3IiLG90PSJUcmFuc2ZlcnJpbmciLHN0PWZ1bmN0aW9uKHQpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciBlPW5ldyBvLlNldChbN10pLHI9dChlKSxuPXQoTyg3KSk7cmV0dXJuIHI9PWV8fCFyLmhhcyg3KXx8Im9iamVjdCIhPXR5cGVvZiBufHw3IT1ufSkpJiZ0fSxsdD1mdW5jdGlvbih0LGUpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciByPW5ldyBlLG49dCh7YTpyLGI6cn0pO3JldHVybiEobiYmbi5hPT09bi5iJiZuLmEgaW5zdGFuY2VvZiBlJiZuLmEuc3RhY2s9PT1yLnN0YWNrKX0pKX0sdXQ9by5zdHJ1Y3R1cmVkQ2xvbmUsY3Q9aXx8IWx0KHV0LE0pfHwhbHQodXQsSCl8fChuPXV0LCEhdSgoZnVuY3Rpb24oKXt2YXIgdD1uKG5ldyBvLkFnZ3JlZ2F0ZUVycm9yKFsxXSxpdCx7Y2F1c2U6M30pKTtyZXR1cm4iQWdncmVnYXRlRXJyb3IiIT10Lm5hbWV8fDEhPXQuZXJyb3JzWzBdfHx0Lm1lc3NhZ2UhPWl0fHwzIT10LmNhdXNlfSkpKSxodD0hdXQmJnN0KChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUoaXQse2RldGFpbDp0fSkuZGV0YWlsfSkpLGZ0PXN0KHV0KXx8aHQsZHQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEgoIlVuY2xvbmVhYmxlIHR5cGU6ICIrdCxhdCl9LHB0PWZ1bmN0aW9uKHQsZSl7dGhyb3cgbmV3IEgoKGV8fCJDbG9uaW5nIikrIiBvZiAiK3QrIiBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiB0aGlzIGVuZ2luZSIsYXQpfSx2dD1mdW5jdGlvbih0LGUpe2lmKHYodCkmJmR0KCJTeW1ib2wiKSwhcCh0KSlyZXR1cm4gdDtpZihlKXtpZihZKGUsdCkpcmV0dXJuIEsoZSx0KX1lbHNlIGU9bmV3IFY7dmFyIHIsbixpLGEsbCx1LGMsZixkLHksbT1nKHQpLGs9ITE7c3dpdGNoKG0pe2Nhc2UiQXJyYXkiOmk9W10saz0hMDticmVhaztjYXNlIk9iamVjdCI6aT17fSxrPSEwO2JyZWFrO2Nhc2UiTWFwIjppPW5ldyBWLGs9ITA7YnJlYWs7Y2FzZSJTZXQiOmk9bmV3IHosaz0hMDticmVhaztjYXNlIlJlZ0V4cCI6aT1uZXcgUmVnRXhwKHQuc291cmNlLFModCkpO2JyZWFrO2Nhc2UiRXJyb3IiOnN3aXRjaChuPXQubmFtZSl7Y2FzZSJBZ2dyZWdhdGVFcnJvciI6aT1zKCJBZ2dyZWdhdGVFcnJvciIpKFtdKTticmVhaztjYXNlIkV2YWxFcnJvciI6aT1SKCk7YnJlYWs7Y2FzZSJSYW5nZUVycm9yIjppPUkoKTticmVhaztjYXNlIlJlZmVyZW5jZUVycm9yIjppPWooKTticmVhaztjYXNlIlN5bnRheEVycm9yIjppPUwoKTticmVhaztjYXNlIlR5cGVFcnJvciI6aT1EKCk7YnJlYWs7Y2FzZSJVUklFcnJvciI6aT1OKCk7YnJlYWs7Y2FzZSJDb21waWxlRXJyb3IiOmk9RygpO2JyZWFrO2Nhc2UiTGlua0Vycm9yIjppPUIoKTticmVhaztjYXNlIlJ1bnRpbWVFcnJvciI6aT1xKCk7YnJlYWs7ZGVmYXVsdDppPU0oKX1rPSEwO2JyZWFrO2Nhc2UiRE9NRXhjZXB0aW9uIjppPW5ldyBIKHQubWVzc2FnZSx0Lm5hbWUpLGs9ITA7YnJlYWs7Y2FzZSJEYXRhVmlldyI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJCaWdJbnQ2NEFycmF5IjpjYXNlIkJpZ1VpbnQ2NEFycmF5IjpyPW9bbV0scChyKXx8cHQobSksaT1uZXcgcih2dCh0LmJ1ZmZlcixlKSx0LmJ5dGVPZmZzZXQsIkRhdGFWaWV3Ij09PW0/dC5ieXRlTGVuZ3RoOnQubGVuZ3RoKTticmVhaztjYXNlIkRPTVF1YWQiOnRyeXtpPW5ldyBET01RdWFkKHZ0KHQucDEsZSksdnQodC5wMixlKSx2dCh0LnAzLGUpLHZ0KHQucDQsZSkpfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7Y2FzZSJGaWxlTGlzdCI6aWYoYT1mdW5jdGlvbigpe3ZhciB0O3RyeXt0PW5ldyBvLkRhdGFUcmFuc2Zlcn1jYXRjaChlKXt0cnl7dD1uZXcgby5DbGlwYm9hcmRFdmVudCgiIikuY2xpcGJvYXJkRGF0YX1jYXRjaCh0KXt9fXJldHVybiB0JiZ0Lml0ZW1zJiZ0LmZpbGVzP3Q6bnVsbH0oKSl7Zm9yKGw9MCx1PUEodCk7bDx1O2wrKylhLml0ZW1zLmFkZCh2dCh0W2xdLGUpKTtpPWEuZmlsZXN9ZWxzZSBmdD9pPWZ0KHQpOnB0KG0pO2JyZWFrO2Nhc2UiSW1hZ2VEYXRhIjp0cnl7aT1uZXcgSW1hZ2VEYXRhKHZ0KHQuZGF0YSxlKSx0LndpZHRoLHQuaGVpZ2h0LHtjb2xvclNwYWNlOnQuY29sb3JTcGFjZX0pfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7ZGVmYXVsdDppZihmdClpPWZ0KHQpO2Vsc2Ugc3dpdGNoKG0pe2Nhc2UiQmlnSW50IjppPU8odC52YWx1ZU9mKCkpO2JyZWFrO2Nhc2UiQm9vbGVhbiI6aT1PKHR0KHQpKTticmVhaztjYXNlIk51bWJlciI6aT1PKGV0KHQpKTticmVhaztjYXNlIlN0cmluZyI6aT1PKHJ0KHQpKTticmVhaztjYXNlIkRhdGUiOmk9bmV3IEYobnQodCkpO2JyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOihyPW8uRGF0YVZpZXcpfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZXx8cHQobSk7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlKWk9dC5zbGljZSgwKTtlbHNlIGZvcih1PXQuYnl0ZUxlbmd0aCxpPW5ldyBBcnJheUJ1ZmZlcih1KSxkPW5ldyByKHQpLHk9bmV3IHIoaSksbD0wO2w8dTtsKyspeS5zZXRVaW50OChsLGQuZ2V0VWludDgobCkpfWNhdGNoKHQpe3Rocm93IG5ldyBIKCJBcnJheUJ1ZmZlciBpcyBkZXRhY2hlZCIsYXQpfWJyZWFrO2Nhc2UiU2hhcmVkQXJyYXlCdWZmZXIiOmk9dDticmVhaztjYXNlIkJsb2IiOnRyeXtpPXQuc2xpY2UoMCx0LnNpemUsdC50eXBlKX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTVBvaW50IjpjYXNlIkRPTVBvaW50UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21Qb2ludD9yLmZyb21Qb2ludCh0KTpuZXcgcih0LngsdC55LHQueix0LncpfWNhdGNoKHQpe3B0KG0pfWJyZWFrO2Nhc2UiRE9NUmVjdCI6Y2FzZSJET01SZWN0UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21SZWN0P3IuZnJvbVJlY3QodCk6bmV3IHIodC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTU1hdHJpeCI6Y2FzZSJET01NYXRyaXhSZWFkT25seSI6cj1vW21dO3RyeXtpPXIuZnJvbU1hdHJpeD9yLmZyb21NYXRyaXgodCk6bmV3IHIodCl9Y2F0Y2godCl7cHQobSl9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6aCh0LmNsb25lKXx8cHQobSk7dHJ5e2k9dC5jbG9uZSgpfWNhdGNoKHQpe2R0KG0pfWJyZWFrO2Nhc2UiRmlsZSI6dHJ5e2k9bmV3IEZpbGUoW3RdLHQubmFtZSx0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkNyb3BUYXJnZXQiOmNhc2UiQ3J5cHRvS2V5IjpjYXNlIkZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUZpbGVIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUhhbmRsZSI6Y2FzZSJHUFVDb21waWxhdGlvbkluZm8iOmNhc2UiR1BVQ29tcGlsYXRpb25NZXNzYWdlIjpjYXNlIkltYWdlQml0bWFwIjpjYXNlIlJUQ0NlcnRpZmljYXRlIjpjYXNlIldlYkFzc2VtYmx5Lk1vZHVsZSI6cHQobSk7ZGVmYXVsdDpkdChtKX19aWYoSihlLHQsaSksaylzd2l0Y2gobSl7Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmZvcihjPSQodCksbD0wLHU9QShjKTtsPHU7bCsrKWY9Y1tsXSxfKGksZix2dCh0W2ZdLGUpKTticmVhaztjYXNlIk1hcCI6dC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe0ooaSx2dChyLGUpLHZ0KHQsZSkpfSkpO2JyZWFrO2Nhc2UiU2V0Ijp0LmZvckVhY2goKGZ1bmN0aW9uKHQpe1EoaSx2dCh0LGUpKX0pKTticmVhaztjYXNlIkVycm9yIjp3KGksIm1lc3NhZ2UiLHZ0KHQubWVzc2FnZSxlKSksYih0LCJjYXVzZSIpJiZ3KGksImNhdXNlIix2dCh0LmNhdXNlLGUpKSwiQWdncmVnYXRlRXJyb3IiPT1uJiYoaS5lcnJvcnM9dnQodC5lcnJvcnMsZSkpO2Nhc2UiRE9NRXhjZXB0aW9uIjp4JiZ3KGksInN0YWNrIix2dCh0LnN0YWNrLGUpKX1yZXR1cm4gaX0seXQ9dXQmJiF1KChmdW5jdGlvbigpe2lmKFQmJkU+OTJ8fEMmJkU+OTR8fFAmJkU+OTcpcmV0dXJuITE7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKDgpLGU9dXQodCx7dHJhbnNmZXI6W3RdfSk7cmV0dXJuIDAhPXQuYnl0ZUxlbmd0aHx8OCE9ZS5ieXRlTGVuZ3RofSkpO2Eoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLHNoYW06IXl0LGZvcmNlZDpjdH0se3N0cnVjdHVyZWRDbG9uZTpmdW5jdGlvbih0KXt2YXIgZSxyPWsoYXJndW1lbnRzLmxlbmd0aCwxKT4xJiYhZChhcmd1bWVudHNbMV0pP20oYXJndW1lbnRzWzFdKTp2b2lkIDAsbj1yP3IudHJhbnNmZXI6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1uJiZmdW5jdGlvbih0LGUpe2lmKCFwKHQpKXRocm93IEQoIlRyYW5zZmVyIG9wdGlvbiBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UiKTt2YXIgcj1bXTt5KHQsKGZ1bmN0aW9uKHQpe1oocixtKHQpKX0pKTt2YXIgbixpLGEscyxsLHUsYz0wLGQ9QShyKTtpZih5dClmb3Iocz11dChyLHt0cmFuc2ZlcjpyfSk7YzxkOylKKGUscltjXSxzW2MrK10pO2Vsc2UgZm9yKDtjPGQ7KXtpZihuPXJbYysrXSxZKGUsbikpdGhyb3cgbmV3IEgoIkR1cGxpY2F0ZSB0cmFuc2ZlcmFibGUiLGF0KTtzd2l0Y2goaT1nKG4pKXtjYXNlIkltYWdlQml0bWFwIjphPW8uT2Zmc2NyZWVuQ2FudmFzLGYoYSl8fHB0KGksb3QpO3RyeXsodT1uZXcgYShuLndpZHRoLG4uaGVpZ2h0KSkuZ2V0Q29udGV4dCgiYml0bWFwcmVuZGVyZXIiKS50cmFuc2ZlckZyb21JbWFnZUJpdG1hcChuKSxsPXUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXVkaW9EYXRhIjpjYXNlIlZpZGVvRnJhbWUiOmgobi5jbG9uZSkmJmgobi5jbG9zZSl8fHB0KGksb3QpO3RyeXtsPW4uY2xvbmUoKSxuLmNsb3NlKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOmNhc2UiTWVkaWFTb3VyY2VIYW5kbGUiOmNhc2UiTWVzc2FnZVBvcnQiOmNhc2UiT2Zmc2NyZWVuQ2FudmFzIjpjYXNlIlJlYWRhYmxlU3RyZWFtIjpjYXNlIlRyYW5zZm9ybVN0cmVhbSI6Y2FzZSJXcml0YWJsZVN0cmVhbSI6cHQoaSxvdCl9aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgSCgiVGhpcyBvYmplY3QgY2Fubm90IGJlIHRyYW5zZmVycmVkOiAiK2ksYXQpO0ooZSxuLGwpfX0obixlPW5ldyBWKSx2dCh0LGUpfX0pfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDEwKSxhPXIoMjQpLG89cig4Mikscz1yKDI3KSxsPXIoNTQpLHU9ZnVuY3Rpb24oKXt9LGM9W10saD1zKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZj0vXlxzKig/OmNsYXNzfGZ1bmN0aW9uKVxiLyxkPW4oZi5leGVjKSxwPSFmLmV4ZWModSksdj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGgodSxjLHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX0seT1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTtzd2l0Y2gobyh0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gcHx8ISFkKGYsbCh0KSl9Y2F0Y2godCl7cmV0dXJuITB9fTt5LnNoYW09ITAsdC5leHBvcnRzPSFofHxpKChmdW5jdGlvbigpe3ZhciB0O3JldHVybiB2KHYuY2FsbCl8fCF2KE9iamVjdCl8fCF2KChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/eTp2fSx0PT57dmFyIGU9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2lmKHQ8cil0aHJvdyBlKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig0MiksYT1yKDI4KSxvPXIoMTI3KSxzPVJlZ0V4cC5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBzfHxpKHQsImZsYWdzIil8fCFhKHMsdCk/ZTpuKG8sdCl9fSwodCxlLHIpPT57dmFyIG49cig1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKSxpPXIoMTQpO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1FcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIHQpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN0YWNrIixpKDEsNykpLDchPT10LnN0YWNrKX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMTMwKSxpPXIoMTMxKTt0LmV4cG9ydHM9IW4mJiFpJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudH0sdD0+e3QuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIERlbm8mJkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9ufSwodCxlLHIpPT57dmFyIG49cigxOCksaT1yKDcpO3QuZXhwb3J0cz0icHJvY2VzcyI9PW4oaS5wcm9jZXNzKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyk7dC5leHBvcnRzPW59LChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd19wZGZqc19yZXF1aXJlX18pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGV4cG9ydHMuYnVpbGQ9ZXhwb3J0cy5SZW5kZXJUYXNrPWV4cG9ydHMuUERGV29ya2VyVXRpbD1leHBvcnRzLlBERldvcmtlcj1leHBvcnRzLlBERlBhZ2VQcm94eT1leHBvcnRzLlBERkRvY3VtZW50UHJveHk9ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPWV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0PWV4cG9ydHMuTG9vcGJhY2tQb3J0PWV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWV4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9ZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwLGV4cG9ydHMuZ2V0RG9jdW1lbnQ9Z2V0RG9jdW1lbnQsZXhwb3J0cy5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeT1zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSxleHBvcnRzLnZlcnNpb249dm9pZCAwO3ZhciBfdXRpbD1fX3dfcGRmanNfcmVxdWlyZV9fKDEpLF9hbm5vdGF0aW9uX3N0b3JhZ2U9X193X3BkZmpzX3JlcXVpcmVfXygxMzQpLF9kaXNwbGF5X3V0aWxzPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxfZm9udF9sb2FkZXI9X193X3BkZmpzX3JlcXVpcmVfXygxNDApLF9jYW52YXM9X193X3BkZmpzX3JlcXVpcmVfXygxNDEpLF93b3JrZXJfb3B0aW9ucz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NCksX2lzX25vZGU9X193X3BkZmpzX3JlcXVpcmVfXygzKSxfbWVzc2FnZV9oYW5kbGVyPV9fd19wZGZqc19yZXF1aXJlX18oMTQ1KSxfbWV0YWRhdGE9X193X3BkZmpzX3JlcXVpcmVfXygxNDYpLF9vcHRpb25hbF9jb250ZW50X2NvbmZpZz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NyksX3RyYW5zcG9ydF9zdHJlYW09X193X3BkZmpzX3JlcXVpcmVfXygxNDgpLF94ZmFfdGV4dD1fX3dfcGRmanNfcmVxdWlyZV9fKDE0OSk7ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHQsZSl7X2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheSh0KXtyZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5KHQpfHxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCl8fF9ub25JdGVyYWJsZVNwcmVhZCgpfWZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheSh0KX1mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCl7X3JlZ2VuZXJhdG9yUnVudGltZT1mdW5jdGlvbigpe3JldHVybiB0fTt2YXIgdD17fSxlPU9iamVjdC5wcm90b3R5cGUscj1lLmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbih0LGUscil7dFtlXT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e2woe30sIiIpfWNhdGNoKHQpe2w9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXJ9fWZ1bmN0aW9uIHUodCxlLHIsaSl7dmFyIGE9ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBmP2U6ZixvPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLHM9bmV3IHgoaXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp3KHQscixzKX0pLG99ZnVuY3Rpb24gYyh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6dH19fXQud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBwKCl7fXZhciB2PXt9O2wodixhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShFKFtdKSkpO20mJm0hPT1lJiZyLmNhbGwobSxhKSYmKHY9bSk7dmFyIGc9cC5wcm90b3R5cGU9Zi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiBiKHQpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bCh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBfKHQsZSl7ZnVuY3Rpb24gaShuLGEsbyxzKXt2YXIgbD1jKHRbbl0sdCxhKTtpZigidGhyb3ciIT09bC50eXBlKXt2YXIgdT1sLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1fdHlwZW9mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP2UucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe2koIm5leHQiLHQsbyxzKX0pLChmdW5jdGlvbih0KXtpKCJ0aHJvdyIsdCxvLHMpfSkpOmUucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsbyh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gaSgidGhyb3ciLHQsbyxzKX0pKX1zKGwuYXJnKX12YXIgYTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbil7aSh0LHIsZSxuKX0pKX1yZXR1cm4gYT1hP2EudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihpLGEpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1pKXRocm93IGE7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9aSxyLmFyZz1hOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9QShvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGw9Yyh0LGUscik7aWYoIm5vcm1hbCI9PT1sLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsbC5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpsLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWwudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1sLmFyZyl9fX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5tZXRob2Qsbj10Lml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIGUuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmdC5pdGVyYXRvci5yZXR1cm4mJihlLm1ldGhvZD0icmV0dXJuIixlLmFyZz12b2lkIDAsQSh0LGUpLCJ0aHJvdyI9PT1lLm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBpPWMobix0Lml0ZXJhdG9yLGUuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiBlLm1ldGhvZD0idGhyb3ciLGUuYXJnPWkuYXJnLGUuZGVsZWdhdGU9bnVsbCxoO3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8oZVt0LnJlc3VsdE5hbWVdPWEudmFsdWUsZS5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PWUubWV0aG9kJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksZS5kZWxlZ2F0ZT1udWxsLGgpOmE6KGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxlLmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gayh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiB4KHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goayx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBFKHQpe2lmKHQpe3ZhciBlPXRbYV07aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiBlKCl7Zm9yKDsrK248dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG4pKXJldHVybiBlLnZhbHVlPXRbbl0sZS5kb25lPSExLGU7cmV0dXJuIGUudmFsdWU9dm9pZCAwLGUuZG9uZT0hMCxlfTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0OlB9fWZ1bmN0aW9uIFAoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBkLnByb3RvdHlwZT1wLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLG4ocCwiY29uc3RydWN0b3IiLHt2YWx1ZTpkLGNvbmZpZ3VyYWJsZTohMH0pLGQuZGlzcGxheU5hbWU9bChwLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1kfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxwKToodC5fX3Byb3RvX189cCxsKHQscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxiKF8ucHJvdG90eXBlKSxsKF8ucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPV8sdC5hc3luYz1mdW5jdGlvbihlLHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPVByb21pc2UpO3ZhciBvPW5ldyBfKHUoZSxyLG4saSksYSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pKX0sYihnKSxsKGcscywiR2VuZXJhdG9yIiksbChnLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbChnLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gdCgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gdC52YWx1ZT1uLHQuZG9uZT0hMSx0fXJldHVybiB0LmRvbmU9ITAsdH19LHQudmFsdWVzPUUseC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOngscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChTKSwhdClmb3IodmFyIGUgaW4gdGhpcykidCI9PT1lLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgZT10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9dCxlLm5leHQ9cixuJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksISFufWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxvPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksbD1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW25dO2lmKGkudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChpLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxpLmZpbmFsbHlMb2Mpe3ZhciBhPWk7YnJlYWt9fWEmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZhLnRyeUxvYzw9ZSYmZTw9YS5maW5hbGx5TG9jJiYoYT1udWxsKTt2YXIgbz1hP2EuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9ZSxhPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWEuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLGh9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBpPW4uYXJnO1Mocil9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpFKHQpLHJlc3VsdE5hbWU6ZSxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sdH1mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2sodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsX3RvUHJvcGVydHlLZXkobi5rZXkpLG4pfX1mdW5jdGlvbiBfY3JlYXRlQ2xhc3ModCxlLHIpe3JldHVybiBlJiZfZGVmaW5lUHJvcGVydGllcyh0LnByb3RvdHlwZSxlKSxyJiZfZGVmaW5lUHJvcGVydGllcyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCl7dmFyIGU9X3RvUHJpbWl0aXZlKHQsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBfdG9QcmltaXRpdmUodCxlKXtpZigib2JqZWN0IiE9PV90eXBlb2YodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09X3R5cGVvZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWU/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModCxlLHIpe19jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHQsZSxyKXtyZXR1cm4gX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQsX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHQsZSl7cmV0dXJuIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldCh0LF9jbGFzc0V4dHJhY3RGaWVsZERlc2NyaXB0b3IodCxlLCJnZXQiKSl9ZnVuY3Rpb24gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjU2V0KHQsZSxyLG4pe3JldHVybiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNBY2Nlc3ModCxlKSxfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3Iociwic2V0IiksX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQscixuKSxufWZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvclNldCh0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19ZnVuY3Rpb24gX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LGUscil7cmV0dXJuIF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0FjY2Vzcyh0LGUpLF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0ZpZWxkRGVzY3JpcHRvcihyLCJnZXQiKSxfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxyKX1mdW5jdGlvbiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3IodCxlKXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2UrIiBwcml2YXRlIHN0YXRpYyBmaWVsZCBiZWZvcmUgaXRzIGRlY2xhcmF0aW9uIil9ZnVuY3Rpb24gX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljQWNjZXNzKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX1mdW5jdGlvbiBfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfWZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcCh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKHQpe2FzeW5jR2VuZXJhdG9yU3RlcChhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YXN5bmNHZW5lcmF0b3JTdGVwKGEsbixpLG8scywidGhyb3ciLHQpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkodCxlKXtyZXR1cm4gX2FycmF5V2l0aEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5TGltaXQodCxlKXx8X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQsZSl8fF9ub25JdGVyYWJsZVJlc3QoKX1mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX1mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/X2FycmF5TGlrZVRvQXJyYXkodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXModCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH1mdW5jdGlvbiBfdHlwZW9mKHQpe3JldHVybiBfdHlwZW9mPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxfdHlwZW9mKHQpfXZhciBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU9NjU1MzYsUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUPTEwMCxEZWZhdWx0Q2FudmFzRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DYW52YXNGYWN0b3J5O2V4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9RGVmYXVsdENhbnZhc0ZhY3Rvcnk7dmFyIERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeTtleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7dmFyIERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxjcmVhdGVQREZOZXR3b3JrU3RyZWFtO2lmKGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxfaXNfbm9kZS5pc05vZGVKUyl7dmFyIF9yZXF1aXJlPV9fd19wZGZqc19yZXF1aXJlX18oMTUwKSxOb2RlQ2FudmFzRmFjdG9yeT1fcmVxdWlyZS5Ob2RlQ2FudmFzRmFjdG9yeSxOb2RlQ01hcFJlYWRlckZhY3Rvcnk9X3JlcXVpcmUuTm9kZUNNYXBSZWFkZXJGYWN0b3J5LE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fcmVxdWlyZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7ZXhwb3J0cy5EZWZhdWx0Q2FudmFzRmFjdG9yeT1EZWZhdWx0Q2FudmFzRmFjdG9yeT1Ob2RlQ2FudmFzRmFjdG9yeSxleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9Tm9kZUNNYXBSZWFkZXJGYWN0b3J5LGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl9ZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkodCl7Y3JlYXRlUERGTmV0d29ya1N0cmVhbT10fWZ1bmN0aW9uIGdldERvY3VtZW50KHQpe3ZhciBlLHI9bmV3IFBERkRvY3VtZW50TG9hZGluZ1Rhc2s7aWYoInN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgVVJMKWU9e3VybDp0fTtlbHNlIGlmKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKHQpKWU9e2RhdGE6dH07ZWxzZSBpZih0IGluc3RhbmNlb2YgUERGRGF0YVJhbmdlVHJhbnNwb3J0KWU9e3JhbmdlOnR9O2Vsc2V7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgZWl0aGVyIHN0cmluZywgVVJMLCBUeXBlZEFycmF5LCBvciBwYXJhbWV0ZXIgb2JqZWN0LiIpO2lmKCF0LnVybCYmIXQuZGF0YSYmIXQucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlciBvYmplY3Q6IG5lZWQgZWl0aGVyIC5kYXRhLCAucmFuZ2Ugb3IgLnVybCIpO2U9dH12YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9bnVsbCxhPW51bGw7Zm9yKHZhciBvIGluIGUpe3ZhciBzPWVbb107c3dpdGNoKG8pe2Nhc2UidXJsIjppZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7bltvXT1uZXcgVVJMKHMsd2luZG93LmxvY2F0aW9uKS5ocmVmO2NvbnRpbnVlfWNhdGNoKHQpeygwLF91dGlsLndhcm4pKCdDYW5ub3QgY3JlYXRlIHZhbGlkIFVSTDogIicuY29uY2F0KHQsJyIuJykpfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBzfHxzIGluc3RhbmNlb2YgVVJMKXtuW29dPXMudG9TdHJpbmcoKTtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIHVybCBkYXRhOiBlaXRoZXIgc3RyaW5nIG9yIFVSTC1vYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHVybCBwcm9wZXJ0eS4iKTtjYXNlInJhbmdlIjppPXM7Y29udGludWU7Y2FzZSJ3b3JrZXIiOmE9cztjb250aW51ZTtjYXNlImRhdGEiOmlmKF9pc19ub2RlLmlzTm9kZUpTJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlciYmcyBpbnN0YW5jZW9mIEJ1ZmZlciluW29dPW5ldyBVaW50OEFycmF5KHMpO2Vsc2V7aWYocyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpYnJlYWs7aWYoInN0cmluZyI9PXR5cGVvZiBzKW5bb109KDAsX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7ZWxzZSBpZigib2JqZWN0IiE9PV90eXBlb2Yocyl8fG51bGw9PT1zfHxpc05hTihzLmxlbmd0aCkpe2lmKCEoMCxfdXRpbC5pc0FycmF5QnVmZmVyKShzKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgVHlwZWRBcnJheSwgc3RyaW5nLCBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtuW29dPW5ldyBVaW50OEFycmF5KHMpfWVsc2UgbltvXT1uZXcgVWludDhBcnJheShzKX1jb250aW51ZX1uW29dPXN9aWYobi5DTWFwUmVhZGVyRmFjdG9yeT1uLkNNYXBSZWFkZXJGYWN0b3J5fHxEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnksbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1uLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5fHxEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnksbi5pZ25vcmVFcnJvcnM9ITAhPT1uLnN0b3BBdEVycm9ycyxuLmZvbnRFeHRyYVByb3BlcnRpZXM9ITA9PT1uLmZvbnRFeHRyYVByb3BlcnRpZXMsbi5wZGZCdWc9ITA9PT1uLnBkZkJ1ZyxuLmVuYWJsZVhmYT0hMD09PW4uZW5hYmxlWGZhLCghTnVtYmVyLmlzSW50ZWdlcihuLnJhbmdlQ2h1bmtTaXplKXx8bi5yYW5nZUNodW5rU2l6ZTwxKSYmKG4ucmFuZ2VDaHVua1NpemU9REVGQVVMVF9SQU5HRV9DSFVOS19TSVpFKSwoInN0cmluZyIhPXR5cGVvZiBuLmRvY0Jhc2VVcmx8fCgwLF9kaXNwbGF5X3V0aWxzLmlzRGF0YVNjaGVtZSkobi5kb2NCYXNlVXJsKSkmJihuLmRvY0Jhc2VVcmw9bnVsbCksKCFOdW1iZXIuaXNJbnRlZ2VyKG4ubWF4SW1hZ2VTaXplKXx8bi5tYXhJbWFnZVNpemU8LTEpJiYobi5tYXhJbWFnZVNpemU9LTEpLCJzdHJpbmciIT10eXBlb2Ygbi5jTWFwVXJsJiYobi5jTWFwVXJsPW51bGwpLCJzdHJpbmciIT10eXBlb2Ygbi5zdGFuZGFyZEZvbnREYXRhVXJsJiYobi5zdGFuZGFyZEZvbnREYXRhVXJsPW51bGwpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlV29ya2VyRmV0Y2gmJihuLnVzZVdvcmtlckZldGNoPW4uQ01hcFJlYWRlckZhY3Rvcnk9PT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeSYmbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT09PV9kaXNwbGF5X3V0aWxzLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzRXZhbFN1cHBvcnRlZCYmKG4uaXNFdmFsU3VwcG9ydGVkPSEwKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiYobi5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD0hX2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUZvbnRGYWNlJiYobi5kaXNhYmxlRm9udEZhY2U9X2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlU3lzdGVtRm9udHMmJihuLnVzZVN5c3RlbUZvbnRzPSFfaXNfbm9kZS5pc05vZGVKUyYmIW4uZGlzYWJsZUZvbnRGYWNlKSwib2JqZWN0Ij09PV90eXBlb2Yobi5vd25lckRvY3VtZW50KSYmbnVsbCE9PW4ub3duZXJEb2N1bWVudHx8KG4ub3duZXJEb2N1bWVudD1nbG9iYWxUaGlzLmRvY3VtZW50KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVSYW5nZSYmKG4uZGlzYWJsZVJhbmdlPSExKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVTdHJlYW0mJihuLmRpc2FibGVTdHJlYW09ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUF1dG9GZXRjaCYmKG4uZGlzYWJsZUF1dG9GZXRjaD0hMSksKDAsX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKG4udmVyYm9zaXR5KSwhYSl7dmFyIGw9e3ZlcmJvc2l0eTpuLnZlcmJvc2l0eSxwb3J0Ol93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnR9O2E9bC5wb3J0P1BERldvcmtlci5mcm9tUG9ydChsKTpuZXcgUERGV29ya2VyKGwpLHIuX3dvcmtlcj1hfXZhciB1PXIuZG9jSWQ7cmV0dXJuIGEucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHQ9X2ZldGNoRG9jdW1lbnQoYSxuLGksdSksZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dmFyIGU7aT9lPW5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtsZW5ndGg6bi5sZW5ndGgsaW5pdGlhbERhdGE6bi5pbml0aWFsRGF0YSxwcm9ncmVzc2l2ZURvbmU6bi5wcm9ncmVzc2l2ZURvbmUsY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6bi5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSxkaXNhYmxlUmFuZ2U6bi5kaXNhYmxlUmFuZ2UsZGlzYWJsZVN0cmVhbTpuLmRpc2FibGVTdHJlYW19LGkpOm4uZGF0YXx8KGU9Y3JlYXRlUERGTmV0d29ya1N0cmVhbSh7dXJsOm4udXJsLGxlbmd0aDpuLmxlbmd0aCxodHRwSGVhZGVyczpuLmh0dHBIZWFkZXJzLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxyYW5nZUNodW5rU2l6ZTpuLnJhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpuLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOm4uZGlzYWJsZVN0cmVhbX0pKSx0KGUpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdCxlXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9X3NsaWNlZFRvQXJyYXkodCwyKSxpPWVbMF0sbz1lWzFdO2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHM9bmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIodSxpLGEucG9ydCksbD1uZXcgV29ya2VyVHJhbnNwb3J0KHMscixvLG4pO3IuX3RyYW5zcG9ydD1sLHMuc2VuZCgiUmVhZHkiLG51bGwpfSkpfSkpLmNhdGNoKHIuX2NhcGFiaWxpdHkucmVqZWN0KSxyfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHQsZSxyLG4pe3JldHVybiBfZmV0Y2hEb2N1bWVudDIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50Migpe3JldHVybihfZmV0Y2hEb2N1bWVudDI9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighZS5kZXN0cm95ZWQpe3QubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQiKTtjYXNlIDI6cmV0dXJuIG4mJihyLmxlbmd0aD1uLmxlbmd0aCxyLmluaXRpYWxEYXRhPW4uaW5pdGlhbERhdGEsci5wcm9ncmVzc2l2ZURvbmU9bi5wcm9ncmVzc2l2ZURvbmUsci5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZT1uLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKSx0Lm5leHQ9NSxlLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOmksYXBpVmVyc2lvbjoiMy4yLjAiLGRhdGE6ci5kYXRhLHBhc3N3b3JkOnIucGFzc3dvcmQsZGlzYWJsZUF1dG9GZXRjaDpyLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6ci5yYW5nZUNodW5rU2l6ZSxsZW5ndGg6ci5sZW5ndGgsZG9jQmFzZVVybDpyLmRvY0Jhc2VVcmwsZW5hYmxlWGZhOnIuZW5hYmxlWGZhLGV2YWx1YXRvck9wdGlvbnM6e21heEltYWdlU2l6ZTpyLm1heEltYWdlU2l6ZSxkaXNhYmxlRm9udEZhY2U6ci5kaXNhYmxlRm9udEZhY2UsaWdub3JlRXJyb3JzOnIuaWdub3JlRXJyb3JzLGlzRXZhbFN1cHBvcnRlZDpyLmlzRXZhbFN1cHBvcnRlZCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGZvbnRFeHRyYVByb3BlcnRpZXM6ci5mb250RXh0cmFQcm9wZXJ0aWVzLHVzZVN5c3RlbUZvbnRzOnIudXNlU3lzdGVtRm9udHMsY01hcFVybDpyLnVzZVdvcmtlckZldGNoP3IuY01hcFVybDpudWxsLHN0YW5kYXJkRm9udERhdGFVcmw6ci51c2VXb3JrZXJGZXRjaD9yLnN0YW5kYXJkRm9udERhdGFVcmw6bnVsbH19KTtjYXNlIDU6aWYoYT10LnNlbnQsci5kYXRhJiYoci5kYXRhPW51bGwpLCFlLmRlc3Ryb3llZCl7dC5uZXh0PTk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsYSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBfb25VbnN1cHBvcnRlZEZlYXR1cmU9bmV3IFdlYWtNYXAsUERGRG9jdW1lbnRMb2FkaW5nVGFzaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5fY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXI9bnVsbCx0aGlzLmRvY0lkPSJkIi5jb25jYXQoKF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNTZXQodCx0LF9kb2NJZCwoZT1fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfZG9jSWQpLHI9ZSsrLGUpKSxyKSksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5vblBhc3N3b3JkPW51bGwsdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJvblVuc3VwcG9ydGVkRmVhdHVyZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9vblVuc3VwcG9ydGVkRmVhdHVyZSl9LHNldDpmdW5jdGlvbih0KXsoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgb25VbnN1cHBvcnRlZEZlYXR1cmUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHQpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOihlPV9hc3luY1RvR2VuZXJhdG9yKF9yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGU7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5kZXN0cm95ZWQ9ITAsdC5uZXh0PTMsbnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZGVzdHJveSgpO2Nhc2UgMzp0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXImJih0aGlzLl93b3JrZXIuZGVzdHJveSgpLHRoaXMuX3dvcmtlcj1udWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCk7ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPVBERkRvY3VtZW50TG9hZGluZ1Rhc2s7dmFyIF9kb2NJZD17d3JpdGFibGU6ITAsdmFsdWU6MH0sUERGRGF0YVJhbmdlVHJhbnNwb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmxlbmd0aD1lLHRoaXMuaW5pdGlhbERhdGE9cix0aGlzLnByb2dyZXNzaXZlRG9uZT1uLHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9aSx0aGlzLl9yYW5nZUxpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc0xpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzPVtdLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFkZFJhbmdlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2godCl9fSx7a2V5OiJhZGRQcm9ncmVzc0xpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKHQpfX0se2tleToib25EYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9yYW5nZUxpc3RlbmVycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KSgwLHIudmFsdWUpKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25EYXRhUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciBuLGk9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoci5fcHJvZ3Jlc3NMaXN0ZW5lcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOykoMCxuLnZhbHVlKSh0LGUpfWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX0pKX19LHtrZXk6Im9uRGF0YVByb2dyZXNzaXZlUmVhZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspKDAsci52YWx1ZSkodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fSkpfX0se2tleToib25EYXRhUHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHQuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KSgwLGUudmFsdWUpKCl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fSkpfX0se2tleToidHJhbnNwb3J0UmVhZHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6InJlcXVlc3REYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsX3V0aWwudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgUERGRGF0YVJhbmdlVHJhbnNwb3J0LnJlcXVlc3REYXRhUmFuZ2UiKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe319XSksdH0oKTtleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydD1QREZEYXRhUmFuZ2VUcmFuc3BvcnQ7dmFyIFBERkRvY3VtZW50UHJveHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCksdGhpcy5fcGRmSW5mbz1lLHRoaXMuX3RyYW5zcG9ydD1yfXJldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToiYW5ub3RhdGlvblN0b3JhZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuYW5ub3RhdGlvblN0b3JhZ2V9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BkZkluZm8ubnVtUGFnZXN9fSx7a2V5OiJmaW5nZXJwcmludHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZGZJbmZvLmZpbmdlcnByaW50c319LHtrZXk6InN0YXRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50UHJveHkgc3RhdHMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5fdHJhbnNwb3J0LnN0YXRzfX0se2tleToiaXNQdXJlWGZhIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImlzUHVyZVhmYSIsISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpfX0se2tleToiYWxsWGZhSHRtbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZSh0KX19LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgodCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKX19LHtrZXk6ImdldERlc3RpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9uKHQpfX0se2tleToiZ2V0UGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKX19LHtrZXk6ImdldFBhZ2VMYXlvdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCl9fSx7a2V5OiJnZXRWaWV3ZXJQcmVmZXJlbmNlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCl9fSx7a2V5OiJnZXRPcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpfX0se2tleToiZ2V0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERvY0pTQWN0aW9ucygpfX0se2tleToiZ2V0T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE91dGxpbmUoKX19LHtrZXk6ImdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpfX0se2tleToiZ2V0UGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpfX0se2tleToiZ2V0TWFya0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKX19LHtrZXk6InNhdmVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnNhdmVEb2N1bWVudCgpfX0se2tleToiZ2V0RG93bmxvYWRJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKHR8fHRoaXMuaXNQdXJlWGZhKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZ1Rhc2suZGVzdHJveSgpfX0se2tleToibG9hZGluZ1BhcmFtcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nUGFyYW1zfX0se2tleToibG9hZGluZ1Rhc2siLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1Rhc2t9fSx7a2V5OiJnZXRGaWVsZE9iamVjdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRGaWVsZE9iamVjdHMoKX19LHtrZXk6Imhhc0pTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lmhhc0pTQWN0aW9ucygpfX0se2tleToiZ2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldENhbGN1bGF0aW9uT3JkZXJJZHMoKX19XSksdH0oKTtleHBvcnRzLlBERkRvY3VtZW50UHJveHk9UERGRG9jdW1lbnRQcm94eTt2YXIgUERGUGFnZVByb3h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLHRoaXMuX3BhZ2VJbmRleD1lLHRoaXMuX3BhZ2VJbmZvPXIsdGhpcy5fb3duZXJEb2N1bWVudD1pLHRoaXMuX3RyYW5zcG9ydD1uLHRoaXMuX3N0YXRzPWE/bmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcjpudWxsLHRoaXMuX3BkZkJ1Zz1hLHRoaXMuY29tbW9uT2Jqcz1uLmNvbW1vbk9ianMsdGhpcy5vYmpzPW5ldyBQREZPYmplY3RzLHRoaXMuX2JpdG1hcHM9bmV3IFNldCx0aGlzLmNsZWFudXBBZnRlclJlbmRlcj0hMSx0aGlzLnBlbmRpbmdDbGVhbnVwPSExLHRoaXMuX2ludGVudFN0YXRlcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExfXZhciBlO3JldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToicGFnZU51bWJlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmRleCsxfX0se2tleToicm90YXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlfX0se2tleToicmVmIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucmVmfX0se2tleToidXNlclVuaXQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdH19LHtrZXk6InZpZXciLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby52aWV3fX0se2tleToiZ2V0Vmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9dC5zY2FsZSxyPXQucm90YXRpb24sbj12b2lkIDA9PT1yP3RoaXMucm90YXRlOnIsaT10Lm9mZnNldFgsYT12b2lkIDA9PT1pPzA6aSxvPXQub2Zmc2V0WSxzPXZvaWQgMD09PW8/MDpvLGw9dC5kb250RmxpcCx1PXZvaWQgMCE9PWwmJmw7cmV0dXJuIG5ldyBfZGlzcGxheV91dGlscy5QYWdlVmlld3BvcnQoe3ZpZXdCb3g6dGhpcy52aWV3LHNjYWxlOmUscm90YXRpb246bixvZmZzZXRYOmEsb2Zmc2V0WTpzLGRvbnRGbGlwOnV9KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLmludGVudCxlPXZvaWQgMD09PXQ/ImRpc3BsYXkiOnQscj10aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGUpO3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnModGhpcy5fcGFnZUluZGV4LHIucmVuZGVyaW5nSW50ZW50KX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VKU0FjdGlvbnModGhpcy5fcGFnZUluZGV4KX19LHtrZXk6ImlzUHVyZVhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJpc1B1cmVYZmEiLCEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhKX19LHtrZXk6ImdldFhmYSIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZTtyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIiwobnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XSl8fG51bGwpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMsaT10LmNhbnZhc0NvbnRleHQsYT10LnZpZXdwb3J0LG89dC5pbnRlbnQscz12b2lkIDA9PT1vPyJkaXNwbGF5IjpvLGw9dC5hbm5vdGF0aW9uTW9kZSx1PXZvaWQgMD09PWw/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmwsYz10LnRyYW5zZm9ybSxoPXZvaWQgMD09PWM/bnVsbDpjLGY9dC5jYW52YXNGYWN0b3J5LGQ9dm9pZCAwPT09Zj9udWxsOmYscD10LmJhY2tncm91bmQsdj12b2lkIDA9PT1wP251bGw6cCx5PXQub3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSxtPXZvaWQgMD09PXk/bnVsbDp5LGc9dC5hbm5vdGF0aW9uQ2FudmFzTWFwLGI9dm9pZCAwPT09Zz9udWxsOmcsXz10LnBhZ2VDb2xvcnMsdz12b2lkIDA9PT1fP251bGw6XyxBPXQucHJpbnRBbm5vdGF0aW9uU3RvcmFnZSxrPXZvaWQgMD09PUE/bnVsbDpBO251bGw9PT0oZT10aGlzLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiT3ZlcmFsbCIpO3ZhciBTPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQocyx1LGspO3RoaXMucGVuZGluZ0NsZWFudXA9ITEsbXx8KG09dGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpKTt2YXIgeD10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KFMuY2FjaGVLZXkpO3h8fCh4PU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5faW50ZW50U3RhdGVzLnNldChTLmNhY2hlS2V5LHgpKSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQmJihjbGVhclRpbWVvdXQoeC5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCk7dmFyIEUsUD1kfHxuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe293bmVyRG9jdW1lbnQ6dGhpcy5fb3duZXJEb2N1bWVudH0pLFQ9ISEoUy5yZW5kZXJpbmdJbnRlbnQmX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7eC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5fHwoeC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShFPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09RXx8RS50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KFMpKTt2YXIgQz1mdW5jdGlvbih0KXt2YXIgZSxyO3gucmVuZGVyVGFza3MuZGVsZXRlKE8pLChuLmNsZWFudXBBZnRlclJlbmRlcnx8VCkmJihuLnBlbmRpbmdDbGVhbnVwPSEwKSxuLl90cnlDbGVhbnVwKCksdD8oTy5jYXBhYmlsaXR5LnJlamVjdCh0KSxuLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6eCxyZWFzb246dCBpbnN0YW5jZW9mIEVycm9yP3Q6bmV3IEVycm9yKHQpfSkpOk8uY2FwYWJpbGl0eS5yZXNvbHZlKCksbnVsbD09PShlPW4uX3N0YXRzKXx8dm9pZCAwPT09ZXx8ZS50aW1lRW5kKCJSZW5kZXJpbmciKSxudWxsPT09KHI9bi5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIk92ZXJhbGwiKX0sTz1uZXcgSW50ZXJuYWxSZW5kZXJUYXNrKHtjYWxsYmFjazpDLHBhcmFtczp7Y2FudmFzQ29udGV4dDppLHZpZXdwb3J0OmEsdHJhbnNmb3JtOmgsYmFja2dyb3VuZDp2fSxvYmpzOnRoaXMub2Jqcyxjb21tb25PYmpzOnRoaXMuY29tbW9uT2Jqcyxhbm5vdGF0aW9uQ2FudmFzTWFwOmIsb3BlcmF0b3JMaXN0Ongub3BlcmF0b3JMaXN0LHBhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsY2FudmFzRmFjdG9yeTpQLHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZTohVCxwZGZCdWc6dGhpcy5fcGRmQnVnLHBhZ2VDb2xvcnM6d30pOygocj14KS5yZW5kZXJUYXNrc3x8KHIucmVuZGVyVGFza3M9bmV3IFNldCkpLmFkZChPKTt2YXIgRj1PLnRhc2s7cmV0dXJuIFByb21pc2UuYWxsKFt4LmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSxtXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGUscj1fc2xpY2VkVG9BcnJheSh0LDIpLGk9clswXSxhPXJbMV07bi5wZW5kaW5nQ2xlYW51cD9DKCk6KG51bGw9PT0oZT1uLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiUmVuZGVyaW5nIiksTy5pbml0aWFsaXplR3JhcGhpY3Moe3RyYW5zcGFyZW5jeTppLG9wdGlvbmFsQ29udGVudENvbmZpZzphfSksTy5vcGVyYXRvckxpc3RDaGFuZ2VkKCkpfSkpLmNhdGNoKEMpLEZ9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGk9bi5pbnRlbnQsYT12b2lkIDA9PT1pPyJkaXNwbGF5IjppLG89bi5hbm5vdGF0aW9uTW9kZSxzPXZvaWQgMD09PW8/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOm8sbD1uLnByaW50QW5ub3RhdGlvblN0b3JhZ2UsdT12b2lkIDA9PT1sP251bGw6bCxjPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoYSxzLHUsITApLGg9dGhpcy5faW50ZW50U3RhdGVzLmdldChjLmNhY2hlS2V5KTtyZXR1cm4gaHx8KGg9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGMuY2FjaGVLZXksaCkpLGgub3BMaXN0UmVhZENhcGFiaWxpdHl8fCgodD1PYmplY3QuY3JlYXRlKG51bGwpKS5vcGVyYXRvckxpc3RDaGFuZ2VkPWZ1bmN0aW9uKCl7aC5vcGVyYXRvckxpc3QubGFzdENodW5rJiYoaC5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGgub3BlcmF0b3JMaXN0KSxoLnJlbmRlclRhc2tzLmRlbGV0ZSh0KSl9LGgub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksKChlPWgpLnJlbmRlclRhc2tzfHwoZS5yZW5kZXJUYXNrcz1uZXcgU2V0KSkuYWRkKHQpLGgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShyPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09cnx8ci50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGMpKSxoLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJzdHJlYW1UZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10LmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLHI9dm9pZCAwIT09ZSYmZSxuPXQuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT12b2lkIDAhPT1uJiZuO3JldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFRleHRDb250ZW50Iix7cGFnZUluZGV4OnRoaXMuX3BhZ2VJbmRleCxjb21iaW5lVGV4dEl0ZW1zOiEwIT09cixpbmNsdWRlTWFya2VkQ29udGVudDohMD09PWl9LHtoaWdoV2F0ZXJNYXJrOjEwMCxzaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lml0ZW1zLmxlbmd0aH19KX19LHtrZXk6ImdldFRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZih0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIF94ZmFfdGV4dC5YZmFUZXh0LnRleHRDb250ZW50KHQpfSkpO3ZhciBlPXRoaXMuc3RyZWFtVGV4dENvbnRlbnQodCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZ2V0UmVhZGVyKCksaT17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9OyFmdW5jdGlvbiBlKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG4sYT1yLnZhbHVlO3IuZG9uZT90KGkpOihPYmplY3QuYXNzaWduKGkuc3R5bGVzLGEuc3R5bGVzKSwobj1pLml0ZW1zKS5wdXNoLmFwcGx5KG4sX3RvQ29uc3VtYWJsZUFycmF5KGEuaXRlbXMpKSxlKCkpfSkscil9KCl9KSl9fSx7a2V5OiJnZXRTdHJ1Y3RUcmVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0U3RydWN0VHJlZSh0aGlzLl9wYWdlSW5kZXgpfX0se2tleToiX2Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITA7dmFyIHQsZT1bXSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO2lmKHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtpbnRlbnRTdGF0ZTpuLHJlYXNvbjpuZXcgRXJyb3IoIlBhZ2Ugd2FzIGRlc3Ryb3llZC4iKSxmb3JjZTohMH0pLCFuLm9wTGlzdFJlYWRDYXBhYmlsaXR5KXt2YXIgaSxhPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG4ucmVuZGVyVGFza3MpO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOyl7dmFyIG89aS52YWx1ZTtlLnB1c2goby5jb21wbGV0ZWQpLG8uY2FuY2VsKCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMub2Jqcy5jbGVhcigpO3ZhciBzLGw9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXMudmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsUHJvbWlzZS5hbGwoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGVuZGluZ0NsZWFudXA9ITAsdGhpcy5fdHJ5Q2xlYW51cCh0KX19LHtrZXk6Il90cnlDbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMucGVuZGluZ0NsZWFudXApcmV0dXJuITE7dmFyIGUscj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPW4ucmVuZGVyVGFza3MsYT1uLm9wZXJhdG9yTGlzdDtpZihpLnNpemU+MHx8IWEubGFzdENodW5rKXJldHVybiExfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9pbnRlbnRTdGF0ZXMuY2xlYXIoKSx0aGlzLm9ianMuY2xlYXIoKSx0JiZ0aGlzLl9zdGF0cyYmKHRoaXMuX3N0YXRzPW5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIpO3ZhciBvLHM9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KW8udmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsITB9fSx7a2V5OiJfc3RhcnRSZW5kZXJQYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByLG4saT10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGUpO2kmJihudWxsPT09KHI9dGhpcy5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIlBhZ2UgUmVxdWVzdCIpLG51bGw9PT0obj1pLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpfHx2b2lkIDA9PT1ufHxuLnJlc29sdmUodCkpfX0se2tleToiX3JlbmRlclBhZ2VDaHVuayIsdmFsdWU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZS5vcGVyYXRvckxpc3QuZm5BcnJheS5wdXNoKHQuZm5BcnJheVtyXSksZS5vcGVyYXRvckxpc3QuYXJnc0FycmF5LnB1c2godC5hcmdzQXJyYXlbcl0pO2Uub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz10Lmxhc3RDaHVuayxlLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cz10LnNlcGFyYXRlQW5ub3RzO3ZhciBpLGE9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5yZW5kZXJUYXNrcyk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUub3BlcmF0b3JMaXN0Q2hhbmdlZCgpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXQubGFzdENodW5rJiZ0aGlzLl90cnlDbGVhbnVwKCl9fSx7a2V5OiJfcHVtcE9wZXJhdG9yTGlzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucmVuZGVyaW5nSW50ZW50LG49dC5jYWNoZUtleSxpPXQuYW5ub3RhdGlvblN0b3JhZ2VNYXAsYT10aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldE9wZXJhdG9yTGlzdCIse3BhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsaW50ZW50OnIsY2FjaGVLZXk6bixhbm5vdGF0aW9uU3RvcmFnZTppfSkuZ2V0UmVhZGVyKCksbz10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KG4pO28uc3RyZWFtUmVhZGVyPWEsZnVuY3Rpb24gdCgpe2EucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBuPXIudmFsdWU7ci5kb25lP28uc3RyZWFtUmVhZGVyPW51bGw6ZS5fdHJhbnNwb3J0LmRlc3Ryb3llZHx8KGUuX3JlbmRlclBhZ2VDaHVuayhuLG8pLHQoKSl9KSwoZnVuY3Rpb24odCl7aWYoby5zdHJlYW1SZWFkZXI9bnVsbCwhZS5fdHJhbnNwb3J0LmRlc3Ryb3llZCl7aWYoby5vcGVyYXRvckxpc3Qpe28ub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz0hMDt2YXIgcixuPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8ucmVuZGVyVGFza3MpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLm9wZXJhdG9yTGlzdENoYW5nZWQoKX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLl90cnlDbGVhbnVwKCl9aWYoby5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KW8uZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QodCk7ZWxzZXtpZighby5vcExpc3RSZWFkQ2FwYWJpbGl0eSl0aHJvdyB0O28ub3BMaXN0UmVhZENhcGFiaWxpdHkucmVqZWN0KHQpfX19KSl9KCl9fSx7a2V5OiJfYWJvcnRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmludGVudFN0YXRlLG49dC5yZWFzb24saT10LmZvcmNlLGE9dm9pZCAwIT09aSYmaTtpZihyLnN0cmVhbVJlYWRlcil7aWYoci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHIuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCksci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0PW51bGwpLCFhKXtpZihyLnJlbmRlclRhc2tzLnNpemU+MClyZXR1cm47aWYobiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbil7dmFyIG89UkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUO3JldHVybiBuLmV4dHJhRGVsYXk+MCYmbi5leHRyYURlbGF5PDFlMyYmKG8rPW4uZXh0cmFEZWxheSksdm9pZChyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCxlLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6cixyZWFzb246bixmb3JjZTohMH0pfSksbykpfX1pZihyLnN0cmVhbVJlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKG4ubWVzc2FnZSkpLmNhdGNoKChmdW5jdGlvbigpe30pKSxyLnN0cmVhbVJlYWRlcj1udWxsLCF0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKXt2YXIgcyxsPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgdT1fc2xpY2VkVG9BcnJheShzLnZhbHVlLDIpLGM9dVswXTtpZih1WzFdPT09cil7dGhpcy5faW50ZW50U3RhdGVzLmRlbGV0ZShjKTticmVha319fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfXRoaXMuY2xlYW51cCgpfX19fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRzfX1dKSx0fSgpO2V4cG9ydHMuUERGUGFnZVByb3h5PVBERlBhZ2VQcm94eTt2YXIgX2xpc3RlbmVycz1uZXcgV2Vha01hcCxfZGVmZXJyZWQ9bmV3IFdlYWtNYXAsTG9vcGJhY2tQb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2xpc3RlbmVycyx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLF9kZWZlcnJlZCx7d3JpdGFibGU6ITAsdmFsdWU6UHJvbWlzZS5yZXNvbHZlKCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj17ZGF0YTpzdHJ1Y3R1cmVkQ2xvbmUodCxlKX07X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2RlZmVycmVkKS50aGVuKChmdW5jdGlvbigpe3ZhciB0LGU9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHIsX2xpc3RlbmVycykpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmNhbGwocixuKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19KSl9fSx7a2V5OiJhZGRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLnB1c2goZSl9fSx7a2V5OiJyZW1vdmVFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLmluZGV4T2YoZSk7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykuc3BsaWNlKHIsMSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykubGVuZ3RoPTB9fV0pLHR9KCk7ZXhwb3J0cy5Mb29wYmFja1BvcnQ9TG9vcGJhY2tQb3J0O3ZhciBQREZXb3JrZXJVdGlsPXtpc1dvcmtlckRpc2FibGVkOiExLGZhbGxiYWNrV29ya2VyU3JjOm51bGwsZmFrZVdvcmtlcklkOjB9O2lmKGV4cG9ydHMuUERGV29ya2VyVXRpbD1QREZXb3JrZXJVdGlsLF9pc19ub2RlLmlzTm9kZUpTJiYiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSlQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITAsUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz0iLi9wZGYud29ya2VyLmpzIjtlbHNlIGlmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/InVuZGVmaW5lZCI6X3R5cGVvZihkb2N1bWVudCkpKXt2YXIgX2RvY3VtZW50LF9kb2N1bWVudCRjdXJyZW50U2NyaSxwZGZqc0ZpbGVQYXRoPW51bGw9PT0oX2RvY3VtZW50PWRvY3VtZW50KXx8dm9pZCAwPT09X2RvY3VtZW50fHxudWxsPT09KF9kb2N1bWVudCRjdXJyZW50U2NyaT1fZG9jdW1lbnQuY3VycmVudFNjcmlwdCl8fHZvaWQgMD09PV9kb2N1bWVudCRjdXJyZW50U2NyaT92b2lkIDA6X2RvY3VtZW50JGN1cnJlbnRTY3JpLnNyYztwZGZqc0ZpbGVQYXRoJiYoUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz1wZGZqc0ZpbGVQYXRoLnJlcGxhY2UoLyhcLig/Om1pblwuKT9qcykoXD8uKik/JC9pLCIud29ya2VyJDEkMiIpKX1QREZXb3JrZXJVdGlsLmlzU2FtZU9yaWdpbj1mdW5jdGlvbih0LGUpe3ZhciByO3RyeXtpZighKHI9bmV3IFVSTCh0KSkub3JpZ2lufHwibnVsbCI9PT1yLm9yaWdpbilyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgbj1uZXcgVVJMKGUscik7cmV0dXJuIHIub3JpZ2luPT09bi5vcmlnaW59LFBERldvcmtlclV0aWwuY3JlYXRlQ0ROV3JhcHBlcj1mdW5jdGlvbih0KXt2YXIgZT0naW1wb3J0U2NyaXB0cygiJy5jb25jYXQodCwnIik7Jyk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2VdKSl9O3ZhciBQREZXb3JrZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQREZXb3JrZXIoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10Lm5hbWUscj12b2lkIDA9PT1lP251bGw6ZSxuPXQucG9ydCxpPXZvaWQgMD09PW4/bnVsbDpuLGE9dC52ZXJib3NpdHksbz12b2lkIDA9PT1hPygwLF91dGlsLmdldFZlcmJvc2l0eUxldmVsKSgpOmE7aWYoX2NsYXNzQ2FsbENoZWNrKHRoaXMsUERGV29ya2VyKSxpJiZfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KFBERldvcmtlcixQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXMoaSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0LiIpO2lmKHRoaXMubmFtZT1yLHRoaXMuZGVzdHJveWVkPSExLHRoaXMudmVyYm9zaXR5PW8sdGhpcy5fcmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl93ZWJXb3JrZXI9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsLGkpcmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGV29ya2VyLFBERldvcmtlcixfd29ya2VyUG9ydHMpLnNldChpLHRoaXMpLHZvaWQgdGhpcy5faW5pdGlhbGl6ZUZyb21Qb3J0KGkpO3RoaXMuX2luaXRpYWxpemUoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKFBERldvcmtlcixbe2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToicG9ydCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcnR9fSx7a2V5OiJtZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2VIYW5kbGVyfX0se2tleToiX2luaXRpYWxpemVGcm9tUG9ydCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fcG9ydD10LHRoaXMuX21lc3NhZ2VIYW5kbGVyPW5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKCJtYWluIiwid29ya2VyIix0KSx0aGlzLl9tZXNzYWdlSGFuZGxlci5vbigicmVhZHkiLChmdW5jdGlvbigpe30pKSx0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpLHRoaXMuX21lc3NhZ2VIYW5kbGVyLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0aGlzLnZlcmJvc2l0eX0pfX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkJiYhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpe3ZhciBlPVBERldvcmtlci53b3JrZXJTcmM7dHJ5e1BERldvcmtlclV0aWwuaXNTYW1lT3JpZ2luKHdpbmRvdy5sb2NhdGlvbi5ocmVmLGUpfHwoZT1QREZXb3JrZXJVdGlsLmNyZWF0ZUNETldyYXBwZXIobmV3IFVSTChlLHdpbmRvdy5sb2NhdGlvbikuaHJlZikpO3ZhciByPW5ldyBXb3JrZXIoZSksbj1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcigibWFpbiIsIndvcmtlciIsciksaT1mdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4uZGVzdHJveSgpLHIudGVybWluYXRlKCksdC5kZXN0cm95ZWQ/dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOnQuX3NldHVwRmFrZVdvcmtlcigpfSxhPWZ1bmN0aW9uKCl7dC5fd2ViV29ya2VyfHxpKCl9O3IuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4ub24oInRlc3QiLChmdW5jdGlvbihlKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZD9pKCk6ZT8odC5fbWVzc2FnZUhhbmRsZXI9bix0Ll9wb3J0PXIsdC5fd2ViV29ya2VyPXIsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxuLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pKToodC5fc2V0dXBGYWtlV29ya2VyKCksbi5kZXN0cm95KCksci50ZXJtaW5hdGUoKSl9KSksbi5vbigicmVhZHkiLChmdW5jdGlvbihlKXtpZihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZClpKCk7ZWxzZSB0cnl7bygpfWNhdGNoKGUpe3QuX3NldHVwRmFrZVdvcmtlcigpfX0pKTt2YXIgbz1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5O24uc2VuZCgidGVzdCIsdCxbdC5idWZmZXJdKX07cmV0dXJuIHZvaWQgbygpfWNhdGNoKHQpeygwLF91dGlsLmluZm8pKCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLiIpfX10aGlzLl9zZXR1cEZha2VXb3JrZXIoKX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWR8fCgoMCxfdXRpbC53YXJuKSgiU2V0dGluZyB1cCBmYWtlIHdvcmtlci4iKSxQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITApLFBERldvcmtlci5fc2V0dXBGYWtlV29ya2VyR2xvYmFsLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQuZGVzdHJveWVkKXQuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtlbHNle3ZhciByPW5ldyBMb29wYmFja1BvcnQ7dC5fcG9ydD1yO3ZhciBuPSJmYWtlIi5jb25jYXQoUERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrKyksaT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuKyJfd29ya2VyIixuLHIpO2Uuc2V0dXAoaSxyKTt2YXIgYT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuLG4rIl93b3JrZXIiLHIpO3QuX21lc3NhZ2VIYW5kbGVyPWEsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxhLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoJ1NldHRpbmcgdXAgZmFrZSB3b3JrZXIgZmFpbGVkOiAiJy5jb25jYXQoZS5tZXNzYWdlLCciLicpKSl9KSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3dlYldvcmtlciYmKHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKSx0aGlzLl93ZWJXb3JrZXI9bnVsbCksX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldChQREZXb3JrZXIsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZGVsZXRlKHRoaXMuX3BvcnQpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlciYmKHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKSx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsKX19XSxbe2tleToiZnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXR8fCF0LnBvcnQpdGhyb3cgbmV3IEVycm9yKCJQREZXb3JrZXIuZnJvbVBvcnQgLSBpbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUuIik7cmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodGhpcyxQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXModC5wb3J0KT9fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHRoaXMsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZ2V0KHQucG9ydCk6bmV3IFBERldvcmtlcih0KX19LHtrZXk6IndvcmtlclNyYyIsZ2V0OmZ1bmN0aW9uKCl7aWYoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKXJldHVybiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7aWYobnVsbCE9PVBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMpcmV0dXJuIF9pc19ub2RlLmlzTm9kZUpTfHwoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgnTm8gIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjIiBzcGVjaWZpZWQuJyksUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYzt0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpfX0se2tleToiX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3ZhciB0O3JldHVybihudWxsPT09KHQ9Z2xvYmFsVGhpcy5wZGZqc1dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuV29ya2VyTWVzc2FnZUhhbmRsZXIpfHxudWxsfWNhdGNoKHQpe3JldHVybiBudWxsfX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXJHbG9iYWwiLGdldDpmdW5jdGlvbiBnZXQoKXt2YXIgX3RoaXMxMD10aGlzLGxvYWRlcj1mdW5jdGlvbigpe3ZhciBfcmVmMTU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIF9jYWxsZWUzKCl7dmFyIG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcix3b3JrZXI7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKXtmb3IoOzspc3dpdGNoKF9jb250ZXh0My5wcmV2PV9jb250ZXh0My5uZXh0KXtjYXNlIDA6aWYobWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyPV90aGlzMTAuX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciwhbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyKXtfY29udGV4dDMubmV4dD0zO2JyZWFrfXJldHVybiBfY29udGV4dDMuYWJydXB0KCJyZXR1cm4iLG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcik7Y2FzZSAzOmlmKCFfaXNfbm9kZS5pc05vZGVKU3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHJlcXVpcmUpe19jb250ZXh0My5uZXh0PTY7YnJlYWt9cmV0dXJuIHdvcmtlcj1ldmFsKCJyZXF1aXJlIikoX3RoaXMxMC53b3JrZXJTcmMpLF9jb250ZXh0My5hYnJ1cHQoInJldHVybiIsd29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyKTtjYXNlIDY6cmV0dXJuIF9jb250ZXh0My5uZXh0PTgsKDAsX2Rpc3BsYXlfdXRpbHMubG9hZFNjcmlwdCkoX3RoaXMxMC53b3JrZXJTcmMpO2Nhc2UgODpyZXR1cm4gX2NvbnRleHQzLmFicnVwdCgicmV0dXJuIix3aW5kb3cucGRmanNXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXIpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIF9jb250ZXh0My5zdG9wKCl9fSksX2NhbGxlZTMpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gX3JlZjE1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJfc2V0dXBGYWtlV29ya2VyR2xvYmFsIixsb2FkZXIoKSl9fV0pLFBERldvcmtlcn0oKTtleHBvcnRzLlBERldvcmtlcj1QREZXb3JrZXI7dmFyIF93b3JrZXJQb3J0cz17d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdlYWtNYXB9LF9kb2NTdGF0cz1uZXcgV2Vha01hcCxfcGFnZUNhY2hlPW5ldyBXZWFrTWFwLF9wYWdlUHJvbWlzZXM9bmV3IFdlYWtNYXAsX21ldGFkYXRhUHJvbWlzZT1uZXcgV2Vha01hcCxXb3JrZXJUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2RvY1N0YXRzLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZUNhY2hlLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZVByb21pc2VzLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfbWV0YWRhdGFQcm9taXNlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5tZXNzYWdlSGFuZGxlcj1lLHRoaXMubG9hZGluZ1Rhc2s9cix0aGlzLmNvbW1vbk9ianM9bmV3IFBERk9iamVjdHMsdGhpcy5mb250TG9hZGVyPW5ldyBfZm9udF9sb2FkZXIuRm9udExvYWRlcih7b25VbnN1cHBvcnRlZEZlYXR1cmU6dGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSxvd25lckRvY3VtZW50Omkub3duZXJEb2N1bWVudCxzdHlsZUVsZW1lbnQ6aS5zdHlsZUVsZW1lbnR9KSx0aGlzLl9wYXJhbXM9aSxpLnVzZVdvcmtlckZldGNofHwodGhpcy5DTWFwUmVhZGVyRmFjdG9yeT1uZXcgaS5DTWFwUmVhZGVyRmFjdG9yeSh7YmFzZVVybDppLmNNYXBVcmwsaXNDb21wcmVzc2VkOmkuY01hcFBhY2tlZH0pLHRoaXMuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9bmV3IGkuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkoe2Jhc2VVcmw6aS5zdGFuZGFyZEZvbnREYXRhVXJsfSkpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbCx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbCx0aGlzLl9uZXR3b3JrU3RyZWFtPW4sdGhpcy5fZnVsbFJlYWRlcj1udWxsLHRoaXMuX2xhc3RQcm9ncmVzcz1udWxsLHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKX12YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFubm90YXRpb25TdG9yYWdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImFubm90YXRpb25TdG9yYWdlIixuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSl9fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9kb2NTdGF0cyl9fSx7a2V5OiJnZXRSZW5kZXJpbmdJbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10saT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVksYT1udWxsO3N3aXRjaCh0KXtjYXNlImFueSI6aT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWTticmVhaztjYXNlImRpc3BsYXkiOmJyZWFrO2Nhc2UicHJpbnQiOmk9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVDticmVhaztkZWZhdWx0OigwLF91dGlsLndhcm4pKCJnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGludGVudDogIi5jb25jYXQodCkpfXN3aXRjaChlKXtjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkRJU0FCTEU6aSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFO2JyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmJyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TOmkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVM7YnJlYWs7Y2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVfU1RPUkFHRTphPSgoaSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFKSZfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UJiZyIGluc3RhbmNlb2YgX2Fubm90YXRpb25fc3RvcmFnZS5QcmludEFubm90YXRpb25TdG9yYWdlP3I6dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSkuc2VyaWFsaXphYmxlO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwud2FybikoImdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgYW5ub3RhdGlvbk1vZGU6ICIuY29uY2F0KGUpKX1yZXR1cm4gbiYmKGkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUKSx7cmVuZGVyaW5nSW50ZW50OmksY2FjaGVLZXk6IiIuY29uY2F0KGksIl8iKS5jb25jYXQoX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZS5nZXRIYXNoKGEpKSxhbm5vdGF0aW9uU3RvcmFnZU1hcDphfX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KXJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkmJnRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCBkdXJpbmcgb25QYXNzd29yZCBjYWxsYmFjayIpKTt2YXIgZSxyPVtdLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtyLnB1c2goaS5fZGVzdHJveSgpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfcGFnZVByb21pc2VzKS5jbGVhcigpLHRoaXMuaGFzT3duUHJvcGVydHkoImFubm90YXRpb25TdG9yYWdlIikmJnRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO3ZhciBhPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLG51bGwpO3JldHVybiByLnB1c2goYSksUHJvbWlzZS5hbGwocikudGhlbigoZnVuY3Rpb24oKXt0LmNvbW1vbk9ianMuY2xlYXIoKSx0LmZvbnRMb2FkZXIuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfbWV0YWRhdGFQcm9taXNlLG51bGwpLHQuX2dldEZpZWxkT2JqZWN0c1Byb21pc2U9bnVsbCx0Ll9oYXNKU0FjdGlvbnNQcm9taXNlPW51bGwsdC5fbmV0d29ya1N0cmVhbSYmdC5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSksdC5tZXNzYWdlSGFuZGxlciYmKHQubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpLHQubWVzc2FnZUhhbmRsZXI9bnVsbCksdC5kZXN0cm95Q2FwYWJpbGl0eS5yZXNvbHZlKCl9KSx0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToic2V0dXBNZXNzYWdlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5tZXNzYWdlSGFuZGxlcixyPXRoaXMubG9hZGluZ1Rhc2s7ZS5vbigiR2V0UmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuIiksdC5fZnVsbFJlYWRlcj10Ll9uZXR3b3JrU3RyZWFtLmdldEZ1bGxSZWFkZXIoKSx0Ll9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dC5fbGFzdFByb2dyZXNzPXtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH19LHIub25QdWxsPWZ1bmN0aW9uKCl7dC5fZnVsbFJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSZWFkZXIgLSBleHBlY3RlZCBhbiBBcnJheUJ1ZmZlci4iKSxyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoZSksMSxbZV0pKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ci5lcnJvcih0KX0pKX0sci5vbkNhbmNlbD1mdW5jdGlvbihlKXt0Ll9mdWxsUmVhZGVyLmNhbmNlbChlKSxyLnJlYWR5LmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5kZXN0cm95ZWQpdGhyb3cgZX0pKX19KSksZS5vbigiUmVhZGVySGVhZGVyc1JlYWR5IiwoZnVuY3Rpb24oZSl7dmFyIG49KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksaT10Ll9mdWxsUmVhZGVyO3JldHVybiBpLmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe3ZhciBlO2kuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJmkuaXNSYW5nZVN1cHBvcnRlZHx8KHQuX2xhc3RQcm9ncmVzcyYmKG51bGw9PT0oZT1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwocix0Ll9sYXN0UHJvZ3Jlc3MpKSxpLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXIub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbChyLHtsb2FkZWQ6dC5sb2FkZWQsdG90YWw6dC50b3RhbH0pfSksbi5yZXNvbHZlKHtpc1N0cmVhbWluZ1N1cHBvcnRlZDppLmlzU3RyZWFtaW5nU3VwcG9ydGVkLGlzUmFuZ2VTdXBwb3J0ZWQ6aS5pc1JhbmdlU3VwcG9ydGVkLGNvbnRlbnRMZW5ndGg6aS5jb250ZW50TGVuZ3RofSl9KSxuLnJlamVjdCksbi5wcm9taXNlfSkpLGUub24oIkdldFJhbmdlUmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS4iKTt2YXIgbj10Ll9uZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUuYmVnaW4sZS5lbmQpO24/KHIub25QdWxsPWZ1bmN0aW9uKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLiIpLHIuZW5xdWV1ZShuZXcgVWludDhBcnJheShlKSwxLFtlXSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyLmVycm9yKHQpfSkpfSxyLm9uQ2FuY2VsPWZ1bmN0aW9uKGUpe24uY2FuY2VsKGUpLHIucmVhZHkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCF0LmRlc3Ryb3llZCl0aHJvdyBlfSkpfSk6ci5jbG9zZSgpfSkpLGUub24oIkdldERvYyIsKGZ1bmN0aW9uKGUpe3ZhciBuPWUucGRmSW5mbzt0Ll9udW1QYWdlcz1uLm51bVBhZ2VzLHQuX2h0bWxGb3JYZmE9bi5odG1sRm9yWGZhLGRlbGV0ZSBuLmh0bWxGb3JYZmEsci5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KG4sdCkpfSkpLGUub24oIkRvY0V4Y2VwdGlvbiIsKGZ1bmN0aW9uKHQpe3ZhciBlO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOmU9bmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2JyZWFrO2Nhc2UiSW52YWxpZFBERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjplPW5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24odC5tZXNzYWdlLHQuc3RhdHVzKTticmVhaztjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LmRldGFpbHMpO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwudW5yZWFjaGFibGUpKCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLiIpfXIuX2NhcGFiaWxpdHkucmVqZWN0KGUpfSkpLGUub24oIlBhc3N3b3JkUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe2lmKHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyLm9uUGFzc3dvcmQpdHJ5e3Iub25QYXNzd29yZCgoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3QuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QoZSk6dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe3Bhc3N3b3JkOmV9KX0pLGUuY29kZSl9Y2F0Y2goZSl7dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChlKX1lbHNlIHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpKTtyZXR1cm4gdC5fcGFzc3dvcmRDYXBhYmlsaXR5LnByb21pc2V9KSksZS5vbigiRGF0YUxvYWRlZCIsKGZ1bmN0aW9uKGUpe3ZhciBuO251bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubGVuZ3RoLHRvdGFsOmUubGVuZ3RofSksdC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZSl9KSksZS5vbigiU3RhcnRSZW5kZXJQYWdlIiwoZnVuY3Rpb24oZSl7dC5kZXN0cm95ZWR8fF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0LF9wYWdlQ2FjaGUpLmdldChlLnBhZ2VJbmRleCkuX3N0YXJ0UmVuZGVyUGFnZShlLnRyYW5zcGFyZW5jeSxlLmNhY2hlS2V5KX0pKSxlLm9uKCJjb21tb25vYmoiLChmdW5jdGlvbihyKXt2YXIgbixpPV9zbGljZWRUb0FycmF5KHIsMyksYT1pWzBdLG89aVsxXSxzPWlbMl07aWYoIXQuZGVzdHJveWVkJiYhdC5jb21tb25PYmpzLmhhcyhhKSlzd2l0Y2gobyl7Y2FzZSJGb250Ijp2YXIgbD10Ll9wYXJhbXM7aWYoImVycm9yImluIHMpe3ZhciB1PXMuZXJyb3I7KDAsX3V0aWwud2FybikoIkVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICIuY29uY2F0KHUpKSx0LmNvbW1vbk9ianMucmVzb2x2ZShhLHUpO2JyZWFrfXZhciBjPW51bGw7bC5wZGZCdWcmJm51bGwhPT0obj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpJiZ2b2lkIDAhPT1uJiZuLmVuYWJsZWQmJihjPXtyZWdpc3RlckZvbnQ6ZnVuY3Rpb24odCxlKXtnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKHQsZSl9fSk7dmFyIGg9bmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChzLHtpc0V2YWxTdXBwb3J0ZWQ6bC5pc0V2YWxTdXBwb3J0ZWQsZGlzYWJsZUZvbnRGYWNlOmwuZGlzYWJsZUZvbnRGYWNlLGlnbm9yZUVycm9yczpsLmlnbm9yZUVycm9ycyxvblVuc3VwcG9ydGVkRmVhdHVyZTp0Ll9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHQpLGZvbnRSZWdpc3RyeTpjfSk7dC5mb250TG9hZGVyLmJpbmQoaCkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlbmRXaXRoUHJvbWlzZSgiRm9udEZhbGxiYWNrIix7aWQ6YX0pfSkpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7IWwuZm9udEV4dHJhUHJvcGVydGllcyYmaC5kYXRhJiYoaC5kYXRhPW51bGwpLHQuY29tbW9uT2Jqcy5yZXNvbHZlKGEsaCl9KSk7YnJlYWs7Y2FzZSJGb250UGF0aCI6Y2FzZSJJbWFnZSI6dC5jb21tb25PYmpzLnJlc29sdmUoYSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlICIuY29uY2F0KG8pKX19KSksZS5vbigib2JqIiwoZnVuY3Rpb24oZSl7dmFyIHI9X3NsaWNlZFRvQXJyYXkoZSw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxvPXJbM107aWYoIXQuZGVzdHJveWVkKXt2YXIgcz1fY2xhc3NQcml2YXRlRmllbGRHZXQodCxfcGFnZUNhY2hlKS5nZXQoaSk7aWYoIXMub2Jqcy5oYXMobikpc3dpdGNoKGEpe2Nhc2UiSW1hZ2UiOmlmKHMub2Jqcy5yZXNvbHZlKG4sbyksbyl7dmFyIGw7aWYoby5iaXRtYXApe3ZhciB1PW8uYml0bWFwO2w9by53aWR0aCpvLmhlaWdodCo0LHMuX2JpdG1hcHMuYWRkKHUpfWVsc2V7dmFyIGM7bD0obnVsbD09PShjPW8uZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMubGVuZ3RoKXx8MH1sPjhlNiYmKHMuY2xlYW51cEFmdGVyUmVuZGVyPSEwKX1icmVhaztjYXNlIlBhdHRlcm4iOnMub2Jqcy5yZXNvbHZlKG4sbyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkdvdCB1bmtub3duIG9iamVjdCB0eXBlICIuY29uY2F0KGEpKX19fSkpLGUub24oIkRvY1Byb2dyZXNzIiwoZnVuY3Rpb24oZSl7dmFyIG47dC5kZXN0cm95ZWR8fG51bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9KX0pKSxlLm9uKCJEb2NTdGF0cyIsKGZ1bmN0aW9uKGUpe3QuZGVzdHJveWVkfHxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfZG9jU3RhdHMsT2JqZWN0LmZyZWV6ZSh7c3RyZWFtVHlwZXM6T2JqZWN0LmZyZWV6ZShlLnN0cmVhbVR5cGVzKSxmb250VHlwZXM6T2JqZWN0LmZyZWV6ZShlLmZvbnRUeXBlcyl9KSl9KSksZS5vbigiVW5zdXBwb3J0ZWRGZWF0dXJlIix0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpKSxlLm9uKCJGZXRjaEJ1aWx0SW5DTWFwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuQ01hcFJlYWRlckZhY3Rvcnk/dC5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSksZS5vbigiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk/dC5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlN0YW5kYXJkRm9udERhdGFGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSl9fSx7a2V5OiJfb25VbnN1cHBvcnRlZEZlYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10LmZlYXR1cmVJZDt0aGlzLmRlc3Ryb3llZHx8bnVsbD09PShlPShyPXRoaXMubG9hZGluZ1Rhc2spLm9uVW5zdXBwb3J0ZWRGZWF0dXJlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHIsbil9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9fSx7a2V5OiJzYXZlRG9jdW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7cmV0dXJuIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2l6ZTw9MCYmKDAsX3V0aWwud2FybikoInNhdmVEb2N1bWVudCBjYWxsZWQgd2hpbGUgYGFubm90YXRpb25TdG9yYWdlYCBpcyBlbXB0eSwgcGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC4iKSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiU2F2ZURvY3VtZW50Iix7aXNQdXJlWGZhOiEhdGhpcy5faHRtbEZvclhmYSxudW1QYWdlczp0aGlzLl9udW1QYWdlcyxhbm5vdGF0aW9uU3RvcmFnZTp0aGlzLmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSxmaWxlbmFtZTpudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZWFkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmZpbGVuYW1lKSYmdm9pZCAwIT09dD90Om51bGx9KS5maW5hbGx5KChmdW5jdGlvbigpe3IuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpfSkpfX0se2tleToiZ2V0UGFnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDw9MHx8dD50aGlzLl9udW1QYWdlcylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJJbnZhbGlkIHBhZ2UgcmVxdWVzdC4iKSk7dmFyIHI9dC0xLG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VQcm9taXNlcykuZ2V0KHIpO2lmKG4pcmV0dXJuIG47dmFyIGk9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2UiLHtwYWdlSW5kZXg6cn0pLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKGUuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVHJhbnNwb3J0IGRlc3Ryb3llZCIpO3ZhciBuPW5ldyBQREZQYWdlUHJveHkocix0LGUsZS5fcGFyYW1zLm93bmVyRG9jdW1lbnQsZS5fcGFyYW1zLnBkZkJ1Zyk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChlLF9wYWdlQ2FjaGUpLnNldChyLG4pLG59KSk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9wYWdlUHJvbWlzZXMpLnNldChyLGkpLGl9fSx7a2V5OiJnZXRQYWdlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiIT09X3R5cGVvZih0KXx8bnVsbD09PXR8fCFOdW1iZXIuaXNJbnRlZ2VyKHQubnVtKXx8dC5udW08MHx8IU51bWJlci5pc0ludGVnZXIodC5nZW4pfHx0LmdlbjwwP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlSW5kZXggcmVxdWVzdC4iKSk6dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VJbmRleCIse251bTp0Lm51bSxnZW46dC5nZW59KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QW5ub3RhdGlvbnMiLHtwYWdlSW5kZXg6dCxpbnRlbnQ6ZX0pfX0se2tleToiZ2V0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlfHwodGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZT10aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RmllbGRPYmplY3RzIixudWxsKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0pTQWN0aW9uc1Byb21pc2V8fCh0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJIYXNKU0FjdGlvbnMiLG51bGwpKX19LHtrZXk6ImdldENhbGN1bGF0aW9uT3JkZXJJZHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKX19LHtrZXk6ImdldERlc3RpbmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsbnVsbCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTp0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLHtpZDp0fSl9fSx7a2V5OiJnZXRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTGF5b3V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxheW91dCIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VNb2RlIixudWxsKX19LHtrZXk6ImdldFZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLG51bGwpfX0se2tleToiZ2V0T3BlbkFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE9wZW5BY3Rpb24iLG51bGwpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRBdHRhY2htZW50cyIsbnVsbCl9fSx7a2V5OiJnZXRKYXZhU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0SmF2YVNjcmlwdCIsbnVsbCl9fSx7a2V5OiJnZXREb2NKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXREb2NKU0FjdGlvbnMiLG51bGwpfX0se2tleToiZ2V0UGFnZUpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSlNBY3Rpb25zIix7cGFnZUluZGV4OnR9KX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0U3RydWN0VHJlZSIse3BhZ2VJbmRleDp0fSl9fSx7a2V5OiJnZXRPdXRsaW5lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0T3V0bGluZSIsbnVsbCl9fSx7a2V5OiJnZXRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnLk9wdGlvbmFsQ29udGVudENvbmZpZyh0KX0pKX19LHtrZXk6ImdldFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGVybWlzc2lvbnMiLG51bGwpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSl8fF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9tZXRhZGF0YVByb21pc2UsdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1ldGFkYXRhIixudWxsKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcixuLGksYTtyZXR1cm57aW5mbzplWzBdLG1ldGFkYXRhOmVbMV0/bmV3IF9tZXRhZGF0YS5NZXRhZGF0YShlWzFdKTpudWxsLGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOm51bGwhPT0ocj1udWxsPT09KG49dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PW4/dm9pZCAwOm4uZmlsZW5hbWUpJiZ2b2lkIDAhPT1yP3I6bnVsbCxjb250ZW50TGVuZ3RoOm51bGwhPT0oaT1udWxsPT09KGE9dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29udGVudExlbmd0aCkmJnZvaWQgMCE9PWk/aTpudWxsfX0pKSl9fSx7a2V5OiJnZXRNYXJrSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1hcmtJbmZvIixudWxsKX19LHtrZXk6InN0YXJ0Q2xlYW51cCIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxhPWFyZ3VtZW50cztyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKGU9YS5sZW5ndGg+MCYmdm9pZCAwIT09YVswXSYmYVswXSwhdGhpcy5kZXN0cm95ZWQpe3QubmV4dD0zO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOnJldHVybiB0Lm5leHQ9NSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiQ2xlYW51cCIsbnVsbCk7Y2FzZSA1OnI9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpLHQucHJldj02LHIucygpO2Nhc2UgODppZigobj1yLm4oKSkuZG9uZSl7dC5uZXh0PTE1O2JyZWFrfWlmKChpPW4udmFsdWUpLmNsZWFudXAoKSl7dC5uZXh0PTEzO2JyZWFrfXRocm93IG5ldyBFcnJvcigic3RhcnRDbGVhbnVwOiBQYWdlICIuY29uY2F0KGkucGFnZU51bWJlciwiIGlzIGN1cnJlbnRseSByZW5kZXJpbmcuIikpO2Nhc2UgMTM6dC5uZXh0PTg7YnJlYWs7Y2FzZSAxNTp0Lm5leHQ9MjA7YnJlYWs7Y2FzZSAxNzp0LnByZXY9MTcsdC50MD10LmNhdGNoKDYpLHIuZSh0LnQwKTtjYXNlIDIwOnJldHVybiB0LnByZXY9MjAsci5mKCksdC5maW5pc2goMjApO2Nhc2UgMjM6dGhpcy5jb21tb25PYmpzLmNsZWFyKCksZXx8dGhpcy5mb250TG9hZGVyLmNsZWFyKCksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSxudWxsKSx0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlPW51bGwsdGhpcy5faGFzSlNBY3Rpb25zUHJvbWlzZT1udWxsO2Nhc2UgMjg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s2LDE3LDIwLDIzXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJsb2FkaW5nUGFyYW1zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJhbXM7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDp0LmRpc2FibGVBdXRvRmV0Y2gsZW5hYmxlWGZhOnQuZW5hYmxlWGZhfSl9fV0pLHR9KCksX29ianM9bmV3IFdlYWtNYXAsX2Vuc3VyZU9iaj1uZXcgV2Vha1NldCxQREZPYmplY3RzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLF9lbnN1cmVPYmopLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29ianMse3dyaXRhYmxlOiEwLHZhbHVlOk9iamVjdC5jcmVhdGUobnVsbCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoZSl7dmFyIHI9X2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLF9lbnN1cmVPYmosX2Vuc3VyZU9iajIpLmNhbGwodGhpcyx0KTtyZXR1cm4gci5jYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZShyLmRhdGEpfSkpLG51bGx9dmFyIG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO2lmKG51bGw9PW58fCFuLmNhcGFiaWxpdHkuc2V0dGxlZCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVlc3Rpbmcgb2JqZWN0IHRoYXQgaXNuJ3QgcmVzb2x2ZWQgeWV0ICIuY29uY2F0KHQsIi4iKSk7cmV0dXJuIG4uZGF0YX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO3JldHVybihudWxsPT1lP3ZvaWQgMDplLmNhcGFiaWxpdHkuc2V0dGxlZCl8fCExfX0se2tleToicmVzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1fY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsX2Vuc3VyZU9iaixfZW5zdXJlT2JqMikuY2FsbCh0aGlzLHQpO3IuZGF0YT1lLHIuY2FwYWJpbGl0eS5yZXNvbHZlKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXtfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcyxfb2JqcyxPYmplY3QuY3JlYXRlKG51bGwpKX19XSksdH0oKTtmdW5jdGlvbiBfZW5zdXJlT2JqMih0KXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdfHwoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdPXtjYXBhYmlsaXR5OigwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbH0pfXZhciBfaW50ZXJuYWxSZW5kZXJUYXNrPW5ldyBXZWFrTWFwLFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2ludGVybmFsUmVuZGVyVGFzayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2ssZSksdGhpcy5vbkNvbnRpbnVlPW51bGx9cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJwcm9taXNlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2ludGVybmFsUmVuZGVyVGFzaykuY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLmNhbmNlbChudWxsLHQpfX0se2tleToic2VwYXJhdGVBbm5vdHMiLGdldDpmdW5jdGlvbigpe3ZhciB0PV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cztpZighdClyZXR1cm4hMTt2YXIgZT1fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfaW50ZXJuYWxSZW5kZXJUYXNrKS5hbm5vdGF0aW9uQ2FudmFzTWFwO3JldHVybiB0LmZvcm18fHQuY2FudmFzJiYobnVsbD09ZT92b2lkIDA6ZS5zaXplKT4wfX1dKSx0fSgpO2V4cG9ydHMuUmVuZGVyVGFzaz1SZW5kZXJUYXNrO3ZhciBJbnRlcm5hbFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUuY2FsbGJhY2ssbj1lLnBhcmFtcyxpPWUub2JqcyxhPWUuY29tbW9uT2JqcyxvPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxzPWUub3BlcmF0b3JMaXN0LGw9ZS5wYWdlSW5kZXgsdT1lLmNhbnZhc0ZhY3RvcnksYz1lLnVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSxoPXZvaWQgMCE9PWMmJmMsZj1lLnBkZkJ1ZyxkPXZvaWQgMCE9PWYmJmYscD1lLnBhZ2VDb2xvcnMsdj12b2lkIDA9PT1wP251bGw6cDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmNhbGxiYWNrPXIsdGhpcy5wYXJhbXM9bix0aGlzLm9ianM9aSx0aGlzLmNvbW1vbk9ianM9YSx0aGlzLmFubm90YXRpb25DYW52YXNNYXA9byx0aGlzLm9wZXJhdG9yTGlzdElkeD1udWxsLHRoaXMub3BlcmF0b3JMaXN0PXMsdGhpcy5fcGFnZUluZGV4PWwsdGhpcy5jYW52YXNGYWN0b3J5PXUsdGhpcy5fcGRmQnVnPWQsdGhpcy5wYWdlQ29sb3JzPXYsdGhpcy5ydW5uaW5nPSExLHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPW51bGwsdGhpcy5ncmFwaGljc1JlYWR5PSExLHRoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT0hMD09PWgmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LHRoaXMuY2FuY2VsbGVkPSExLHRoaXMuY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnRhc2s9bmV3IFJlbmRlclRhc2sodGhpcyksdGhpcy5fY2FuY2VsQm91bmQ9dGhpcy5jYW5jZWwuYmluZCh0aGlzKSx0aGlzLl9jb250aW51ZUJvdW5kPXRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyksdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQ9dGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyksdGhpcy5fbmV4dEJvdW5kPXRoaXMuX25leHQuYmluZCh0aGlzKSx0aGlzLl9jYW52YXM9bi5jYW52YXNDb250ZXh0LmNhbnZhc312YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImNvbXBsZXRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX19LHtrZXk6ImluaXRpYWxpemVHcmFwaGljcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHIsbixpPWUudHJhbnNwYXJlbmN5LGE9dm9pZCAwIT09aSYmaSxvPWUub3B0aW9uYWxDb250ZW50Q29uZmlnO2lmKCF0aGlzLmNhbmNlbGxlZCl7aWYodGhpcy5fY2FudmFzKXtpZihfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmhhcyh0aGlzLl9jYW52YXMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC4iKTtfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmFkZCh0aGlzLl9jYW52YXMpfXRoaXMuX3BkZkJ1ZyYmbnVsbCE9PShyPWdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIpJiZ2b2lkIDAhPT1yJiZyLmVuYWJsZWQmJih0aGlzLnN0ZXBwZXI9Z2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlci5jcmVhdGUodGhpcy5fcGFnZUluZGV4KSx0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCksdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50PXRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpKTt2YXIgcz10aGlzLnBhcmFtcyxsPXMuY2FudmFzQ29udGV4dCx1PXMudmlld3BvcnQsYz1zLnRyYW5zZm9ybSxoPXMuYmFja2dyb3VuZDt0aGlzLmdmeD1uZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhsLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LHtvcHRpb25hbENvbnRlbnRDb25maWc6b30sdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwLHRoaXMucGFnZUNvbG9ycyksdGhpcy5nZnguYmVnaW5EcmF3aW5nKHt0cmFuc2Zvcm06Yyx2aWV3cG9ydDp1LHRyYW5zcGFyZW5jeTphLGJhY2tncm91bmQ6aH0pLHRoaXMub3BlcmF0b3JMaXN0SWR4PTAsdGhpcy5ncmFwaGljc1JlYWR5PSEwLG51bGw9PT0obj10aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayl8fHZvaWQgMD09PW58fG4uY2FsbCh0aGlzKX19fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3RoaXMucnVubmluZz0hMSx0aGlzLmNhbmNlbGxlZD0hMCxudWxsPT09KGU9dGhpcy5nZngpfHx2b2lkIDA9PT1lfHxlLmVuZERyYXdpbmcoKSx0aGlzLl9jYW52YXMmJl9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodCx0LF9jYW52YXNJblVzZSkuZGVsZXRlKHRoaXMuX2NhbnZhcyksdGhpcy5jYWxsYmFjayhyfHxuZXcgX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICIuY29uY2F0KHRoaXMuX3BhZ2VJbmRleCsxKSwiY2FudmFzIixuKSl9fSx7a2V5OiJvcGVyYXRvckxpc3RDaGFuZ2VkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3RoaXMuZ3JhcGhpY3NSZWFkeT8obnVsbD09PSh0PXRoaXMuc3RlcHBlcil8fHZvaWQgMD09PXR8fHQudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KSx0aGlzLnJ1bm5pbmd8fHRoaXMuX2NvbnRpbnVlKCkpOnRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrfHwodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2s9dGhpcy5fY29udGludWVCb3VuZCl9fSx7a2V5OiJfY29udGludWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5uaW5nPSEwLHRoaXMuY2FuY2VsbGVkfHwodGhpcy50YXNrLm9uQ29udGludWU/dGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpOnRoaXMuX3NjaGVkdWxlTmV4dCgpKX19LHtrZXk6Il9zY2hlZHVsZU5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt0Ll9uZXh0Qm91bmQoKS5jYXRjaCh0Ll9jYW5jZWxCb3VuZCl9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKX19LHtrZXk6Il9uZXh0Iix2YWx1ZTooZT1fYXN5bmNUb0dlbmVyYXRvcihfcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuY2FuY2VsbGVkKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjp0aGlzLm9wZXJhdG9yTGlzdElkeD10aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LHRoaXMub3BlcmF0b3JMaXN0SWR4LHRoaXMuX2NvbnRpbnVlQm91bmQsdGhpcy5zdGVwcGVyKSx0aGlzLm9wZXJhdG9yTGlzdElkeD09PXRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgmJih0aGlzLnJ1bm5pbmc9ITEsdGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rJiYodGhpcy5nZnguZW5kRHJhd2luZygpLHRoaXMuX2NhbnZhcyYmX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LHQsX2NhbnZhc0luVXNlKS5kZWxldGUodGhpcy5fY2FudmFzKSx0aGlzLmNhbGxiYWNrKCkpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCksX2NhbnZhc0luVXNlPXt3cml0YWJsZTohMCx2YWx1ZTpuZXcgV2Vha1NldH0sdmVyc2lvbj0iMy4yLjAiO2V4cG9ydHMudmVyc2lvbj12ZXJzaW9uO3ZhciBidWlsZD0iIjtleHBvcnRzLmJ1aWxkPWJ1aWxkfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QcmludEFubm90YXRpb25TdG9yYWdlPWUuQW5ub3RhdGlvblN0b3JhZ2U9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNSksbz1yKDEzOSk7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0scyh0LGUpfWZ1bmN0aW9uIGwodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LHUodCl9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUscil7Zyh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gZyh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx3KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwodCk6ZS52YWx1ZX0odCx3KHQsZSwiZ2V0IikpfWZ1bmN0aW9uIHcodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIityKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQodCl9dmFyIEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrU2V0LHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIGU7cCh0aGlzLHQpLGcodGhpcyxlPVMpLGUuYWRkKHRoaXMpLG0odGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLG0odGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdGhpcy5vblNldE1vZGlmaWVkPW51bGwsdGhpcy5vblJlc2V0TW9kaWZpZWQ9bnVsbCx0aGlzLm9uQW5ub3RhdGlvbkVkaXRvcj1udWxsfXJldHVybiB5KHQsW3trZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV8odGhpcyxrKS5nZXQodCk7cmV0dXJuIHZvaWQgMD09PXI/ZTpPYmplY3QuYXNzaWduKGUscil9fSx7a2V5OiJnZXRSYXdWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIF8odGhpcyxrKS5nZXQodCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKF8odGhpcyxrKS5kZWxldGUodCksMD09PV8odGhpcyxrKS5zaXplJiZ0aGlzLnJlc2V0TW9kaWZpZWQoKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3Ipe3ZhciBlLHI9aChfKHRoaXMsaykudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOylpZihlLnZhbHVlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yKXJldHVybn1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLm9uQW5ub3RhdGlvbkVkaXRvcihudWxsKX19fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1fKHRoaXMsaykuZ2V0KHQpLG49ITE7aWYodm9pZCAwIT09cilmb3IodmFyIGk9MCxvPU9iamVjdC5lbnRyaWVzKGUpO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1jKG9baV0sMiksbD1zWzBdLHU9c1sxXTtyW2xdIT09dSYmKG49ITAscltsXT11KX1lbHNlIG49ITAsXyh0aGlzLGspLnNldCh0LGUpO24mJmZ1bmN0aW9uKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfSh0aGlzLFMsRSkuY2FsbCh0aGlzKSxlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3ImJnRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKGUuY29uc3RydWN0b3IuX3R5cGUpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gXyh0aGlzLGspLmhhcyh0KX19LHtrZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLGspLnNpemU+MD8oMCxpLm9iamVjdEZyb21NYXApKF8odGhpcyxrKSk6bnVsbH19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMsaykuc2l6ZX19LHtrZXk6InJlc2V0TW9kaWZpZWQiLHZhbHVlOmZ1bmN0aW9uKCl7Xyh0aGlzLEEpJiYoYih0aGlzLEEsITEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uUmVzZXRNb2RpZmllZCYmdGhpcy5vblJlc2V0TW9kaWZpZWQoKSl9fSx7a2V5OiJwcmludCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUKHRoaXMpfX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZigwPT09Xyh0aGlzLGspLnNpemUpcmV0dXJuIG51bGw7dmFyIHQsZT1uZXcgTWFwLHI9aChfKHRoaXMsaykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIG49Yyh0LnZhbHVlLDIpLGk9blswXSxvPW5bMV0scz1vIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yP28uc2VyaWFsaXplKCk6bztzJiZlLnNldChpLHMpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gZX19XSxbe2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIiI7dmFyIGUscj1uZXcgby5NdXJtdXJIYXNoM182NCxuPWgodCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1jKGUudmFsdWUsMiksYT1pWzBdLHM9aVsxXTtyLnVwZGF0ZSgiIi5jb25jYXQoYSwiOiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShzKSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gci5oZXhkaWdlc3QoKX19XSksdH0oKTtmdW5jdGlvbiBFKCl7Xyh0aGlzLEEpfHwoYih0aGlzLEEsITApLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQmJnRoaXMub25TZXRNb2RpZmllZCgpKX1lLkFubm90YXRpb25TdG9yYWdlPXg7dmFyIFA9bmV3IFdlYWtNYXAsVD1mdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmcyh0LGUpfShvLHQpO3ZhciBlLHIsYT0oZT1vLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIHQsaT11KGUpO2lmKHIpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7dD1SZWZsZWN0LmNvbnN0cnVjdChpLGFyZ3VtZW50cyxhKX1lbHNlIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09bihlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gbCh0KX0odGhpcyx0KX0pO2Z1bmN0aW9uIG8odCl7dmFyIGU7cmV0dXJuIHAodGhpcyxvKSxtKGwoZT1hLmNhbGwodGhpcykpLFAse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxiKGwoZSksUCxzdHJ1Y3R1cmVkQ2xvbmUodC5zZXJpYWxpemFibGUpKSxlfXJldHVybiB5KG8sW3trZXk6InByaW50IixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFByaW50QW5ub3RhdGlvblN0b3JhZ2UucHJpbnQiKX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcyxQKX19XSksb30oeCk7ZS5QcmludEFubm90YXRpb25TdG9yYWdlPVR9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkFubm90YXRpb25FZGl0b3I9dm9pZCAwO3ZhciBpPXIoMTM2KSxhPXIoMSk7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGMobi5rZXkpLG4pfX1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4oZT1jKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGModCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGgodCxlLHIpeyFmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LHAodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHAodCxlLCJnZXQiKSl9ZnVuY3Rpb24gcCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgdj1uZXcgV2Vha01hcCx5PW5ldyBXZWFrTWFwLG09bmV3IFdlYWtNYXAsZz1uZXcgV2Vha01hcCxiPW5ldyBXZWFrTWFwLF89bmV3IFdlYWtNYXAsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksaCh0aGlzLHYse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNpbi5iaW5kKHRoaXMpfSksaCh0aGlzLHkse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNvdXQuYmluZCh0aGlzKX0pLGgodGhpcyxtLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxnLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxiLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHUodGhpcywiX3VpTWFuYWdlciIsbnVsbCksaCh0aGlzLF8se3dyaXRhYmxlOiEwLHZhbHVlOnQuX3pJbmRleCsrfSksdGhpcy5jb25zdHJ1Y3Rvcj09PXQmJigwLGEudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBbm5vdGF0aW9uRWRpdG9yLiIpLHRoaXMucGFyZW50PWUucGFyZW50LHRoaXMuaWQ9ZS5pZCx0aGlzLndpZHRoPXRoaXMuaGVpZ2h0PW51bGwsdGhpcy5wYWdlSW5kZXg9ZS5wYXJlbnQucGFnZUluZGV4LHRoaXMubmFtZT1lLm5hbWUsdGhpcy5kaXY9bnVsbCx0aGlzLl91aU1hbmFnZXI9ZS51aU1hbmFnZXI7dmFyIHI9dGhpcy5wYXJlbnQudmlld3BvcnQsbj1yLnJvdGF0aW9uLGk9ci5yYXdEaW1zLHM9aS5wYWdlV2lkdGgsbD1pLnBhZ2VIZWlnaHQsYz1pLnBhZ2VYLGY9aS5wYWdlWTt0aGlzLnJvdGF0aW9uPW4sdGhpcy5wYWdlRGltZW5zaW9ucz1bcyxsXSx0aGlzLnBhZ2VUcmFuc2xhdGlvbj1bYyxmXTt2YXIgZD1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxwPWRbMF0sdz1kWzFdO3RoaXMueD1lLngvcCx0aGlzLnk9ZS55L3csdGhpcy5pc0F0dGFjaGVkVG9ET009ITF9dmFyIGUscixuO3JldHVybiBlPXQsbj1be2tleToiX2RlZmF1bHRMaW5lQ29sb3IiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfZGVmYXVsdExpbmVDb2xvciIsdGhpcy5fY29sb3JNYW5hZ2VyLmdldEhleENvZGUoIkNhbnZhc1RleHQiKSl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7cGFyZW50OmUsaWQ6ZS5nZXROZXh0SWQoKSx1aU1hbmFnZXI6cn0pO24ucm90YXRpb249dC5yb3RhdGlvbjt2YXIgaT1vKG4ucGFnZURpbWVuc2lvbnMsMiksYT1pWzBdLHM9aVsxXSxsPW8obi5nZXRSZWN0SW5DdXJyZW50Q29vcmRzKHQucmVjdCxzKSw0KSx1PWxbMF0sYz1sWzFdLGg9bFsyXSxmPWxbM107cmV0dXJuIG4ueD11L2Esbi55PWMvcyxuLndpZHRoPWgvYSxuLmhlaWdodD1mL3Msbn19XSwocj1be2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3VpTWFuYWdlci5hZGRDb21tYW5kcyh0KX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci5jdXJyZW50TGF5ZXJ9fSx7a2V5OiJzZXRJbkJhY2tncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PTB9fSx7a2V5OiJzZXRJbkZvcmVncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PWQodGhpcyxfKX19LHtrZXk6InNldFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24odCl7bnVsbCE9PXQmJih0aGlzLnBhZ2VJbmRleD10LnBhZ2VJbmRleCx0aGlzLnBhZ2VEaW1lbnNpb25zPXQucGFnZURpbWVuc2lvbnMpLHRoaXMucGFyZW50PXR9fSx7a2V5OiJmb2N1c2luIix2YWx1ZTpmdW5jdGlvbih0KXtkKHRoaXMsbSk/Zih0aGlzLG0sITEpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpfX0se2tleToiZm9jdXNvdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXt2YXIgcj10LnJlbGF0ZWRUYXJnZXQ7bnVsbCE9ciYmci5jbG9zZXN0KCIjIi5jb25jYXQodGhpcy5pZCkpfHwodC5wcmV2ZW50RGVmYXVsdCgpLG51bGwhPT0oZT10aGlzLnBhcmVudCkmJnZvaWQgMCE9PWUmJmUuaXNNdWx0aXBsZVNlbGVjdGlvbnx8dGhpcy5jb21taXRPclJlbW92ZSgpKX19fSx7a2V5OiJjb21taXRPclJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkoKT90aGlzLnJlbW92ZSgpOnRoaXMuY29tbWl0KCl9fSx7a2V5OiJjb21taXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9fSx7a2V5OiJhZGRUb0Fubm90YXRpb25TdG9yYWdlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKHRoaXMpfX0se2tleToiZHJhZ3N0YXJ0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudC5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zdGFydFg9dC5jbGllbnRYLWUueCx0aGlzLnN0YXJ0WT10LmNsaWVudFktZS55LHQuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHRoaXMuaWQpLHQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUifX0se2tleToic2V0QXQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8odGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxzPWlbMV0sbD1vKHRoaXMuc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24ocixuKSwyKTtyPWxbMF0sbj1sWzFdLHRoaXMueD0odCtyKS9hLHRoaXMueT0oZStuKS9zLHRoaXMuZGl2LnN0eWxlLmxlZnQ9IiIuY29uY2F0KDEwMCp0aGlzLngsIiUiKSx0aGlzLmRpdi5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCp0aGlzLnksIiUiKX19LHtrZXk6InRyYW5zbGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdLGE9byh0aGlzLnNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHQsZSksMik7dD1hWzBdLGU9YVsxXSx0aGlzLngrPXQvbix0aGlzLnkrPWUvaSx0aGlzLmRpdi5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqdGhpcy54LCIlIiksdGhpcy5kaXYuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqdGhpcy55LCIlIil9fSx7a2V5OiJzY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5wYXJlbnRSb3RhdGlvbil7Y2FzZSA5MDpyZXR1cm5bZSwtdF07Y2FzZSAxODA6cmV0dXJuWy10LC1lXTtjYXNlIDI3MDpyZXR1cm5bLWUsdF07ZGVmYXVsdDpyZXR1cm5bdCxlXX19fSx7a2V5OiJwYXJlbnRTY2FsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGV9fSx7a2V5OiJwYXJlbnRSb3RhdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yb3RhdGlvbn19LHtrZXk6InBhcmVudERpbWVuc2lvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGUsZT1vKHRoaXMucGFnZURpbWVuc2lvbnMsMik7cmV0dXJuW2VbMF0qdCxlWzFdKnRdfX0se2tleToic2V0RGltcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdO3RoaXMuZGl2LnN0eWxlLndpZHRoPSIiLmNvbmNhdCgxMDAqdC9uLCIlIiksdGhpcy5kaXYuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZS9pLCIlIil9fSx7a2V5OiJmaXhEaW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGl2LnN0eWxlLGU9dC5oZWlnaHQscj10LndpZHRoLG49ci5lbmRzV2l0aCgiJSIpLGk9ZS5lbmRzV2l0aCgiJSIpO2lmKCFufHwhaSl7dmFyIGE9byh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscz1hWzBdLGw9YVsxXTtufHwodC53aWR0aD0iIi5jb25jYXQoMTAwKnBhcnNlRmxvYXQocikvcywiJSIpKSxpfHwodC5oZWlnaHQ9IiIuY29uY2F0KDEwMCpwYXJzZUZsb2F0KGUpL2wsIiUiKSl9fX0se2tleToiZ2V0SW5pdGlhbFRyYW5zbGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblswLDBdfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1lZGl0b3Itcm90YXRpb24iLCgzNjAtdGhpcy5yb3RhdGlvbiklMzYwKSx0aGlzLmRpdi5jbGFzc05hbWU9dGhpcy5uYW1lLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuaWQpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLDApLHRoaXMuc2V0SW5Gb3JlZ3JvdW5kKCksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKTt2YXIgdD1vKHRoaXMuZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCksMiksZT10WzBdLHI9dFsxXTtyZXR1cm4gdGhpcy50cmFuc2xhdGUoZSxyKSwoMCxpLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnc3RhcnQiLCJwb2ludGVyZG93biJdKSx0aGlzLmRpdn19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjOzAhPT10LmJ1dHRvbnx8dC5jdHJsS2V5JiZlP3QucHJldmVudERlZmF1bHQoKToodC5jdHJsS2V5JiYhZXx8dC5zaGlmdEtleXx8dC5tZXRhS2V5JiZlP3RoaXMucGFyZW50LnRvZ2dsZVNlbGVjdGVkKHRoaXMpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLGYodGhpcyxtLCEwKSl9fSx7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyZW50U2NhbGUsbj1vKHRoaXMucGFnZURpbWVuc2lvbnMsMiksaT1uWzBdLGE9blsxXSxzPW8odGhpcy5wYWdlVHJhbnNsYXRpb24sMiksbD1zWzBdLHU9c1sxXSxjPXQvcixoPWUvcixmPXRoaXMueCppLGQ9dGhpcy55KmEscD10aGlzLndpZHRoKmksdj10aGlzLmhlaWdodCphO3N3aXRjaCh0aGlzLnJvdGF0aW9uKXtjYXNlIDA6cmV0dXJuW2YrYytsLGEtZC1oLXYrdSxmK2MrcCtsLGEtZC1oK3VdO2Nhc2UgOTA6cmV0dXJuW2YraCtsLGEtZCtjK3UsZitoK3YrbCxhLWQrYytwK3VdO2Nhc2UgMTgwOnJldHVybltmLWMtcCtsLGEtZCtoK3UsZi1jK2wsYS1kK2grdit1XTtjYXNlIDI3MDpyZXR1cm5bZi1oLXYrbCxhLWQtYy1wK3UsZi1oK2wsYS1kLWMrdV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19fSx7a2V5OiJnZXRSZWN0SW5DdXJyZW50Q29vcmRzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW8odCw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxzPXJbM10sbD1hLW4sdT1zLWk7c3dpdGNoKHRoaXMucm90YXRpb24pe2Nhc2UgMDpyZXR1cm5bbixlLXMsbCx1XTtjYXNlIDkwOnJldHVybltuLGUtaSx1LGxdO2Nhc2UgMTgwOnJldHVyblthLGUtaSxsLHVdO2Nhc2UgMjcwOnJldHVyblthLGUtcyx1LGxdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdGF0aW9uIil9fX0se2tleToib25jZUFkZGVkIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtmKHRoaXMsYiwhMCl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zih0aGlzLGIsITEpfX0se2tleToiaXNJbkVkaXRNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkKHRoaXMsYil9fSx7a2V5OiJzaG91bGRHZXRLZXlib2FyZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6Im5lZWRzVG9CZVJlYnVpbHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2JiYhdGhpcy5pc0F0dGFjaGVkVG9ET019fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O251bGw9PT0odD10aGlzLmRpdil8fHZvaWQgMD09PXR8fHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxhLnVucmVhY2hhYmxlKSgiQW4gZWRpdG9yIG11c3QgYmUgc2VyaWFsaXphYmxlIil9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKSx0aGlzLmlzRW1wdHkoKXx8dGhpcy5jb21taXQoKSx0aGlzLnBhcmVudC5yZW1vdmUodGhpcyl9fSx7a2V5OiJzZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe319LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImVuYWJsZUVkaXRpbmciLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImlzRWRpdGluZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcyxnKX0sc2V0OmZ1bmN0aW9uKHQpe2YodGhpcyxnLHQpLHQ/KHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLHRoaXMucGFyZW50LnNldEFjdGl2ZUVkaXRvcih0aGlzKSk6dGhpcy5wYXJlbnQuc2V0QWN0aXZlRWRpdG9yKG51bGwpfX1dKSYmbChlLnByb3RvdHlwZSxyKSxuJiZsKGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLkFubm90YXRpb25FZGl0b3I9dyx1KHcsIl9jb2xvck1hbmFnZXIiLG5ldyBpLkNvbG9yTWFuYWdlciksdSh3LCJfekluZGV4IiwxKX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuS2V5Ym9hcmRNYW5hZ2VyPWUuQ29tbWFuZE1hbmFnZXI9ZS5Db2xvck1hbmFnZXI9ZS5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPXZvaWQgMCxlLmJpbmRFdmVudHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9XyhyKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7ZS5hZGRFdmVudExpc3RlbmVyKGEsdFthXS5iaW5kKHQpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fSxlLm9wYWNpdHlUb0hleD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLm1pbigyNTUsTWF0aC5tYXgoMSwyNTUqdCkpKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEEodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHx3KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybihlPXAoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx3KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7eSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHAobi5rZXkpLG4pfX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBwKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiB2KHQsZSxyKXt5KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB5KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LGIodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gYih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj13KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiB3KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBBKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gQSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciBrPW5ldyBXZWFrTWFwLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpLHYodGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTowfSl9cmV0dXJuIGQodCxbe2tleToiZ2V0SWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4iIi5jb25jYXQoaS5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4KS5jb25jYXQoKG0odGhpcyxrLCh0PWcodGhpcyxrKSxlPXQrKyx0KSksZSkpfX1dKSx0fSgpLHg9bmV3IFdlYWtNYXAsRT1uZXcgV2Vha01hcCxQPW5ldyBXZWFrTWFwLFQ9bmV3IFdlYWtNYXAsQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTI4O2godGhpcyx0KSx2KHRoaXMseCx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx2KHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2KHRoaXMsUCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdih0aGlzLFQse3dyaXRhYmxlOiEwLHZhbHVlOi0xfSksbSh0aGlzLFAsZSl9cmV0dXJuIGQodCxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmNtZCxyPXQudW5kbyxuPXQubXVzdEV4ZWMsaT10LnR5cGUsYT12b2lkIDA9PT1pP05hTjppLG89dC5vdmVyd3JpdGVJZlNhbWVUeXBlLHM9dm9pZCAwIT09byYmbyxsPXQua2VlcFVuZG8sdT12b2lkIDAhPT1sJiZsO2lmKG4mJmUoKSwhZyh0aGlzLEUpKXt2YXIgYz17Y21kOmUsdW5kbzpyLHR5cGU6YX07aWYoLTE9PT1nKHRoaXMsVCkpcmV0dXJuIGcodGhpcyx4KS5sZW5ndGg+MCYmKGcodGhpcyx4KS5sZW5ndGg9MCksbSh0aGlzLFQsMCksdm9pZCBnKHRoaXMseCkucHVzaChjKTtpZihzJiZnKHRoaXMseClbZyh0aGlzLFQpXS50eXBlPT09YSlyZXR1cm4gdSYmKGMudW5kbz1nKHRoaXMseClbZyh0aGlzLFQpXS51bmRvKSx2b2lkKGcodGhpcyx4KVtnKHRoaXMsVCldPWMpO3ZhciBoPWcodGhpcyxUKSsxO2g9PT1nKHRoaXMsUCk/Zyh0aGlzLHgpLnNwbGljZSgwLDEpOihtKHRoaXMsVCxoKSxoPGcodGhpcyx4KS5sZW5ndGgmJmcodGhpcyx4KS5zcGxpY2UoaCkpLGcodGhpcyx4KS5wdXNoKGMpfX19LHtrZXk6InVuZG8iLHZhbHVlOmZ1bmN0aW9uKCl7LTEhPT1nKHRoaXMsVCkmJihtKHRoaXMsRSwhMCksZyh0aGlzLHgpW2codGhpcyxUKV0udW5kbygpLG0odGhpcyxFLCExKSxtKHRoaXMsVCxnKHRoaXMsVCktMSkpfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xJiYobSh0aGlzLFQsZyh0aGlzLFQpKzEpLG0odGhpcyxFLCEwKSxnKHRoaXMseClbZyh0aGlzLFQpXS5jbWQoKSxtKHRoaXMsRSwhMSkpfX0se2tleToiaGFzU29tZXRoaW5nVG9VbmRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybi0xIT09Zyh0aGlzLFQpfX0se2tleToiaGFzU29tZXRoaW5nVG9SZWRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXttKHRoaXMseCxudWxsKX19XSksdH0oKTtlLkNvbW1hbmRNYW5hZ2VyPUM7dmFyIE89bmV3IFdlYWtTZXQsRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHUodGhpcyxPKSx0aGlzLmJ1ZmZlcj1bXSx0aGlzLmNhbGxiYWNrcz1uZXcgTWFwLHRoaXMuYWxsS2V5cz1uZXcgU2V0O3ZhciByLG49aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYyxhPV8oZSk7dHJ5e2ZvcihhLnMoKTshKHI9YS5uKCkpLmRvbmU7KXt2YXIgbyxzPWwoci52YWx1ZSwyKSxjPXNbMF0sZj1zWzFdLGQ9XyhjKTt0cnl7Zm9yKGQucygpOyEobz1kLm4oKSkuZG9uZTspe3ZhciBwPW8udmFsdWUsdj1wLnN0YXJ0c1dpdGgoIm1hYysiKTtuJiZ2Pyh0aGlzLmNhbGxiYWNrcy5zZXQocC5zbGljZSg0KSxmKSx0aGlzLmFsbEtleXMuYWRkKHAuc3BsaXQoIisiKS5hdCgtMSkpKTpufHx2fHwodGhpcy5jYWxsYmFja3Muc2V0KHAsZiksdGhpcy5hbGxLZXlzLmFkZChwLnNwbGl0KCIrIikuYXQoLTEpKSl9fWNhdGNoKHQpe2QuZSh0KX1maW5hbGx5e2QuZigpfX19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9fXJldHVybiBkKHQsW3trZXk6ImV4ZWMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5hbGxLZXlzLmhhcyhlLmtleSkpe3ZhciByPXRoaXMuY2FsbGJhY2tzLmdldChjKHRoaXMsTyxNKS5jYWxsKHRoaXMsZSkpO3ImJihyLmJpbmQodCkoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9fX1dKSx0fSgpO2Z1bmN0aW9uIE0odCl7dC5hbHRLZXkmJnRoaXMuYnVmZmVyLnB1c2goImFsdCIpLHQuY3RybEtleSYmdGhpcy5idWZmZXIucHVzaCgiY3RybCIpLHQubWV0YUtleSYmdGhpcy5idWZmZXIucHVzaCgibWV0YSIpLHQuc2hpZnRLZXkmJnRoaXMuYnVmZmVyLnB1c2goInNoaWZ0IiksdGhpcy5idWZmZXIucHVzaCh0LmtleSk7dmFyIGU9dGhpcy5idWZmZXIuam9pbigiKyIpO3JldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGg9MCxlfWUuS2V5Ym9hcmRNYW5hZ2VyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpfXJldHVybiBkKHQsW3trZXk6Il9jb2xvcnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBNYXAoW1siQ2FudmFzVGV4dCIsbnVsbF0sWyJDYW52YXMiLG51bGxdXSk7cmV0dXJuKDAsYS5nZXRDb2xvclZhbHVlcykodCksKDAsaS5zaGFkb3cpKHRoaXMsIl9jb2xvcnMiLHQpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHI9KDAsYS5nZXRSR0IpKGUpO2lmKCF3aW5kb3cubWF0Y2hNZWRpYSgiKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKS5tYXRjaGVzKXJldHVybiByO3ZhciBuLGk9Xyh0aGlzLl9jb2xvcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bChuLnZhbHVlLDIpLHM9b1swXTtpZihvWzFdLmV2ZXJ5KChmdW5jdGlvbih0LGUpe3JldHVybiB0PT09cltlXX0pKSlyZXR1cm4gdC5fY29sb3JzTWFwcGluZy5nZXQocyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfXJldHVybiByfX0se2tleToiZ2V0SGV4Q29kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29sb3JzLmdldCh0KTtyZXR1cm4gZT9pLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxvKGUpKTp0fX1dKSx0fSgpO2UuQ29sb3JNYW5hZ2VyPVIscyhSLCJfY29sb3JzTWFwcGluZyIsbmV3IE1hcChbWyJDYW52YXNUZXh0IixbMCwwLDBdXSxbIkNhbnZhcyIsWzI1NSwyNTUsMjU1XV1dKSk7dmFyIEk9bmV3IFdlYWtNYXAsaj1uZXcgV2Vha01hcCxMPW5ldyBXZWFrTWFwLEQ9bmV3IFdlYWtNYXAsTj1uZXcgV2Vha01hcCxVPW5ldyBXZWFrTWFwLFc9bmV3IFdlYWtNYXAsRz1uZXcgV2Vha01hcCxCPW5ldyBXZWFrTWFwLHE9bmV3IFdlYWtNYXAsSD1uZXcgV2Vha01hcCx6PW5ldyBXZWFrTWFwLFY9bmV3IFdlYWtNYXAsWD1uZXcgV2Vha01hcCxZPW5ldyBXZWFrTWFwLEs9bmV3IFdlYWtNYXAsSj1uZXcgV2Vha01hcCxRPW5ldyBXZWFrTWFwLCQ9bmV3IFdlYWtNYXAsWj1uZXcgV2Vha01hcCx0dD1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxydD1uZXcgV2Vha01hcCxudD1uZXcgV2Vha1NldCxpdD1uZXcgV2Vha1NldCxhdD1uZXcgV2Vha1NldCxvdD1uZXcgV2Vha1NldCxzdD1uZXcgV2Vha1NldCxsdD1uZXcgV2Vha1NldCx1dD1uZXcgV2Vha1NldCxjdD1uZXcgV2Vha1NldCxodD1uZXcgV2Vha1NldCxmdD1uZXcgV2Vha1NldCxkdD1uZXcgV2Vha1NldCxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe2godGhpcyx0KSx1KHRoaXMsZHQpLHUodGhpcyxmdCksdSh0aGlzLGh0KSx1KHRoaXMsY3QpLHUodGhpcyx1dCksdSh0aGlzLGx0KSx1KHRoaXMsc3QpLHUodGhpcyxvdCksdSh0aGlzLGF0KSx1KHRoaXMsaXQpLHUodGhpcyxudCksdih0aGlzLEkse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsaix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHYodGhpcyxMLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdih0aGlzLEQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsTix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEN9KSx2KHRoaXMsVSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLHYodGhpcyxXLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdih0aGlzLEcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2KHRoaXMsQix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLHYodGhpcyxxLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU30pLHYodGhpcyxILHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHYodGhpcyx6LHt3cml0YWJsZTohMCx2YWx1ZTppLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkV9KSx2KHRoaXMsVix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFNldH0pLHYodGhpcyxYLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmNvcHkuYmluZCh0aGlzKX0pLHYodGhpcyxZLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmN1dC5iaW5kKHRoaXMpfSksdih0aGlzLEsse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMucGFzdGUuYmluZCh0aGlzKX0pLHYodGhpcyxKLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmtleWRvd24uYmluZCh0aGlzKX0pLHYodGhpcyxRLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uRWRpdGluZ0FjdGlvbi5iaW5kKHRoaXMpfSksdih0aGlzLCQse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMub25QYWdlQ2hhbmdpbmcuYmluZCh0aGlzKX0pLHYodGhpcyxaLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uU2NhbGVDaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLHR0LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uUm90YXRpb25DaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLGV0LHt3cml0YWJsZTohMCx2YWx1ZTp7aXNFZGl0aW5nOiExLGlzRW1wdHk6ITAsaGFzU29tZXRoaW5nVG9VbmRvOiExLGhhc1NvbWV0aGluZ1RvUmVkbzohMSxoYXNTZWxlY3RlZEVkaXRvcjohMX19KSx2KHRoaXMscnQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxtKHRoaXMscnQsZSksbSh0aGlzLEIsciksZyh0aGlzLEIpLl9vbigiZWRpdGluZ2FjdGlvbiIsZyh0aGlzLFEpKSxnKHRoaXMsQikuX29uKCJwYWdlY2hhbmdpbmciLGcodGhpcywkKSksZyh0aGlzLEIpLl9vbigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29uKCJyb3RhdGlvbmNoYW5naW5nIixnKHRoaXMsdHQpKSxtKHRoaXMsRCxuKSx0aGlzLnZpZXdQYXJhbWV0ZXJzPXtyZWFsU2NhbGU6YS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMscm90YXRpb246MH19cmV0dXJuIGQodCxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXtjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksZyh0aGlzLEIpLl9vZmYoImVkaXRpbmdhY3Rpb24iLGcodGhpcyxRKSksZyh0aGlzLEIpLl9vZmYoInBhZ2VjaGFuZ2luZyIsZyh0aGlzLCQpKSxnKHRoaXMsQikuX29mZigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29mZigicm90YXRpb25jaGFuZ2luZyIsZyh0aGlzLHR0KSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGVzdHJveSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxMKS5jbGVhcigpLGcodGhpcyxqKS5jbGVhcigpLGcodGhpcyxHKS5jbGVhcigpLG0odGhpcyxJLG51bGwpLGcodGhpcyxWKS5jbGVhcigpLGcodGhpcyxOKS5kZXN0cm95KCl9fSx7a2V5OiJvblBhZ2VDaGFuZ2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYWdlTnVtYmVyO20odGhpcyxVLGUtMSl9fSx7a2V5OiJmb2N1c01haW5Db250YWluZXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zyh0aGlzLHJ0KS5mb2N1cygpfX0se2tleToiYWRkU2hvdWxkUmVzY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEcpLmFkZCh0KX19LHtrZXk6InJlbW92ZVNob3VsZFJlc2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxHKS5kZWxldGUodCl9fSx7a2V5OiJvblNjYWxlQ2hhbmdpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2NhbGU7dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucmVhbFNjYWxlPWUqYS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFM7dmFyIHIsbj1fKGcodGhpcyxHKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUub25TY2FsZUNoYW5naW5nKCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25Sb3RhdGlvbkNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnBhZ2VzUm90YXRpb247dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucm90YXRpb249ZX19LHtrZXk6ImFkZFRvQW5ub3RhdGlvblN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuaXNFbXB0eSgpfHwhZyh0aGlzLEQpfHxnKHRoaXMsRCkuaGFzKHQuaWQpfHxnKHRoaXMsRCkuc2V0VmFsdWUodC5pZCx0KX19LHtrZXk6ImNvcHkiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQucHJldmVudERlZmF1bHQoKSxnKHRoaXMsSSkmJmcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpLHRoaXMuaGFzU2VsZWN0aW9uKXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsVikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLmlzRW1wdHkoKXx8ci5wdXNoKGkuc2VyaWFsaXplKCkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX0wIT09ci5sZW5ndGgmJnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIsSlNPTi5zdHJpbmdpZnkocikpfX19LHtrZXk6ImN1dCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jb3B5KHQpLHRoaXMuZGVsZXRlKCl9fSx7a2V5OiJwYXN0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9dC5jbGlwYm9hcmREYXRhLmdldERhdGEoImFwcGxpY2F0aW9uL3BkZmpzIik7aWYocil7dHJ5e3I9SlNPTi5wYXJzZShyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCgwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX1pZihBcnJheS5pc0FycmF5KHIpKXt0aGlzLnVuc2VsZWN0QWxsKCk7dmFyIG49Zyh0aGlzLEwpLmdldChnKHRoaXMsVSkpO3RyeXt2YXIgYSxvPVtdLHM9XyhyKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1uLmRlc2VyaWFsaXplKGwpO2lmKCF1KXJldHVybjtvLnB1c2godSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9bzt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtjKGUsaHQsa3QpLmNhbGwoZSxuKX1jKGUsZHQseHQpLmNhbGwoZSxvKX0sdW5kbzpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9bzt0PGUubGVuZ3RoO3QrKyllW3RdLnJlbW92ZSgpfSxtdXN0RXhlYzohMH0pfWNhdGNoKHQpeygwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX19fX19LHtrZXk6ImtleWRvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByO251bGwhPT0ocj10aGlzLmdldEFjdGl2ZSgpKSYmdm9pZCAwIT09ciYmci5zaG91bGRHZXRLZXlib2FyZEV2ZW50cygpfHx0Ll9rZXlib2FyZE1hbmFnZXIuZXhlYyh0aGlzLGUpfX0se2tleToib25FZGl0aW5nQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtbInVuZG8iLCJyZWRvIiwiZGVsZXRlIiwic2VsZWN0QWxsIl0uaW5jbHVkZXModC5uYW1lKSYmdGhpc1t0Lm5hbWVdKCl9fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q/KGModGhpcyxudCx2dCkuY2FsbCh0aGlzKSxjKHRoaXMsYXQsbXQpLmNhbGwodGhpcyksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2lzRWRpdGluZzpnKHRoaXMseikhPT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyksaGFzU29tZXRoaW5nVG9VbmRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1VuZG8oKSxoYXNTb21ldGhpbmdUb1JlZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvUmVkbygpLGhhc1NlbGVjdGVkRWRpdG9yOiExfSkpOihjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksYyh0aGlzLG90LGd0KS5jYWxsKHRoaXMpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtpc0VkaXRpbmc6ITF9KSl9fSx7a2V5OiJyZWdpc3RlckVkaXRvclR5cGVzIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZyh0aGlzLFcpKXttKHRoaXMsVyx0KTt2YXIgZSxyPV8oZyh0aGlzLFcpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7Yyh0aGlzLGx0LF90KS5jYWxsKHRoaXMsbi5kZWZhdWx0UHJvcGVydGllc1RvVXBkYXRlKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX19LHtrZXk6ImdldElkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMscSkuZ2V0SWQoKX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcyxMKS5nZXQoZyh0aGlzLFUpKX19LHtrZXk6ImN1cnJlbnRQYWdlSW5kZXgiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVSl9fSx7a2V5OiJhZGRMYXllciIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEwpLnNldCh0LnBhZ2VJbmRleCx0KSxnKHRoaXMsSCk/dC5lbmFibGUoKTp0LmRpc2FibGUoKX19LHtrZXk6InJlbW92ZUxheWVyIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsTCkuZGVsZXRlKHQucGFnZUluZGV4KX19LHtrZXk6InVwZGF0ZU1vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG0odGhpcyx6LHQpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUpdGhpcy5zZXRFZGl0aW5nU3RhdGUoITEpLGModGhpcyxjdCxBdCkuY2FsbCh0aGlzKTtlbHNle3RoaXMuc2V0RWRpdGluZ1N0YXRlKCEwKSxjKHRoaXMsdXQsd3QpLmNhbGwodGhpcyk7dmFyIGUscj1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUudXBkYXRlTW9kZSh0KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fX0se2tleToidXBkYXRlVG9vbGJhciIsdmFsdWU6ZnVuY3Rpb24odCl7dCE9PWcodGhpcyx6KSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIse3NvdXJjZTp0aGlzLG1vZGU6dH0pfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKGcodGhpcyxXKSl7dmFyIHIsbj1fKGcodGhpcyxWKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUudXBkYXRlUGFyYW1zKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9dmFyIGksYT1fKGcodGhpcyxXKSk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUudXBkYXRlRGVmYXVsdFBhcmFtcyh0LGUpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fSx7a2V5OiJnZXRFZGl0b3JzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLnBhZ2VJbmRleD09PXQmJnIucHVzaChpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fSx7a2V5OiJnZXRFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsaikuZ2V0KHQpfX0se2tleToiYWRkRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsaikuc2V0KHQuaWQsdCl9fSx7a2V5OiJyZW1vdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2codGhpcyxqKS5kZWxldGUodC5pZCksdGhpcy51bnNlbGVjdCh0KSxudWxsPT09KGU9Zyh0aGlzLEQpKXx8dm9pZCAwPT09ZXx8ZS5yZW1vdmUodC5pZCl9fSx7a2V5OiJzZXRBY3RpdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxJKSE9PXQmJihtKHRoaXMsSSx0KSx0JiZjKHRoaXMsbHQsX3QpLmNhbGwodGhpcyx0LnByb3BlcnRpZXNUb1VwZGF0ZSkpfX0se2tleToidG9nZ2xlU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKGcodGhpcyxWKS5oYXModCkpcmV0dXJuIGcodGhpcyxWKS5kZWxldGUodCksdC51bnNlbGVjdCgpLHZvaWQgYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NlbGVjdGVkRWRpdG9yOnRoaXMuaGFzU2VsZWN0aW9ufSk7Zyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7biE9PXQmJm4udW5zZWxlY3QoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9Zyh0aGlzLFYpLmNsZWFyKCksZyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6ImlzU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsVikuaGFzKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3QudW5zZWxlY3QoKSxnKHRoaXMsVikuZGVsZXRlKHQpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjp0aGlzLmhhc1NlbGVjdGlvbn0pfX0se2tleToiaGFzU2VsZWN0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PWcodGhpcyxWKS5zaXplfX0se2tleToidW5kbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikudW5kbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvVW5kbygpLGhhc1NvbWV0aGluZ1RvUmVkbzohMCxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikucmVkbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86ITAsaGFzU29tZXRoaW5nVG9SZWRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1JlZG8oKSxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxOKS5hZGQodCksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NvbWV0aGluZ1RvVW5kbzohMCxoYXNTb21ldGhpbmdUb1JlZG86ITEsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyl9KX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuY29tbWl0T3JSZW1vdmUoKSx0aGlzLmhhc1NlbGVjdGlvbil7dmFyIGU9byhnKHRoaXMsVikpO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe3ZhciB0LHI9XyhlKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspdC52YWx1ZS5yZW1vdmUoKX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19LHVuZG86ZnVuY3Rpb24oKXt2YXIgcixuPV8oZSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2ModCxodCxrdCkuY2FsbCh0LGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19LG11c3RFeGVjOiEwfSl9fX0se2tleToiY29tbWl0T3JSZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PWcodGhpcyxJKSl8fHZvaWQgMD09PXR8fHQuY29tbWl0T3JSZW1vdmUoKX19LHtrZXk6InNlbGVjdEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS5jb21taXQoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1jKHRoaXMsZHQseHQpLmNhbGwodGhpcyxnKHRoaXMsaikudmFsdWVzKCkpfX0se2tleToidW5zZWxlY3RBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoZyh0aGlzLEkpKWcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpO2Vsc2UgaWYoMCE9PWcodGhpcyxWKS5zaXplKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS51bnNlbGVjdCgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxWKS5jbGVhcigpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjohMX0pfX19LHtrZXk6ImlzQWN0aXZlIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLEkpPT09dH19LHtrZXk6ImdldEFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLEkpfX0se2tleToiZ2V0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLHopfX1dKSx0fSgpO2Z1bmN0aW9uIHZ0KCl7Zyh0aGlzLHJ0KS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIHl0KCl7Zyh0aGlzLHJ0KS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIG10KCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsZyh0aGlzLFgpKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjdXQiLGcodGhpcyxZKSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLGcodGhpcyxLKSl9ZnVuY3Rpb24gZ3QoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb3B5IixnKHRoaXMsWCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImN1dCIsZyh0aGlzLFkpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYXN0ZSIsZyh0aGlzLEspKX1mdW5jdGlvbiBidCh0KXt2YXIgZT10aGlzO09iamVjdC5lbnRyaWVzKHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciByPWwodCwyKSxuPXJbMF0saT1yWzFdO3JldHVybiBnKGUsZXQpW25dIT09aX0pKSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9yc3RhdGVzY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6T2JqZWN0LmFzc2lnbihnKHRoaXMsZXQpLHQpfSl9ZnVuY3Rpb24gX3QodCl7Zyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9ycGFyYW1zY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6dH0pfWZ1bmN0aW9uIHd0KCl7aWYoIWcodGhpcyxIKSl7bSh0aGlzLEgsITApO3ZhciB0LGU9XyhnKHRoaXMsTCkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24gQXQoKXtpZih0aGlzLnVuc2VsZWN0QWxsKCksZyh0aGlzLEgpKXttKHRoaXMsSCwhMSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGlzYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24ga3QodCl7dmFyIGU9Zyh0aGlzLEwpLmdldCh0LnBhZ2VJbmRleCk7ZT9lLmFkZE9yUmVidWlsZCh0KTp0aGlzLmFkZEVkaXRvcih0KX1mdW5jdGlvbiBTdCgpe2lmKDA9PT1nKHRoaXMsaikuc2l6ZSlyZXR1cm4hMDtpZigxPT09Zyh0aGlzLGopLnNpemUpe3ZhciB0LGU9XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOylyZXR1cm4gdC52YWx1ZS5pc0VtcHR5KCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fXJldHVybiExfWZ1bmN0aW9uIHh0KHQpe2codGhpcyxWKS5jbGVhcigpO3ZhciBlLHI9Xyh0KTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7bi5pc0VtcHR5KCl8fChnKHRoaXMsVikuYWRkKG4pLG4uc2VsZWN0KCkpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1jKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX1lLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXI9cHQscyhwdCwiX2tleWJvYXJkTWFuYWdlciIsbmV3IEYoW1tbImN0cmwrYSIsIm1hYyttZXRhK2EiXSxwdC5wcm90b3R5cGUuc2VsZWN0QWxsXSxbWyJjdHJsK3oiLCJtYWMrbWV0YSt6Il0scHQucHJvdG90eXBlLnVuZG9dLFtbImN0cmwreSIsImN0cmwrc2hpZnQrWiIsIm1hYyttZXRhK3NoaWZ0K1oiXSxwdC5wcm90b3R5cGUucmVkb10sW1siQmFja3NwYWNlIiwiYWx0K0JhY2tzcGFjZSIsImN0cmwrQmFja3NwYWNlIiwic2hpZnQrQmFja3NwYWNlIiwibWFjK0JhY2tzcGFjZSIsIm1hYythbHQrQmFja3NwYWNlIiwibWFjK2N0cmwrQmFja3NwYWNlIiwiRGVsZXRlIiwiY3RybCtEZWxldGUiLCJzaGlmdCtEZWxldGUiXSxwdC5wcm90b3R5cGUuZGVsZXRlXSxbWyJFc2NhcGUiLCJtYWMrRXNjYXBlIl0scHQucHJvdG90eXBlLnVuc2VsZWN0QWxsXV0pKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlN0YXRUaW1lcj1lLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbj1lLlBpeGVsc1BlckluY2g9ZS5QYWdlVmlld3BvcnQ9ZS5QREZEYXRlU3RyaW5nPWUuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5ET01TVkdGYWN0b3J5PWUuRE9NQ2FudmFzRmFjdG9yeT1lLkRPTUNNYXBSZWFkZXJGYWN0b3J5PWUuQW5ub3RhdGlvblByZWZpeD12b2lkIDAsZS5kZXByZWNhdGVkPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKCJEZXByZWNhdGVkIEFQSSB1c2FnZTogIit0KX0sZS5nZXRDb2xvclZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7ZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kKGUpO3ZhciByLG49cyh0LmtleXMoKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2Uuc3R5bGUuY29sb3I9aTt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjt0LnNldChpLEkoYSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLnJlbW92ZSgpfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUcmFuc2Zvcm0oKTtyZXR1cm5bZS5hLGUuYixlLmMsZS5kLGUuZSxlLmZdfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VHJhbnNmb3JtKCkuaW52ZXJ0U2VsZigpO3JldHVybltlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZl19LGUuZ2V0RmlsZW5hbWVGcm9tVXJsPWZ1bmN0aW9uKHQpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpe3ZhciBlPXQuc3BsaXQoL1sjP10vLDEpO3Q9KDEsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0ocj1lKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQsMDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwxIT09cy5sZW5ndGgpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHIpfHxsKHIsMSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSlbMF19dmFyIHI7cmV0dXJuIHQuc3Vic3RyaW5nKHQubGFzdEluZGV4T2YoIi8iKSsxKX0sZS5nZXRQZGZGaWxlbmFtZUZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJkb2N1bWVudC5wZGYiO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gZTtpZihDKHQpKXJldHVybigwLGkud2FybikoJ2dldFBkZkZpbGVuYW1lRnJvbVVybDogaWdub3JlICJkYXRhOiItVVJMIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLicpLGU7dmFyIHI9L1teLz8jPV0rXC5wZGZcYig/IS4qXC5wZGZcYikvaSxuPS9eKD86KD86W146XSs6KT9cL1wvW14vXSspPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvLmV4ZWModCksYT1yLmV4ZWMoblsxXSl8fHIuZXhlYyhuWzJdKXx8ci5leGVjKG5bM10pO2lmKGEmJihhPWFbMF0pLmluY2x1ZGVzKCIlIikpdHJ5e2E9ci5leGVjKGRlY29kZVVSSUNvbXBvbmVudChhKSlbMF19Y2F0Y2godCl7fXJldHVybiBhfHxlfSxlLmdldFJHQj1JLGUuZ2V0WGZhUGFnZVZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zY2FsZSxuPXZvaWQgMD09PXI/MTpyLGk9ZS5yb3RhdGlvbixhPXZvaWQgMD09PWk/MDppLG89dC5hdHRyaWJ1dGVzLnN0eWxlLHM9by53aWR0aCxsPW8uaGVpZ2h0LHU9WzAsMCxwYXJzZUludChzKSxwYXJzZUludChsKV07cmV0dXJuIG5ldyBQKHt2aWV3Qm94OnUsc2NhbGU6bixyb3RhdGlvbjphfSl9LGUuaXNEYXRhU2NoZW1lPUMsZS5pc1BkZkZpbGU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYvXC5wZGYkL2kudGVzdCh0KX0sZS5pc1ZhbGlkRmV0Y2hVcmw9TSxlLmxvYWRTY3JpcHQ9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9dCxpLm9ubG9hZD1mdW5jdGlvbih0KXtlJiZpLnJlbW92ZSgpLHIodCl9LGkub25lcnJvcj1mdW5jdGlvbigpe24obmV3IEVycm9yKCJDYW5ub3QgbG9hZCBzY3JpcHQgYXQ6ICIuY29uY2F0KGkuc3JjKSkpfSwoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmQoaSl9KSl9LGUuc2V0TGF5ZXJEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPSEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM107aWYoZSBpbnN0YW5jZW9mIFApe3ZhciBpPWUucmF3RGltcyxhPWkucGFnZVdpZHRoLG89aS5wYWdlSGVpZ2h0LHM9dC5zdHlsZSxsPSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChhLCJweCkiKSx1PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChvLCJweCkiKTtyJiZlLnJvdGF0aW9uJTE4MCE9MD8ocy53aWR0aD11LHMuaGVpZ2h0PWwpOihzLndpZHRoPWwscy5oZWlnaHQ9dSl9biYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsZS5yb3RhdGlvbil9O3ZhciBuPXIoMTM4KSxpPXIoMSk7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxzPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIscykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLHMsbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09byhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LHMsbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQscyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LHMoYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LHMsbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W3NdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbyh0KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKHQpO2lmKGUpe3ZhciBpPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09byhlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fSh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0scCh0KX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxiKG4ua2V5KSxuKX19ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybihlPWIoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gYih0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW8oZSk/ZTpTdHJpbmcoZSl9ZS5Bbm5vdGF0aW9uUHJlZml4PSJwZGZqc19pbnRlcm5hbF9pZF8iO3ZhciBfPXkoKGZ1bmN0aW9uIHQoKXttKHRoaXMsdCl9KSk7ZS5QaXhlbHNQZXJJbmNoPV8sZyhfLCJDU1MiLDk2KSxnKF8sIlBERiIsNzIpLGcoXywiUERGX1RPX0NTU19VTklUUyIsXy5DU1MvXy5QREYpO3ZhciB3PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXt2YXIgdCxuPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtyZXR1cm4gbSh0aGlzLHIpLCh0PWUuY2FsbCh0aGlzKSkuX2RvY3VtZW50PWksdH1yZXR1cm4geShyLFt7a2V5OiJfY3JlYXRlQ2FudmFzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxyfX1dKSxyfShuLkJhc2VDYW52YXNGYWN0b3J5KTtmdW5jdGlvbiBBKHQpe3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrKCl7dmFyIHQ7cmV0dXJuIHQ9YSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsbixvPWFyZ3VtZW50cztyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9by5sZW5ndGg+MSYmdm9pZCAwIT09b1sxXSYmb1sxXSwhTShlLGRvY3VtZW50LmJhc2VVUkkpKXt0Lm5leHQ9MjE7YnJlYWt9cmV0dXJuIHQubmV4dD00LGZldGNoKGUpO2Nhc2UgNDppZigobj10LnNlbnQpLm9rKXt0Lm5leHQ9NzticmVha310aHJvdyBuZXcgRXJyb3Iobi5zdGF0dXNUZXh0KTtjYXNlIDc6aWYoIXIpe3QubmV4dD0xNTticmVha31yZXR1cm4gdC50MT1VaW50OEFycmF5LHQubmV4dD0xMSxuLmFycmF5QnVmZmVyKCk7Y2FzZSAxMTp0LnQyPXQuc2VudCx0LnQwPW5ldyB0LnQxKHQudDIpLHQubmV4dD0yMDticmVhaztjYXNlIDE1OnJldHVybiB0LnQzPWkuc3RyaW5nVG9CeXRlcyx0Lm5leHQ9MTgsbi50ZXh0KCk7Y2FzZSAxODp0LnQ0PXQuc2VudCx0LnQwPSgwLHQudDMpKHQudDQpO2Nhc2UgMjA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDApO2Nhc2UgMjE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe3ZhciBhPW5ldyBYTUxIdHRwUmVxdWVzdDthLm9wZW4oIkdFVCIsZSwhMCksciYmKGEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIpLGEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoYS5yZWFkeVN0YXRlPT09WE1MSHR0cFJlcXVlc3QuRE9ORSl7dmFyIGU7aWYoKDIwMD09PWEuc3RhdHVzfHwwPT09YS5zdGF0dXMpJiYociYmYS5yZXNwb25zZT9lPW5ldyBVaW50OEFycmF5KGEucmVzcG9uc2UpOiFyJiZhLnJlc3BvbnNlVGV4dCYmKGU9KDAsaS5zdHJpbmdUb0J5dGVzKShhLnJlc3BvbnNlVGV4dCkpLGUpKXJldHVybiB2b2lkIHQoZSk7bihuZXcgRXJyb3IoYS5zdGF0dXNUZXh0KSl9fSxhLnNlbmQobnVsbCl9KSkpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSxrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9LGsuYXBwbHkodGhpcyxhcmd1bWVudHMpfWUuRE9NQ2FudmFzRmFjdG9yeT13O3ZhciBTPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEEodCx0aGlzLmlzQ29tcHJlc3NlZCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJue2NNYXBEYXRhOnQsY29tcHJlc3Npb25UeXBlOmV9fSkpfX1dKSxyfShuLkJhc2VDTWFwUmVhZGVyRmFjdG9yeSk7ZS5ET01DTWFwUmVhZGVyRmFjdG9yeT1TO3ZhciB4PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBKHQsITApfX1dKSxyfShuLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT14O3ZhciBFPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0KX19XSkscn0obi5CYXNlU1ZHRmFjdG9yeSk7ZS5ET01TVkdGYWN0b3J5PUU7dmFyIFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUudmlld0JveCxuPWUuc2NhbGUsaT1lLnJvdGF0aW9uLGE9ZS5vZmZzZXRYLG89dm9pZCAwPT09YT8wOmEscz1lLm9mZnNldFksbD12b2lkIDA9PT1zPzA6cyx1PWUuZG9udEZsaXAsYz12b2lkIDAhPT11JiZ1O20odGhpcyx0KSx0aGlzLnZpZXdCb3g9cix0aGlzLnNjYWxlPW4sdGhpcy5yb3RhdGlvbj1pLHRoaXMub2Zmc2V0WD1vLHRoaXMub2Zmc2V0WT1sO3ZhciBoLGYsZCxwLHYseSxnLGIsXz0oclsyXStyWzBdKS8yLHc9KHJbM10rclsxXSkvMjtzd2l0Y2goKGklPTM2MCk8MCYmKGkrPTM2MCksaSl7Y2FzZSAxODA6aD0tMSxmPTAsZD0wLHA9MTticmVhaztjYXNlIDkwOmg9MCxmPTEsZD0xLHA9MDticmVhaztjYXNlIDI3MDpoPTAsZj0tMSxkPS0xLHA9MDticmVhaztjYXNlIDA6aD0xLGY9MCxkPTAscD0tMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiUGFnZVZpZXdwb3J0OiBJbnZhbGlkIHJvdGF0aW9uLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAgZGVncmVlcy4iKX1jJiYoZD0tZCxwPS1wKSwwPT09aD8odj1NYXRoLmFicyh3LXJbMV0pKm4rbyx5PU1hdGguYWJzKF8tclswXSkqbitsLGc9KHJbM10tclsxXSkqbixiPShyWzJdLXJbMF0pKm4pOih2PU1hdGguYWJzKF8tclswXSkqbitvLHk9TWF0aC5hYnMody1yWzFdKSpuK2wsZz0oclsyXS1yWzBdKSpuLGI9KHJbM10tclsxXSkqbiksdGhpcy50cmFuc2Zvcm09W2gqbixmKm4sZCpuLHAqbix2LWgqbipfLWQqbip3LHktZipuKl8tcCpuKnddLHRoaXMud2lkdGg9Zyx0aGlzLmhlaWdodD1ifXJldHVybiB5KHQsW3trZXk6InJhd0RpbXMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmlld0JveDtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywicmF3RGltcyIse3BhZ2VXaWR0aDp0WzJdLXRbMF0scGFnZUhlaWdodDp0WzNdLXRbMV0scGFnZVg6dFswXSxwYWdlWTp0WzFdfSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj1lLnNjYWxlLG49dm9pZCAwPT09cj90aGlzLnNjYWxlOnIsaT1lLnJvdGF0aW9uLGE9dm9pZCAwPT09aT90aGlzLnJvdGF0aW9uOmksbz1lLm9mZnNldFgscz12b2lkIDA9PT1vP3RoaXMub2Zmc2V0WDpvLGw9ZS5vZmZzZXRZLHU9dm9pZCAwPT09bD90aGlzLm9mZnNldFk6bCxjPWUuZG9udEZsaXAsaD12b2lkIDAhPT1jJiZjO3JldHVybiBuZXcgdCh7dmlld0JveDp0aGlzLnZpZXdCb3guc2xpY2UoKSxzY2FsZTpuLHJvdGF0aW9uOmEsb2Zmc2V0WDpzLG9mZnNldFk6dSxkb250RmxpcDpofSl9fSx7a2V5OiJjb252ZXJ0VG9WaWV3cG9ydFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3QsZV0sdGhpcy50cmFuc2Zvcm0pfX0se2tleToiY29udmVydFRvVmlld3BvcnRSZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWkuVXRpbC5hcHBseVRyYW5zZm9ybShbdFswXSx0WzFdXSx0aGlzLnRyYW5zZm9ybSkscj1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFszXV0sdGhpcy50cmFuc2Zvcm0pO3JldHVybltlWzBdLGVbMV0sclswXSxyWzFdXX19LHtrZXk6ImNvbnZlcnRUb1BkZlBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlJbnZlcnNlVHJhbnNmb3JtKFt0LGVdLHRoaXMudHJhbnNmb3JtKX19XSksdH0oKTtlLlBhZ2VWaWV3cG9ydD1QO3ZhciBUPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO3JldHVybiBtKHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIikpLnR5cGU9bixpLmV4dHJhRGVsYXk9YSxpfXJldHVybiB5KHIpfShpLkJhc2VFeGNlcHRpb24pO2Z1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGUmJiIiPT09dFtyXS50cmltKCk7KXIrKztyZXR1cm4iZGF0YToiPT09dC5zdWJzdHJpbmcocixyKzUpLnRvTG93ZXJDYXNlKCl9ZS5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249VDt2YXIgTyxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe20odGhpcyx0KSxnKHRoaXMsInN0YXJ0ZWQiLE9iamVjdC5jcmVhdGUobnVsbCkpLGcodGhpcywidGltZXMiLFtdKX1yZXR1cm4geSh0LFt7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZCYmKDAsaS53YXJuKSgiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAiLmNvbmNhdCh0KSksdGhpcy5zdGFydGVkW3RdPURhdGUubm93KCl9fSx7a2V5OiJ0aW1lRW5kIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZHx8KDAsaS53YXJuKSgiVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICIuY29uY2F0KHQpKSx0aGlzLnRpbWVzLnB1c2goe25hbWU6dCxzdGFydDp0aGlzLnN0YXJ0ZWRbdF0sZW5kOkRhdGUubm93KCl9KSxkZWxldGUgdGhpcy5zdGFydGVkW3RdfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPTAsbj1zKHRoaXMudGltZXMpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZS5uYW1lO3I9TWF0aC5tYXgoaS5sZW5ndGgscil9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXZhciBhLG89cyh0aGlzLnRpbWVzKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1sLm5hbWUsYz1sLnN0YXJ0LGg9bC5lbmQ7ZS5wdXNoKCIiLmNvbmNhdCh1LnBhZEVuZChyKSwiICIpLmNvbmNhdChoLWMsIm1zXG4iKSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiBlLmpvaW4oIiIpfX1dKSx0fSgpO2Z1bmN0aW9uIE0odCxlKXt0cnl7dmFyIHI9KGU/bmV3IFVSTCh0LGUpOm5ldyBVUkwodCkpLnByb3RvY29sO3JldHVybiJodHRwOiI9PT1yfHwiaHR0cHM6Ij09PXJ9Y2F0Y2godCl7cmV0dXJuITF9fWUuU3RhdFRpbWVyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bSh0aGlzLHQpfXJldHVybiB5KHQsbnVsbCxbe2tleToidG9EYXRlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdHx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBudWxsO098fChPPW5ldyBSZWdFeHAoIl5EOihcXGR7NH0pKFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFtafCt8LV0pPyhcXGR7Mn0pPyc/KFxcZHsyfSk/Jz8iKSk7dmFyIGU9Ty5leGVjKHQpO2lmKCFlKXJldHVybiBudWxsO3ZhciByPXBhcnNlSW50KGVbMV0sMTApLG49cGFyc2VJbnQoZVsyXSwxMCk7bj1uPj0xJiZuPD0xMj9uLTE6MDt2YXIgaT1wYXJzZUludChlWzNdLDEwKTtpPWk+PTEmJmk8PTMxP2k6MTt2YXIgYT1wYXJzZUludChlWzRdLDEwKTthPWE+PTAmJmE8PTIzP2E6MDt2YXIgbz1wYXJzZUludChlWzVdLDEwKTtvPW8+PTAmJm88PTU5P286MDt2YXIgcz1wYXJzZUludChlWzZdLDEwKTtzPXM+PTAmJnM8PTU5P3M6MDt2YXIgbD1lWzddfHwiWiIsdT1wYXJzZUludChlWzhdLDEwKTt1PXU+PTAmJnU8PTIzP3U6MDt2YXIgYz1wYXJzZUludChlWzldLDEwKXx8MDtyZXR1cm4gYz1jPj0wJiZjPD01OT9jOjAsIi0iPT09bD8oYSs9dSxvKz1jKToiKyI9PT1sJiYoYS09dSxvLT1jKSxuZXcgRGF0ZShEYXRlLlVUQyhyLG4saSxhLG8scykpfX1dKSx0fSgpO2Z1bmN0aW9uIEkodCl7aWYodC5zdGFydHNXaXRoKCIjIikpe3ZhciBlPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpO3JldHVyblsoMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZV19cmV0dXJuIHQuc3RhcnRzV2l0aCgicmdiKCIpP3Quc2xpY2UoNCwtMSkuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KX0pKTp0LnN0YXJ0c1dpdGgoInJnYmEoIik/dC5zbGljZSg1LC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQpfSkpLnNsaWNlKDAsMyk6KCgwLGkud2FybikoJ05vdCBhIHZhbGlkIGNvbG9yIGZvcm1hdDogIicuY29uY2F0KHQsJyInKSksWzAsMCwwXSl9ZS5QREZEYXRlU3RyaW5nPVJ9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5CYXNlU1ZHRmFjdG9yeT1lLkJhc2VDYW52YXNGYWN0b3J5PWUuQmFzZUNNYXBSZWFkZXJGYWN0b3J5PXZvaWQgMDt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkoKXtpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLGwpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PXMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8sbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLGwpfSkpfWwodS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2EobyxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EobyxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PXModCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1zKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09cyhpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUmJnUodC5wcm90b3R5cGUsZSksciYmdSh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQ8PTB8fGU8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7dmFyIHI9dGhpcy5fY3JlYXRlQ2FudmFzKHQsZSk7cmV0dXJue2NhbnZhczpyLGNvbnRleHQ6ci5nZXRDb250ZXh0KCIyZCIpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYoIXQuY2FudmFzKXRocm93IG5ldyBFcnJvcigiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWQiKTtpZihlPD0wfHxyPD0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjYW52YXMgc2l6ZSIpO3QuY2FudmFzLndpZHRoPWUsdC5jYW52YXMuaGVpZ2h0PXJ9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO3QuY2FudmFzLndpZHRoPTAsdC5jYW52YXMuaGVpZ2h0PTAsdC5jYW52YXM9bnVsbCx0LmNvbnRleHQ9bnVsbH19LHtrZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2NyZWF0ZUNhbnZhc2AgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZUNhbnZhc0ZhY3Rvcnk9aDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnIsYT1lLmlzQ29tcHJlc3NlZCxvPXZvaWQgMCE9PWEmJmE7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNNYXBSZWFkZXJGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pLHRoaXMuaXNDb21wcmVzc2VkPW99dmFyIGU7cmV0dXJuIGModCxbe2tleToiZmV0Y2giLHZhbHVlOihlPW8oaSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsYSxvLHM9dGhpcztyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9ZS5uYW1lLHRoaXMuYmFzZVVybCl7dC5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdUaGUgQ01hcCAiYmFzZVVybCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgImNNYXBVcmwiIGFuZCAiY01hcFBhY2tlZCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO2Nhc2UgMzppZihyKXt0Lm5leHQ9NTticmVha310aHJvdyBuZXcgRXJyb3IoIkNNYXAgbmFtZSBtdXN0IGJlIHNwZWNpZmllZC4iKTtjYXNlIDU6cmV0dXJuIGE9dGhpcy5iYXNlVXJsK3IrKHRoaXMuaXNDb21wcmVzc2VkPyIuYmNtYXAiOiIiKSxvPXRoaXMuaXNDb21wcmVzc2VkP24uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlk6bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUsdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKGEsbykuY2F0Y2goKGZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIi5jb25jYXQocy5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIiLCJDTWFwIGF0OiAiKS5jb25jYXQoYSkpfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hEYXRhYCBjYWxsZWQuIil9fV0pLHR9KCk7ZS5CYXNlQ01hcFJlYWRlckZhY3Rvcnk9Zjt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnI7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pfXZhciBlO3JldHVybiBjKHQsW3trZXk6ImZldGNoIix2YWx1ZTooZT1vKGkoKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLG47cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWUuZmlsZW5hbWUsdGhpcy5iYXNlVXJsKXt0Lm5leHQ9MzticmVha310aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdGFuZGFyZCBmb250ICJiYXNlVXJsIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSAic3RhbmRhcmRGb250RGF0YVVybCIgQVBJIHBhcmFtZXRlciBpcyBwcm92aWRlZC4nKTtjYXNlIDM6aWYocil7dC5uZXh0PTU7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJGb250IGZpbGVuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiIpO2Nhc2UgNTpyZXR1cm4gbj0iIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQociksdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKG4pLmNhdGNoKChmdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBsb2FkIGZvbnQgZGF0YSBhdDogIi5jb25jYXQobikpfSkpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNWR0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYodDw9MHx8ZTw9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1ZHIGRpbWVuc2lvbnMiKTt2YXIgbj10aGlzLl9jcmVhdGVTVkcoInN2ZzpzdmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxyfHwobi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiIi5jb25jYXQodCwicHgiKSksbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIiIuY29uY2F0KGUsInB4IikpKSxuLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxuLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiLmNvbmNhdCh0LCIgIikuY29uY2F0KGUpKSxufX0se2tleToiY3JlYXRlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlIik7cmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0KX19LHtrZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC4iKX19XSksdH0oKTtlLkJhc2VTVkdGYWN0b3J5PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigxKTtmdW5jdGlvbiBpKHQpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxpKHQpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09aSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1pKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxsPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6byx0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOm99dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtlPW5ldyBVaW50OEFycmF5KDIqdC5sZW5ndGgpLHI9MDtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspe3ZhciBvPXQuY2hhckNvZGVBdChpKTtvPD0yNTU/ZVtyKytdPW86KGVbcisrXT1vPj4+OCxlW3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKHQpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KGU9dC5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGM9ci00KnUsaD1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCx1KSxmPTAsZD0wLHA9dGhpcy5oMSx2PXRoaXMuaDIseT0zNDMyOTE4MzUzLG09NDYxODQ1OTA3LGc9MTE2MDEsYj0xMzcxNSxfPTA7Xzx1O18rKykxJl8/cD01KihwPShwXj1mPShmPShmPShmPWhbX10pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2OnY9NSoodj0odl49ZD0oZD0oZD0oZD1oW19dKSp5JnN8ZCpnJmwpPDwxNXxkPj4+MTcpKm0mc3xkKmImbCk8PDEzfHY+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goZj0wLGMpe2Nhc2UgMzpmXj1lWzQqdSsyXTw8MTY7Y2FzZSAyOmZePWVbNCp1KzFdPDw4O2Nhc2UgMTpmPShmPShmPShmXj1lWzQqdV0pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsLDEmdT9wXj1mOnZePWZ9dGhpcy5oMT1wLHRoaXMuaDI9dn19LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmgxLGU9dGhpcy5oMjtyZXR1cm4gdD0zOTgxODA2Nzk3Kih0Xj1lPj4+MSkmc3wzNjA0NSp0JmwsdD00NDQ5ODQ0MDMqKHRePShlPTQyODM1NDM1MTEqZSZzfCgyOTUwMTYzNzk3KihlPDwxNnx0Pj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSp0JmwsKCh0Xj0oZT0zMzAxODgyMzY2KmUmc3woMzEyMDQzNzg5MyooZTw8MTZ8dD4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsoZT4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZhKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NdXJtdXJIYXNoM182ND11fSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRm9udExvYWRlcj1lLkZvbnRGYWNlT2JqZWN0PXZvaWQgMDt2YXIgbj1yKDEpLGk9cigzKTtmdW5jdGlvbiBhKHQpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxhKHQpfWZ1bmN0aW9uIG8oKXtvPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30scz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLHMpJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sbyxzLGwpe3ZhciB1PWYodFtuXSx0LG8pO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWEoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxzLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LHMsbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxzKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxzLGwpfSkpfWwodS5hcmcpfXZhciBvO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBvPW8/by50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtzXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWEodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIGUmJmgodC5wcm90b3R5cGUsZSksciYmaCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUub25VbnN1cHBvcnRlZEZlYXR1cmUsbj1lLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtlLnN0eWxlRWxlbWVudCxjKHRoaXMsdCksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9cix0aGlzLl9kb2N1bWVudD1pLHRoaXMubmF0aXZlRm9udEZhY2VzPVtdLHRoaXMuc3R5bGVFbGVtZW50PW51bGwsdGhpcy5sb2FkaW5nUmVxdWVzdHM9W10sdGhpcy5sb2FkVGVzdEZvbnRJZD0wfXZhciBlLHI7cmV0dXJuIGYodCxbe2tleToiYWRkTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRm9udEZhY2VzLnB1c2godCksdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKHQpfX0se2tleToiaW5zZXJ0UnVsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zdHlsZUVsZW1lbnR8fCh0aGlzLnN0eWxlRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZCh0aGlzLnN0eWxlRWxlbWVudCkpO3ZhciBlPXRoaXMuc3R5bGVFbGVtZW50LnNoZWV0O2UuaW5zZXJ0UnVsZSh0LGUuY3NzUnVsZXMubGVuZ3RoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGU9bCh0aGlzLm5hdGl2ZUZvbnRGYWNlcyk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3RoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZShyKX19Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9dGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoPTAsdGhpcy5zdHlsZUVsZW1lbnQmJih0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKSx0aGlzLnN0eWxlRWxlbWVudD1udWxsKX19LHtrZXk6ImJpbmQiLHZhbHVlOihlPW8oKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLGksYT10aGlzO3JldHVybiBvKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUuYXR0YWNoZWQmJiFlLm1pc3NpbmdGaWxlKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjppZihlLmF0dGFjaGVkPSEwLCF0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpe3QubmV4dD0xOTticmVha31pZighKHI9ZS5jcmVhdGVOYXRpdmVGb250RmFjZSgpKSl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKHIpLHQucHJldj03LHQubmV4dD0xMCxyLmxvYWRlZDtjYXNlIDEwOnQubmV4dD0xODticmVhaztjYXNlIDEyOnRocm93IHQucHJldj0xMix0LnQwPXQuY2F0Y2goNyksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udExvYWROYXRpdmV9KSwoMCxuLndhcm4pKCJGYWlsZWQgdG8gbG9hZCBmb250ICciLmNvbmNhdChyLmZhbWlseSwiJzogJyIpLmNvbmNhdCh0LnQwLCInLiIpKSxlLmRpc2FibGVGb250RmFjZT0hMCx0LnQwO2Nhc2UgMTg6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE5OmlmKCEoaT1lLmNyZWF0ZUZvbnRGYWNlUnVsZSgpKSl7dC5uZXh0PTI2O2JyZWFrfWlmKHRoaXMuaW5zZXJ0UnVsZShpKSwhdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCl7dC5uZXh0PTI0O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyNDpyZXR1cm4gdC5uZXh0PTI2LG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1hLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayh0KTthLl9wcmVwYXJlRm9udExvYWRFdmVudChlLHIpfSkpO2Nhc2UgMjY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s3LDEyXV0pfSkpLHI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixpKXt2YXIgYT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyh0KXtzKGEsbixpLG8sbCwibmV4dCIsdCl9ZnVuY3Rpb24gbCh0KXtzKGEsbixpLG8sbCwidGhyb3ciLHQpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0LGU9IShudWxsPT09KHQ9dGhpcy5fZG9jdW1lbnQpfHx2b2lkIDA9PT10fHwhdC5mb250cyk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGUpfX0se2tleToiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PSExO3JldHVybihpLmlzTm9kZUpTfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL01vemlsbGFcLzUuMC4qP3J2OlxkKy4qPyBHZWNrby8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkmJih0PSEwKSwoMCxuLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLHQpfX0se2tleToiX3F1ZXVlTG9hZGluZ0NhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRpbmdSZXF1ZXN0cyxyPXtkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Zm9yKCgwLG4uYXNzZXJ0KSghci5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpLHIuZG9uZT0hMDtlLmxlbmd0aD4wJiZlWzBdLmRvbmU7KXt2YXIgdD1lLnNoaWZ0KCk7c2V0VGltZW91dCh0LmNhbGxiYWNrLDApfX0sY2FsbGJhY2s6dH07cmV0dXJuIGUucHVzaChyKSxyfX0se2tleToiX2xvYWRUZXN0Rm9udCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9YXRvYigiVDFSVVR3QUxBSUFBQXdBd1EwWkdJREh0Wmc0QUFBT1lBQUFBZ1VaR1ZFMWxrelp3QUFBRUhBQUFBQnhIUkVWR0FCUUFGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQUFMd0FBQUEyYUdobFlRZGtBK29BQUFEMEFBQUFKR2h0ZEhnRDZBQUFBQUFFV0FBQUFBWnRZWGh3QUFKUUFBQUFBUmdBQUFBR2JtRnRaVmptZEg0QUFBR0FBQUFBc1hCdmMzVC9oZ0F6QUFBRGVBQUFBQ0FBQVFBQUFBRUFBTFpSRnNSZkR6ejFBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRDZBQUFBQUFENkFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQVVBQUFBZ0FBQUFRRDZBSDBBQVVBQUFLS0Fyd0FBQUNNQW9vQ3ZBQUFBZUFBTVFFQ0FBQUNBQVlKQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFGQm1SV1FBd0FBdUFDNERJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQUFBRUFBUUFBQUFFQUFBQUFBQUlBQVFBQUFBRUFBQUFBQUFNQUFRQUFBQUVBQUFBQUFBUUFBUUFBQUFFQUFBQUFBQVVBQVFBQUFBRUFBQUFBQUFZQUFRQUFBQU1BQVFRSkFBQUFBZ0FCQUFNQUFRUUpBQUVBQWdBQkFBTUFBUVFKQUFJQUFnQUJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWUFBQUFBQUFBQXdBQUFBTUFBQUFjQUFFQUFBQUFBRHdBQXdBQkFBQUFIQUFFQUNBQUFBQUVBQVFBQVFBQUFDNy8vd0FBQUM3Ly8vL1RBQUVBQUFBQUFBQUJCZ0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBRC9nd0F5QUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUVBQUVCQVFKWUFBRUJBU0g0RHdENEd3SEVBdmdjQS9nWEJJd01BWXVMK256NXRRWGtENWozQ0JMbkVRQUNBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M0RvdjZmQUg2ZkFUK2ZQcDgrbndIRG9zTUN2bTFDdm0xREF6NmZCUUFBQUFBQUFBQkFBQUFBTW1KYnpFQUFBQUF6Z1RqRlFBQUFBRE9CT1FwQUFFQUFBQUFBQUFBREFBVUFBUUFBQUFCQUFBQUFnQUJBQUFBQUFBQUFBQUQ2QUFBQUFBQUFBPT0iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2xvYWRUZXN0Rm9udCIsdCl9fSx7a2V5OiJfcHJlcGFyZUZvbnRMb2FkRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmNoYXJDb2RlQXQoZSk8PDI0fHQuY2hhckNvZGVBdChlKzEpPDwxNnx0LmNoYXJDb2RlQXQoZSsyKTw8OHwyNTUmdC5jaGFyQ29kZUF0KGUrMyl9ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdC5zdWJzdHJpbmcoMCxlKStuK3Quc3Vic3RyaW5nKGUrcil9dmFyIGEsbyxzPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Mud2lkdGg9MSxzLmhlaWdodD0xO3ZhciBsPXMuZ2V0Q29udGV4dCgiMmQiKSx1PTAsYz0ibHQiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKSxoPXRoaXMuX2xvYWRUZXN0Rm9udCxmPTE0ODIxODQ3OTIsZD1yKGg9aShoLDk3NixjLmxlbmd0aCxjKSwxNik7Zm9yKGE9MCxvPWMubGVuZ3RoLTM7YTxvO2ErPTQpZD1kLWYrcihjLGEpfDA7YTxjLmxlbmd0aCYmKGQ9ZC1mK3IoYysiWFhYIixhKXwwKSxoPWkoaCwxNiw0LCgwLG4uc3RyaW5nMzIpKGQpKTt2YXIgcD0idXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsIi5jb25jYXQoYnRvYShoKSwiKTsiKSx2PSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQoYywnIjtzcmM6JykuY29uY2F0KHAsIn0iKTt0aGlzLmluc2VydFJ1bGUodik7dmFyIHk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7eS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHkuc3R5bGUud2lkdGg9eS5zdHlsZS5oZWlnaHQ9IjEwcHgiLHkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix5LnN0eWxlLnRvcD15LnN0eWxlLmxlZnQ9IjBweCI7Zm9yKHZhciBtPTAsZz1bdC5sb2FkZWROYW1lLGNdO208Zy5sZW5ndGg7bSsrKXt2YXIgYj1nW21dLF89dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO18udGV4dENvbnRlbnQ9IkhpIixfLnN0eWxlLmZvbnRGYW1pbHk9Yix5LmFwcGVuZChfKX10aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZCh5KSxmdW5jdGlvbiB0KGUscil7aWYoKyt1PjMwKXJldHVybigwLG4ud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKSx2b2lkIHIoKTtsLmZvbnQ9IjMwcHggIitlLGwuZmlsbFRleHQoIi4iLDAsMjApLGwuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM10+MD9yKCk6c2V0VGltZW91dCh0LmJpbmQobnVsbCxlLHIpKX0oYywoZnVuY3Rpb24oKXt5LnJlbW92ZSgpLGUuY29tcGxldGUoKX0pKX19XSksdH0oKTtlLkZvbnRMb2FkZXI9ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbj1yLmlzRXZhbFN1cHBvcnRlZCxpPXZvaWQgMD09PW58fG4sYT1yLmRpc2FibGVGb250RmFjZSxvPXZvaWQgMCE9PWEmJmEscz1yLmlnbm9yZUVycm9ycyxsPXZvaWQgMCE9PXMmJnMsdT1yLm9uVW5zdXBwb3J0ZWRGZWF0dXJlLGg9ci5mb250UmVnaXN0cnksZj12b2lkIDA9PT1oP251bGw6aDtmb3IodmFyIGQgaW4gYyh0aGlzLHQpLHRoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlKXRoaXNbZF09ZVtkXTt0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PWksdGhpcy5kaXNhYmxlRm9udEZhY2U9ITA9PT1vLHRoaXMuaWdub3JlRXJyb3JzPSEwPT09bCx0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZT11LHRoaXMuZm9udFJlZ2lzdHJ5PWZ9cmV0dXJuIGYodCxbe2tleToiY3JlYXRlTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDtpZih0aGlzLmNzc0ZvbnRJbmZvKXt2YXIgcj17d2VpZ2h0OnRoaXMuY3NzRm9udEluZm8uZm9udFdlaWdodH07dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKHIuc3R5bGU9Im9ibGlxdWUgIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSwiZGVnIikpLGU9bmV3IEZvbnRGYWNlKHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSx0aGlzLmRhdGEscil9ZWxzZSBlPW5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsdGhpcy5kYXRhLHt9KTtyZXR1cm4gbnVsbD09PSh0PXRoaXMuZm9udFJlZ2lzdHJ5KXx8dm9pZCAwPT09dHx8dC5yZWdpc3RlckZvbnQodGhpcyksZX19LHtrZXk6ImNyZWF0ZUZvbnRGYWNlUnVsZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDt2YXIgZSxyPSgwLG4uYnl0ZXNUb1N0cmluZykodGhpcy5kYXRhKSxpPSJ1cmwoZGF0YToiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCI7YmFzZTY0LCIpLmNvbmNhdChidG9hKHIpLCIpOyIpO2lmKHRoaXMuY3NzRm9udEluZm8pe3ZhciBhPSJmb250LXdlaWdodDogIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0LCI7Iik7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKGErPSJmb250LXN0eWxlOiBvYmxpcXVlICIuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGUsImRlZzsiKSksZT0nQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6IicuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSwnIjsnKS5jb25jYXQoYSwic3JjOiIpLmNvbmNhdChpLCJ9Iil9ZWxzZSBlPSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQodGhpcy5sb2FkZWROYW1lLCciO3NyYzonKS5jb25jYXQoaSwifSIpO3JldHVybiBudWxsPT09KHQ9dGhpcy5mb250UmVnaXN0cnkpfHx2b2lkIDA9PT10fHx0LnJlZ2lzdGVyRm9udCh0aGlzLGkpLGV9fSx7a2V5OiJnZXRQYXRoR2VuZXJhdG9yIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbZV0pcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV07dmFyIHI7dHJ5e3I9dC5nZXQodGhpcy5sb2FkZWROYW1lKyJfcGF0aF8iK2UpfWNhdGNoKHQpe2lmKCF0aGlzLmlnbm9yZUVycm9ycyl0aHJvdyB0O3JldHVybiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7ZmVhdHVyZUlkOm4uVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250R2V0UGF0aH0pLCgwLG4ud2FybikoJ2dldFBhdGhHZW5lcmF0b3IgLSBpZ25vcmluZyBjaGFyYWN0ZXI6ICInLmNvbmNhdCh0LCciLicpKSx0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7fX1pZih0aGlzLmlzRXZhbFN1cHBvcnRlZCYmbi5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBpLGE9W10sbz1sKHIpO3RyeXtmb3Ioby5zKCk7IShpPW8ubigpKS5kb25lOyl7dmFyIHM9aS52YWx1ZSx1PXZvaWQgMCE9PXMuYXJncz9zLmFyZ3Muam9pbigiLCIpOiIiO2EucHVzaCgiYy4iLHMuY21kLCIoIix1LCIpO1xuIil9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPW5ldyBGdW5jdGlvbigiYyIsInNpemUiLGEuam9pbigiIikpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT1sKHIpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTsic2NhbGUiPT09YS5jbWQmJihhLmFyZ3M9W2UsLWVdKSx0W2EuY21kXS5hcHBseSh0LGEuYXJncyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX19fV0pLHR9KCk7ZS5Gb250RmFjZU9iamVjdD1wfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDE0Miksbz1yKDE0Mykscz1yKDMpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGQodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9Zih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz00MDk2LGI9cy5pc05vZGVKUyYmInVuZGVmaW5lZCI9PXR5cGVvZiBQYXRoMkQ/LTE6MWUzLF89MTYsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dih0aGlzLHQpLHRoaXMuY2FudmFzRmFjdG9yeT1lLHRoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtyZXR1cm4gdm9pZCAwIT09dGhpcy5jYWNoZVt0XT8obj10aGlzLmNhY2hlW3RdLHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChuLGUscikpOihuPXRoaXMuY2FudmFzRmFjdG9yeS5jcmVhdGUoZSxyKSx0aGlzLmNhY2hlW3RdPW4pLG59fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmNhY2hlW3RdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuY2FjaGUpe3ZhciBlPXRoaXMuY2FjaGVbdF07dGhpcy5jYW52YXNGYWN0b3J5LmRlc3Ryb3koZSksZGVsZXRlIHRoaXMuY2FjaGVbdF19fX1dKSx0fSgpO2Z1bmN0aW9uIEEodCxlLHIsbixhLG8scyxsLHUsYyl7dmFyIGY9aCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpLDYpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWZbNF0sZz1mWzVdO2lmKDA9PT1wJiYwPT09dil7dmFyIGI9cypkK20sXz1NYXRoLnJvdW5kKGIpLHc9bCp5K2csQT1NYXRoLnJvdW5kKHcpLGs9KHMrdSkqZCttLFM9TWF0aC5hYnMoTWF0aC5yb3VuZChrKS1fKXx8MSx4PShsK2MpKnkrZyxFPU1hdGguYWJzKE1hdGgucm91bmQoeCktQSl8fDE7cmV0dXJuIHQuc2V0VHJhbnNmb3JtKE1hdGguc2lnbihkKSwwLDAsTWF0aC5zaWduKHkpLF8sQSksdC5kcmF3SW1hZ2UoZSxyLG4sYSxvLDAsMCxTLEUpLHQuc2V0VHJhbnNmb3JtKGQscCx2LHksbSxnKSxbUyxFXX1pZigwPT09ZCYmMD09PXkpe3ZhciBQPWwqdittLFQ9TWF0aC5yb3VuZChQKSxDPXMqcCtnLE89TWF0aC5yb3VuZChDKSxGPShsK2MpKnYrbSxNPU1hdGguYWJzKE1hdGgucm91bmQoRiktVCl8fDEsUj0ocyt1KSpwK2csST1NYXRoLmFicyhNYXRoLnJvdW5kKFIpLU8pfHwxO3JldHVybiB0LnNldFRyYW5zZm9ybSgwLE1hdGguc2lnbihwKSxNYXRoLnNpZ24odiksMCxULE8pLHQuZHJhd0ltYWdlKGUscixuLGEsbywwLDAsSSxNKSx0LnNldFRyYW5zZm9ybShkLHAsdix5LG0sZyksW0ksTV19cmV0dXJuIHQuZHJhd0ltYWdlKGUscixuLGEsbyxzLGwsdSxjKSxbTWF0aC5oeXBvdChkLHApKnUsTWF0aC5oeXBvdCh2LHkpKmNdfXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3YodGhpcyx0KSx0aGlzLmFscGhhSXNTaGFwZT0hMSx0aGlzLmZvbnRTaXplPTAsdGhpcy5mb250U2l6ZVNjYWxlPTEsdGhpcy50ZXh0TWF0cml4PW4uSURFTlRJVFlfTUFUUklYLHRoaXMudGV4dE1hdHJpeFNjYWxlPTEsdGhpcy5mb250TWF0cml4PW4uRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy54PTAsdGhpcy55PTAsdGhpcy5saW5lWD0wLHRoaXMubGluZVk9MCx0aGlzLmNoYXJTcGFjaW5nPTAsdGhpcy53b3JkU3BhY2luZz0wLHRoaXMudGV4dEhTY2FsZT0xLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMudGV4dFJpc2U9MCx0aGlzLmZpbGxDb2xvcj0iIzAwMDAwMCIsdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5wYXR0ZXJuRmlsbD0hMSx0aGlzLmZpbGxBbHBoYT0xLHRoaXMuc3Ryb2tlQWxwaGE9MSx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuYWN0aXZlU01hc2s9bnVsbCx0aGlzLnRyYW5zZmVyTWFwcz1udWxsLHRoaXMuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwwLGUscl0pfXJldHVybiBtKHQsW3trZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHQuY2xpcEJveD10aGlzLmNsaXBCb3guc2xpY2UoKSx0fX0se2tleToic2V0Q3VycmVudFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMueD10LHRoaXMueT1lfX0se2tleToidXBkYXRlUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWgobi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLHJdLHQpLDIpO2U9aVswXSxyPWlbMV0sdGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCxlKSx0aGlzLm1pblk9TWF0aC5taW4odGhpcy5taW5ZLHIpLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZSksdGhpcy5tYXhZPU1hdGgubWF4KHRoaXMubWF4WSxyKX19LHtrZXk6InVwZGF0ZVJlY3RNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCksaT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oZS5zbGljZSgyKSx0KTt0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLHJbMF0saVswXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxyWzFdLGlbMV0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsclswXSxpWzBdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLHJbMV0saVsxXSl9fSx7a2V5OiJ1cGRhdGVTY2FsaW5nUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtuLlV0aWwuc2NhbGVNaW5NYXgodCxlKSx0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLGVbMF0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZVsxXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxlWzJdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLGVbM10pfX0se2tleToidXBkYXRlQ3VydmVQYXRoTWluTWF4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSxjKXt2YXIgaD1uLlV0aWwuYmV6aWVyQm91bmRpbmdCb3goZSxyLGksYSxvLHMsbCx1KTtpZihjKXJldHVybiBjWzBdPU1hdGgubWluKGNbMF0saFswXSxoWzJdKSxjWzFdPU1hdGgubWF4KGNbMV0saFswXSxoWzJdKSxjWzJdPU1hdGgubWluKGNbMl0saFsxXSxoWzNdKSx2b2lkKGNbM109TWF0aC5tYXgoY1szXSxoWzFdLGhbM10pKTt0aGlzLnVwZGF0ZVJlY3RNaW5NYXgodCxoKX19LHtrZXk6ImdldFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1bdGhpcy5taW5YLHRoaXMubWluWSx0aGlzLm1heFgsdGhpcy5tYXhZXTtpZih0PT09YS5QYXRoVHlwZS5TVFJPS0Upe2V8fCgwLG4udW5yZWFjaGFibGUpKCJTdHJva2UgYm91bmRpbmcgYm94IG11c3QgaW5jbHVkZSB0cmFuc2Zvcm0uIik7dmFyIGk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpLG89aVswXSp0aGlzLmxpbmVXaWR0aC8yLHM9aVsxXSp0aGlzLmxpbmVXaWR0aC8yO3JbMF0tPW8sclsxXS09cyxyWzJdKz1vLHJbM10rPXN9cmV0dXJuIHJ9fSx7a2V5OiJ1cGRhdGVDbGlwRnJvbVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bi5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsdGhpcy5nZXRQYXRoQm91bmRpbmdCb3goKSk7dGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHR8fFswLDAsMCwwXSl9fSx7a2V5OiJpc0VtcHR5Q2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW5YPT09MS8wfX0se2tleToic3RhcnROZXdQYXRoQW5kQ2xpcEJveCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jbGlwQm94PXQsdGhpcy5taW5YPTEvMCx0aGlzLm1pblk9MS8wLHRoaXMubWF4WD0wLHRoaXMubWF4WT0wfX0se2tleToiZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuIG4uVXRpbC5pbnRlcnNlY3QodGhpcy5jbGlwQm94LHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KHQsZSkpfX1dKSx0fSgpO2Z1bmN0aW9uIFModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGF0YSYmZSBpbnN0YW5jZW9mIEltYWdlRGF0YSl0LnB1dEltYWdlRGF0YShlLDAsMCk7ZWxzZXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZD1lLmhlaWdodCxwPWUud2lkdGgsdj1kJV8seT0oZC12KS9fLG09MD09PXY/eTp5KzEsZz10LmNyZWF0ZUltYWdlRGF0YShwLF8pLGI9MCx3PWUuZGF0YSxBPWcuZGF0YTtpZihyKXN3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnU9clswXSxjPXJbMF0saD1yWzBdLGY9clswXTticmVhaztjYXNlIDQ6dT1yWzBdLGM9clsxXSxoPXJbMl0sZj1yWzNdfWlmKGUua2luZD09PW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXt2YXIgaz13LmJ5dGVMZW5ndGgsUz1uZXcgVWludDMyQXJyYXkoQS5idWZmZXIsMCxBLmJ5dGVMZW5ndGg+PjIpLHg9Uy5sZW5ndGgsRT1wKzc+PjMsUD00Mjk0OTY3Mjk1LFQ9bi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NTtpZihmJiYyNTU9PT1mWzBdJiYwPT09ZlsyNTVdKXt2YXIgQz1bVCxQXTtQPUNbMF0sVD1DWzFdfWZvcihhPTA7YTxtO2ErKyl7Zm9yKHM9YTx5P186dixpPTAsbz0wO288cztvKyspe2Zvcih2YXIgTz1rLWIsRj0wLE09Tz5FP3A6OCpPLTcsUj0tOCZNLEk9MCxqPTA7RjxSO0YrPTgpaj13W2IrK10sU1tpKytdPTEyOCZqP1A6VCxTW2krK109NjQmaj9QOlQsU1tpKytdPTMyJmo/UDpULFNbaSsrXT0xNiZqP1A6VCxTW2krK109OCZqP1A6VCxTW2krK109NCZqP1A6VCxTW2krK109MiZqP1A6VCxTW2krK109MSZqP1A6VDtmb3IoO0Y8TTtGKyspMD09PUkmJihqPXdbYisrXSxJPTEyOCksU1tpKytdPWomST9QOlQsST4+PTF9Zm9yKDtpPHg7KVNbaSsrXT0wO3QucHV0SW1hZ2VEYXRhKGcsMCxhKl8pfX1lbHNlIGlmKGUua2luZD09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFApe3ZhciBMPSEhKHV8fGN8fGgpO2ZvcihvPTAsbD1wKl8qNCxhPTA7YTx5O2ErKyl7aWYoQS5zZXQody5zdWJhcnJheShiLGIrbCkpLGIrPWwsTClmb3IodmFyIEQ9MDtEPGw7RCs9NCl1JiYoQVtEKzBdPXVbQVtEKzBdXSksYyYmKEFbRCsxXT1jW0FbRCsxXV0pLGgmJihBW0QrMl09aFtBW0QrMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsbyksbys9X31pZihhPG0pe2lmKGw9cCp2KjQsQS5zZXQody5zdWJhcnJheShiLGIrbCkpLEwpZm9yKHZhciBOPTA7TjxsO04rPTQpdSYmKEFbTiswXT11W0FbTiswXV0pLGMmJihBW04rMV09Y1tBW04rMV1dKSxoJiYoQVtOKzJdPWhbQVtOKzJdXSk7dC5wdXRJbWFnZURhdGEoZywwLG8pfX1lbHNle2lmKGUua2luZCE9PW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCl0aHJvdyBuZXcgRXJyb3IoImJhZCBpbWFnZSBraW5kOiAiLmNvbmNhdChlLmtpbmQpKTt2YXIgVT0hISh1fHxjfHxoKTtmb3IobD1wKihzPV8pLGE9MDthPG07YSsrKXtmb3IoYT49eSYmKGw9cCoocz12KSksaT0wLG89bDtvLS07KUFbaSsrXT13W2IrK10sQVtpKytdPXdbYisrXSxBW2krK109d1tiKytdLEFbaSsrXT0yNTU7aWYoVSlmb3IodmFyIFc9MDtXPGk7Vys9NCl1JiYoQVtXKzBdPXVbQVtXKzBdXSksYyYmKEFbVysxXT1jW0FbVysxXV0pLGgmJihBW1crMl09aFtBW1crMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsYSpfKX19fX1mdW5jdGlvbiB4KHQsZSl7aWYoZS5iaXRtYXApdC5kcmF3SW1hZ2UoZS5iaXRtYXAsMCwwKTtlbHNlIGZvcih2YXIgcj1lLmhlaWdodCxuPWUud2lkdGgsaT1yJV8sYT0oci1pKS9fLHM9MD09PWk/YTphKzEsbD10LmNyZWF0ZUltYWdlRGF0YShuLF8pLHU9MCxjPWUuZGF0YSxoPWwuZGF0YSxmPTA7ZjxzO2YrKyl7dmFyIGQ9ZjxhP186aTt1PSgwLG8uYXBwbHlNYXNrSW1hZ2VEYXRhKSh7c3JjOmMsc3JjUG9zOnUsZGVzdDpoLHdpZHRoOm4saGVpZ2h0OmR9KS5zcmNQb3MsdC5wdXRJbWFnZURhdGEobCwwLGYqXyl9fWZ1bmN0aW9uIEUodCxlKXtmb3IodmFyIHI9MCxuPVsic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJmaWxsUnVsZSIsImdsb2JhbEFscGhhIiwibGluZVdpZHRoIiwibGluZUNhcCIsImxpbmVKb2luIiwibWl0ZXJMaW1pdCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZvbnQiXTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTt2b2lkIDAhPT10W2ldJiYoZVtpXT10W2ldKX12b2lkIDAhPT10LnNldExpbmVEYXNoJiYoZS5zZXRMaW5lRGFzaCh0LmdldExpbmVEYXNoKCkpLGUubGluZURhc2hPZmZzZXQ9dC5saW5lRGFzaE9mZnNldCl9ZnVuY3Rpb24gUCh0LGUpe3Quc3Ryb2tlU3R5bGU9dC5maWxsU3R5bGU9ZXx8IiMwMDAwMDAiLHQuZmlsbFJ1bGU9Im5vbnplcm8iLHQuZ2xvYmFsQWxwaGE9MSx0LmxpbmVXaWR0aD0xLHQubGluZUNhcD0iYnV0dCIsdC5saW5lSm9pbj0ibWl0ZXIiLHQubWl0ZXJMaW1pdD0xMCx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuZm9udD0iMTBweCBzYW5zLXNlcmlmIix2b2lkIDAhPT10LnNldExpbmVEYXNoJiYodC5zZXRMaW5lRGFzaChbXSksdC5saW5lRGFzaE9mZnNldD0wKX1mdW5jdGlvbiBUKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTM7YTxpO2ErPTQpe3ZhciBvPXRbYV07aWYoMD09PW8pdFthLTNdPWUsdFthLTJdPXIsdFthLTFdPW47ZWxzZSBpZihvPDI1NSl7dmFyIHM9MjU1LW87dFthLTNdPXRbYS0zXSpvK2Uqcz4+OCx0W2EtMl09dFthLTJdKm8rcipzPj44LHRbYS0xXT10W2EtMV0qbytuKnM+Pjh9fX1mdW5jdGlvbiBDKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT0zO2k8bjtpKz00KXt2YXIgYT1yP3JbdFtpXV06dFtpXTtlW2ldPWVbaV0qYSouMDAzOTIxNTY4NjI3NDUwOTh8MH19ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MztpPG47aSs9NCl7dmFyIGE9NzcqdFtpLTNdKzE1Mip0W2ktMl0rMjgqdFtpLTFdO2VbaV09cj9lW2ldKnJbYT4+OF0+Pjg6ZVtpXSphPj4xNn19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0KTtyWzBdPU1hdGguZnJvdW5kKHJbMF0pLHJbMV09TWF0aC5mcm91bmQoclsxXSk7dmFyIGE9TWF0aC5mcm91bmQoKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpb3x8MSkqaS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMpO3JldHVybiB2b2lkIDAhPT1lP2U6clswXTw9YXx8clsxXTw9YX12YXIgTT1bImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLFI9WyJtaXRlciIsInJvdW5kIiwiYmV2ZWwiXSxJPXt9LGo9e30sTD1uZXcgV2Vha1NldCxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzKXt2YXIgbCx1LGM9YS5vcHRpb25hbENvbnRlbnRDb25maWcsaD1hLm1hcmtlZENvbnRlbnRTdGFjayxmPXZvaWQgMD09PWg/bnVsbDpoO3YodGhpcyx0KSxmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KGw9dGhpcyx1PUwpLHUuYWRkKGwpLHRoaXMuY3R4PWUsdGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnN0YXRlU3RhY2s9W10sdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMucGVuZGluZ0VPRmlsbD0hMSx0aGlzLnJlcz1udWxsLHRoaXMueG9ianM9bnVsbCx0aGlzLmNvbW1vbk9ianM9cix0aGlzLm9ianM9bix0aGlzLmNhbnZhc0ZhY3Rvcnk9aSx0aGlzLmdyb3VwU3RhY2s9W10sdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm09bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjaz1bXSx0aGlzLmdyb3VwTGV2ZWw9MCx0aGlzLnNtYXNrU3RhY2s9W10sdGhpcy5zbWFza0NvdW50ZXI9MCx0aGlzLnRlbXBTTWFzaz1udWxsLHRoaXMuc3VzcGVuZGVkQ3R4PW51bGwsdGhpcy5jb250ZW50VmlzaWJsZT0hMCx0aGlzLm1hcmtlZENvbnRlbnRTdGFjaz1mfHxbXSx0aGlzLm9wdGlvbmFsQ29udGVudENvbmZpZz1jLHRoaXMuY2FjaGVkQ2FudmFzZXM9bmV3IHcodGhpcy5jYW52YXNGYWN0b3J5KSx0aGlzLmNhY2hlZFBhdHRlcm5zPW5ldyBNYXAsdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwPW8sdGhpcy52aWV3cG9ydFNjYWxlPTEsdGhpcy5vdXRwdXRTY2FsZVg9MSx0aGlzLm91dHB1dFNjYWxlWT0xLHRoaXMuYmFja2dyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmJhY2tncm91bmQpfHxudWxsLHRoaXMuZm9yZWdyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmZvcmVncm91bmQpfHxudWxsLHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmc9bnVsbCx0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsdGhpcy5fY2FjaGVkQml0bWFwc01hcD1uZXcgTWFwfXJldHVybiBtKHQsW3trZXk6ImdldE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3RhcnRzV2l0aCgiZ18iKT90aGlzLmNvbW1vbk9ianMuZ2V0KHQpOnRoaXMub2Jqcy5nZXQodCk6ZX19LHtrZXk6ImJlZ2luRHJhd2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhbnNmb3JtLGE9dC52aWV3cG9ydCxvPXQudHJhbnNwYXJlbmN5LHM9dm9pZCAwIT09byYmbyx1PXQuYmFja2dyb3VuZCxjPXZvaWQgMD09PXU/bnVsbDp1LGY9dGhpcy5jdHguY2FudmFzLndpZHRoLGQ9dGhpcy5jdHguY2FudmFzLmhlaWdodCxwPWN8fCIjZmZmZmZmIjtpZih0aGlzLmN0eC5zYXZlKCksdGhpcy5mb3JlZ3JvdW5kQ29sb3ImJnRoaXMuYmFja2dyb3VuZENvbG9yKXt0aGlzLmN0eC5maWxsU3R5bGU9dGhpcy5mb3JlZ3JvdW5kQ29sb3I7dmFyIHY9dGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO3RoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcjt2YXIgeSxtLGc9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO2lmKHRoaXMuY3R4LmZpbGxTdHlsZT1wLHk9InN0cmluZyI9PXR5cGVvZihtPXRoaXMuY3R4LmZpbGxTdHlsZSkmJi9eI1swLTlBLUZhLWZdezZ9JC8udGVzdChtKSwiIzAwMDAwMCI9PT12JiYiI2ZmZmZmZiI9PT1nfHx2PT09Z3x8IXkpdGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbDtlbHNle3ZhciBiPWgoKDAsaS5nZXRSR0IpKG0pLDMpLF89YlswXSx3PWJbMV0sQT1iWzJdLGs9ZnVuY3Rpb24odCl7cmV0dXJuKHQvPTI1NSk8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9LFM9TWF0aC5yb3VuZCguMjEyNiprKF8pKy43MTUyKmsodykrLjA3MjIqayhBKSk7dGhpcy5zZWxlY3RDb2xvcj1mdW5jdGlvbih0LGUscil7dmFyIG49LjIxMjYqayh0KSsuNzE1MiprKGUpKy4wNzIyKmsocik7cmV0dXJuIE1hdGgucm91bmQobik9PT1TP2c6dn19fWlmKHRoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcnx8cCx0aGlzLmN0eC5maWxsUmVjdCgwLDAsZixkKSx0aGlzLmN0eC5yZXN0b3JlKCkscyl7dmFyIHgsRT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygidHJhbnNwYXJlbnQiLGYsZCk7dGhpcy5jb21wb3NpdGVDdHg9dGhpcy5jdHgsdGhpcy50cmFuc3BhcmVudENhbnZhcz1FLmNhbnZhcyx0aGlzLmN0eD1FLmNvbnRleHQsdGhpcy5jdHguc2F2ZSgpLCh4PXRoaXMuY3R4KS50cmFuc2Zvcm0uYXBwbHkoeCxsKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jb21wb3NpdGVDdHgpKSl9dGhpcy5jdHguc2F2ZSgpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpLG4mJigocj10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KHIsbChuKSksdGhpcy5vdXRwdXRTY2FsZVg9blswXSx0aGlzLm91dHB1dFNjYWxlWT1uWzBdKSwoZT10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KGUsbChhLnRyYW5zZm9ybSkpLHRoaXMudmlld3BvcnRTY2FsZT1hLnNjYWxlLHRoaXMuYmFzZVRyYW5zZm9ybT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KX19LHtrZXk6ImV4ZWN1dGVPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuYXJnc0FycmF5LG89dC5mbkFycmF5LHM9ZXx8MCxsPWEubGVuZ3RoO2lmKGw9PT1zKXJldHVybiBzO2Zvcih2YXIgdSxoPWwtcz4xMCYmImZ1bmN0aW9uIj09dHlwZW9mIHIsZj1oP0RhdGUubm93KCkrMTU6MCxkPTAscD10aGlzLmNvbW1vbk9ianMsdj10aGlzLm9ianM7Oyl7aWYodm9pZCAwIT09aSYmcz09PWkubmV4dEJyZWFrUG9pbnQpcmV0dXJuIGkuYnJlYWtJdChzLHIpLHM7aWYoKHU9b1tzXSkhPT1uLk9QUy5kZXBlbmRlbmN5KXRoaXNbdV0uYXBwbHkodGhpcyxhW3NdKTtlbHNle3ZhciB5LG09YyhhW3NdKTt0cnl7Zm9yKG0ucygpOyEoeT1tLm4oKSkuZG9uZTspe3ZhciBnPXkudmFsdWUsYj1nLnN0YXJ0c1dpdGgoImdfIik/cDp2O2lmKCFiLmhhcyhnKSlyZXR1cm4gYi5nZXQoZyxyKSxzfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19aWYoKytzPT09bClyZXR1cm4gcztpZihoJiYrK2Q+MTApe2lmKERhdGUubm93KCk+ZilyZXR1cm4gcigpLHM7ZD0wfX19fSx7a2V5OiJlbmREcmF3aW5nIix2YWx1ZTpmdW5jdGlvbigpe3UodGhpcyxMLE4pLmNhbGwodGhpcyksdGhpcy5jYWNoZWRDYW52YXNlcy5jbGVhcigpLHRoaXMuY2FjaGVkUGF0dGVybnMuY2xlYXIoKTt2YXIgdCxlPWModGhpcy5fY2FjaGVkQml0bWFwc01hcC52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcixuPXQudmFsdWUsaT1jKG4udmFsdWVzKCkpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTsidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQmJihhLndpZHRoPWEuaGVpZ2h0PTApfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1uLmNsZWFyKCl9fWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfXRoaXMuX2NhY2hlZEJpdG1hcHNNYXAuY2xlYXIoKX19LHtrZXk6Il9zY2FsZUltYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9dC53aWR0aCxhPXQuaGVpZ2h0LG89TWF0aC5tYXgoTWF0aC5oeXBvdChlWzBdLGVbMV0pLDEpLHM9TWF0aC5tYXgoTWF0aC5oeXBvdChlWzJdLGVbM10pLDEpLGw9aSx1PWEsYz0icHJlc2NhbGUxIjtvPjImJmw+MXx8cz4yJiZ1PjE7KXt2YXIgaD1sLGY9dTtvPjImJmw+MSYmKG8vPWwvKGg9TWF0aC5jZWlsKGwvMikpKSxzPjImJnU+MSYmKHMvPXUvKGY9TWF0aC5jZWlsKHUvMikpKSwobj0ocj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjLGgsZikpLmNvbnRleHQpLmNsZWFyUmVjdCgwLDAsaCxmKSxuLmRyYXdJbWFnZSh0LDAsMCxsLHUsMCwwLGgsZiksdD1yLmNhbnZhcyxsPWgsdT1mLGM9InByZXNjYWxlMSI9PT1jPyJwcmVzY2FsZTIiOiJwcmVzY2FsZTEifXJldHVybntpbWc6dCxwYWludFdpZHRoOmwscGFpbnRIZWlnaHQ6dX19fSx7a2V5OiJfY3JlYXRlTWFza0NhbnZhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixvLHMsdT10aGlzLmN0eCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXRoaXMuY3VycmVudC5maWxsQ29sb3IsZD10aGlzLmN1cnJlbnQucGF0dGVybkZpbGwscD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHUpO2lmKCh0LmJpdG1hcHx8dC5kYXRhKSYmdC5jb3VudD4xKXt2YXIgdj10LmJpdG1hcHx8dC5kYXRhLmJ1ZmZlcjtyPUpTT04uc3RyaW5naWZ5KGQ/cDpbcC5zbGljZSgwLDQpLGZdKSwoZT10aGlzLl9jYWNoZWRCaXRtYXBzTWFwLmdldCh2KSl8fChlPW5ldyBNYXAsdGhpcy5fY2FjaGVkQml0bWFwc01hcC5zZXQodixlKSk7dmFyIHk9ZS5nZXQocik7aWYoeSYmIWQpcmV0dXJue2NhbnZhczp5LG9mZnNldFg6TWF0aC5yb3VuZChNYXRoLm1pbihwWzBdLHBbMl0pK3BbNF0pLG9mZnNldFk6TWF0aC5yb3VuZChNYXRoLm1pbihwWzFdLHBbM10pK3BbNV0pfTtvPXl9b3x8eCgocz10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsYyxoKSkuY29udGV4dCx0KTt2YXIgbT1uLlV0aWwudHJhbnNmb3JtKHAsWzEvYywwLDAsLTEvaCwwLDBdKTttPW4uVXRpbC50cmFuc2Zvcm0obSxbMSwwLDAsMSwwLC1oXSk7dmFyIGc9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLDBdLG0pLGI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtjLGhdLG0pLF89bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2dbMF0sZ1sxXSxiWzBdLGJbMV1dKSx3PU1hdGgucm91bmQoX1syXS1fWzBdKXx8MSxrPU1hdGgucm91bmQoX1szXS1fWzFdKXx8MSxTPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJmaWxsQ2FudmFzIix3LGspLEU9Uy5jb250ZXh0LFA9TWF0aC5taW4oZ1swXSxiWzBdKSxUPU1hdGgubWluKGdbMV0sYlsxXSk7RS50cmFuc2xhdGUoLVAsLVQpLEUudHJhbnNmb3JtLmFwcGx5KEUsbChtKSksb3x8KG89KG89dGhpcy5fc2NhbGVJbWFnZShzLmNhbnZhcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSkpLmltZyxlJiZkJiZlLnNldChyLG8pKSxFLmltYWdlU21vb3RoaW5nRW5hYmxlZD1GKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkoRSksdC5pbnRlcnBvbGF0ZSksQShFLG8sMCwwLG8ud2lkdGgsby5oZWlnaHQsMCwwLGMsaCksRS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiI7dmFyIEM9bi5VdGlsLnRyYW5zZm9ybSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSxbMSwwLDAsMSwtUCwtVF0pO3JldHVybiBFLmZpbGxTdHlsZT1kP2YuZ2V0UGF0dGVybih1LHRoaXMsQyxhLlBhdGhUeXBlLkZJTEwpOmYsRS5maWxsUmVjdCgwLDAsYyxoKSxlJiYhZCYmKHRoaXMuY2FjaGVkQ2FudmFzZXMuZGVsZXRlKCJmaWxsQ2FudmFzIiksZS5zZXQocixTLmNhbnZhcykpLHtjYW52YXM6Uy5jYW52YXMsb2Zmc2V0WDpNYXRoLnJvdW5kKFApLG9mZnNldFk6TWF0aC5yb3VuZChUKX19fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLmN1cnJlbnQubGluZVdpZHRoJiYodGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsKSx0aGlzLmN1cnJlbnQubGluZVdpZHRoPXQsdGhpcy5jdHgubGluZVdpZHRoPXR9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN0eC5saW5lQ2FwPU1bdF19fSx7a2V5OiJzZXRMaW5lSm9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdHgubGluZUpvaW49Ult0XX19LHtrZXk6InNldE1pdGVyTGltaXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3R4Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldERhc2giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jdHg7dm9pZCAwIT09ci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2godCksci5saW5lRGFzaE9mZnNldD1lKX19LHtrZXk6InNldFJlbmRlcmluZ0ludGVudCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0RmxhdG5lc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe319LHtrZXk6InNldEdTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1jKHQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49aChlLnZhbHVlLDIpLGk9blswXSxhPW5bMV07c3dpdGNoKGkpe2Nhc2UiTFciOnRoaXMuc2V0TGluZVdpZHRoKGEpO2JyZWFrO2Nhc2UiTEMiOnRoaXMuc2V0TGluZUNhcChhKTticmVhaztjYXNlIkxKIjp0aGlzLnNldExpbmVKb2luKGEpO2JyZWFrO2Nhc2UiTUwiOnRoaXMuc2V0TWl0ZXJMaW1pdChhKTticmVhaztjYXNlIkQiOnRoaXMuc2V0RGFzaChhWzBdLGFbMV0pO2JyZWFrO2Nhc2UiUkkiOnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KGEpO2JyZWFrO2Nhc2UiRkwiOnRoaXMuc2V0RmxhdG5lc3MoYSk7YnJlYWs7Y2FzZSJGb250Ijp0aGlzLnNldEZvbnQoYVswXSxhWzFdKTticmVhaztjYXNlIkNBIjp0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9YTticmVhaztjYXNlImNhIjp0aGlzLmN1cnJlbnQuZmlsbEFscGhhPWEsdGhpcy5jdHguZ2xvYmFsQWxwaGE9YTticmVhaztjYXNlIkJNIjp0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YTticmVhaztjYXNlIlNNYXNrIjp0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s9YT90aGlzLnRlbXBTTWFzazpudWxsLHRoaXMudGVtcFNNYXNrPW51bGwsdGhpcy5jaGVja1NNYXNrU3RhdGUoKTticmVhaztjYXNlIlRSIjp0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzPWF9fX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fSx7a2V5OiJpblNNYXNrTW9kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN1c3BlbmRlZEN0eH19LHtrZXk6ImNoZWNrU01hc2tTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluU01hc2tNb2RlO3RoaXMuY3VycmVudC5hY3RpdmVTTWFzayYmIXQ/dGhpcy5iZWdpblNNYXNrTW9kZSgpOiF0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2smJnQmJnRoaXMuZW5kU01hc2tNb2RlKCl9fSx7a2V5OiJiZWdpblNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmluU01hc2tNb2RlKXRocm93IG5ldyBFcnJvcigiYmVnaW5TTWFza01vZGUgY2FsbGVkIHdoaWxlIGFscmVhZHkgaW4gc21hc2sgbW9kZSIpO3ZhciB0PXRoaXMuY3R4LmNhbnZhcy53aWR0aCxlPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQscj0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsbj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhyLHQsZSk7dGhpcy5zdXNwZW5kZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9bi5jb250ZXh0O3ZhciBhPXRoaXMuY3R4O2Euc2V0VHJhbnNmb3JtLmFwcGx5KGEsbCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuc3VzcGVuZGVkQ3R4KSkpLEUodGhpcy5zdXNwZW5kZWRDdHgsYSksZnVuY3Rpb24odCxlKXtpZih0Ll9yZW1vdmVNaXJyb3JpbmcpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IGlzIGFscmVhZHkgZm9yd2FyZGluZyBvcGVyYXRpb25zLiIpO3QuX19vcmlnaW5hbFNhdmU9dC5zYXZlLHQuX19vcmlnaW5hbFJlc3RvcmU9dC5yZXN0b3JlLHQuX19vcmlnaW5hbFJvdGF0ZT10LnJvdGF0ZSx0Ll9fb3JpZ2luYWxTY2FsZT10LnNjYWxlLHQuX19vcmlnaW5hbFRyYW5zbGF0ZT10LnRyYW5zbGF0ZSx0Ll9fb3JpZ2luYWxUcmFuc2Zvcm09dC50cmFuc2Zvcm0sdC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtPXQuc2V0VHJhbnNmb3JtLHQuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtPXQucmVzZXRUcmFuc2Zvcm0sdC5fX29yaWdpbmFsQ2xpcD10LmNsaXAsdC5fX29yaWdpbmFsTW92ZVRvPXQubW92ZVRvLHQuX19vcmlnaW5hbExpbmVUbz10LmxpbmVUbyx0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvPXQuYmV6aWVyQ3VydmVUbyx0Ll9fb3JpZ2luYWxSZWN0PXQucmVjdCx0Ll9fb3JpZ2luYWxDbG9zZVBhdGg9dC5jbG9zZVBhdGgsdC5fX29yaWdpbmFsQmVnaW5QYXRoPXQuYmVnaW5QYXRoLHQuX3JlbW92ZU1pcnJvcmluZz1mdW5jdGlvbigpe3Quc2F2ZT10Ll9fb3JpZ2luYWxTYXZlLHQucmVzdG9yZT10Ll9fb3JpZ2luYWxSZXN0b3JlLHQucm90YXRlPXQuX19vcmlnaW5hbFJvdGF0ZSx0LnNjYWxlPXQuX19vcmlnaW5hbFNjYWxlLHQudHJhbnNsYXRlPXQuX19vcmlnaW5hbFRyYW5zbGF0ZSx0LnRyYW5zZm9ybT10Ll9fb3JpZ2luYWxUcmFuc2Zvcm0sdC5zZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtLHQucmVzZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0sdC5jbGlwPXQuX19vcmlnaW5hbENsaXAsdC5tb3ZlVG89dC5fX29yaWdpbmFsTW92ZVRvLHQubGluZVRvPXQuX19vcmlnaW5hbExpbmVUbyx0LmJlemllckN1cnZlVG89dC5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyx0LnJlY3Q9dC5fX29yaWdpbmFsUmVjdCx0LmNsb3NlUGF0aD10Ll9fb3JpZ2luYWxDbG9zZVBhdGgsdC5iZWdpblBhdGg9dC5fX29yaWdpbmFsQmVnaW5QYXRoLGRlbGV0ZSB0Ll9yZW1vdmVNaXJyb3Jpbmd9LHQuc2F2ZT1mdW5jdGlvbigpe2Uuc2F2ZSgpLHRoaXMuX19vcmlnaW5hbFNhdmUoKX0sdC5yZXN0b3JlPWZ1bmN0aW9uKCl7ZS5yZXN0b3JlKCksdGhpcy5fX29yaWdpbmFsUmVzdG9yZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0LHIpe2UudHJhbnNsYXRlKHQsciksdGhpcy5fX29yaWdpbmFsVHJhbnNsYXRlKHQscil9LHQuc2NhbGU9ZnVuY3Rpb24odCxyKXtlLnNjYWxlKHQsciksdGhpcy5fX29yaWdpbmFsU2NhbGUodCxyKX0sdC50cmFuc2Zvcm09ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UudHJhbnNmb3JtKHQscixuLGksYSxvKSx0aGlzLl9fb3JpZ2luYWxUcmFuc2Zvcm0odCxyLG4saSxhLG8pfSx0LnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LHIsbixpLGEsbyl7ZS5zZXRUcmFuc2Zvcm0odCxyLG4saSxhLG8pLHRoaXMuX19vcmlnaW5hbFNldFRyYW5zZm9ybSh0LHIsbixpLGEsbyl9LHQucmVzZXRUcmFuc2Zvcm09ZnVuY3Rpb24oKXtlLnJlc2V0VHJhbnNmb3JtKCksdGhpcy5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0oKX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7ZS5yb3RhdGUodCksdGhpcy5fX29yaWdpbmFsUm90YXRlKHQpfSx0LmNsaXA9ZnVuY3Rpb24odCl7ZS5jbGlwKHQpLHRoaXMuX19vcmlnaW5hbENsaXAodCl9LHQubW92ZVRvPWZ1bmN0aW9uKHQscil7ZS5tb3ZlVG8odCxyKSx0aGlzLl9fb3JpZ2luYWxNb3ZlVG8odCxyKX0sdC5saW5lVG89ZnVuY3Rpb24odCxyKXtlLmxpbmVUbyh0LHIpLHRoaXMuX19vcmlnaW5hbExpbmVUbyh0LHIpfSx0LmJlemllckN1cnZlVG89ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UuYmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyksdGhpcy5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyl9LHQucmVjdD1mdW5jdGlvbih0LHIsbixpKXtlLnJlY3QodCxyLG4saSksdGhpcy5fX29yaWdpbmFsUmVjdCh0LHIsbixpKX0sdC5jbG9zZVBhdGg9ZnVuY3Rpb24oKXtlLmNsb3NlUGF0aCgpLHRoaXMuX19vcmlnaW5hbENsb3NlUGF0aCgpfSx0LmJlZ2luUGF0aD1mdW5jdGlvbigpe2UuYmVnaW5QYXRoKCksdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCl9fShhLHRoaXMuc3VzcGVuZGVkQ3R4KSx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKX19LHtrZXk6ImVuZFNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pblNNYXNrTW9kZSl0aHJvdyBuZXcgRXJyb3IoImVuZFNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgbm90IGluIHNtYXNrIG1vZGUiKTt0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCksRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5jdHg9dGhpcy5zdXNwZW5kZWRDdHgsdGhpcy5zdXNwZW5kZWRDdHg9bnVsbH19LHtrZXk6ImNvbXBvc2UiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayl7dD8odFswXT1NYXRoLmZsb29yKHRbMF0pLHRbMV09TWF0aC5mbG9vcih0WzFdKSx0WzJdPU1hdGguY2VpbCh0WzJdKSx0WzNdPU1hdGguY2VpbCh0WzNdKSk6dD1bMCwwLHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTt2YXIgZT10aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7KGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5bMF0sYT1uWzFdLG89blsyXS1pLHM9blszXS1hOzAhPT1vJiYwIT09cyYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7dmFyIGgsZj0hIWEsZD1mP2FbMF06MCxwPWY/YVsxXTowLHY9Zj9hWzJdOjA7aD0iTHVtaW5vc2l0eSI9PT1pP086Qztmb3IodmFyIHk9TWF0aC5taW4obixNYXRoLmNlaWwoMTA0ODU3Ni9yKSksbT0wO208bjttKz15KXt2YXIgZz1NYXRoLm1pbih5LG4tbSksYj10LmdldEltYWdlRGF0YShzLXUsbSsobC1jKSxyLGcpLF89ZS5nZXRJbWFnZURhdGEocyxtK2wscixnKTtmJiZUKGIuZGF0YSxkLHAsdiksaChiLmRhdGEsXy5kYXRhLG8pLGUucHV0SW1hZ2VEYXRhKF8scyxtK2wpfX0oZS5jb250ZXh0LHIsbyxzLGUuc3VidHlwZSxlLmJhY2tkcm9wLGUudHJhbnNmZXJNYXAsaSxhLGUub2Zmc2V0WCxlLm9mZnNldFkpLHQuc2F2ZSgpLHQuZ2xvYmFsQWxwaGE9MSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LmRyYXdJbWFnZShyLmNhbnZhcywwLDApLHQucmVzdG9yZSgpKX0pKHRoaXMuc3VzcGVuZGVkQ3R4LGUsdGhpcy5jdHgsdCksdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmN0eC5jYW52YXMud2lkdGgsdGhpcy5jdHguY2FudmFzLmhlaWdodCksdGhpcy5jdHgucmVzdG9yZSgpfX19LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pblNNYXNrTW9kZT8oRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5zdXNwZW5kZWRDdHguc2F2ZSgpKTp0aGlzLmN0eC5zYXZlKCk7dmFyIHQ9dGhpcy5jdXJyZW50O3RoaXMuc3RhdGVTdGFjay5wdXNoKHQpLHRoaXMuY3VycmVudD10LmNsb25lKCl9fSx7a2V5OiJyZXN0b3JlIix2YWx1ZTpmdW5jdGlvbigpezA9PT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiZ0aGlzLmluU01hc2tNb2RlJiZ0aGlzLmVuZFNNYXNrTW9kZSgpLDAhPT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiYodGhpcy5jdXJyZW50PXRoaXMuc3RhdGVTdGFjay5wb3AoKSx0aGlzLmluU01hc2tNb2RlPyh0aGlzLnN1c3BlbmRlZEN0eC5yZXN0b3JlKCksRSh0aGlzLnN1c3BlbmRlZEN0eCx0aGlzLmN0eCkpOnRoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLmNoZWNrU01hc2tTdGF0ZSgpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY3R4LnRyYW5zZm9ybSh0LGUscixuLGksYSksdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsLHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH19LHtrZXk6ImNvbnN0cnVjdFBhdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGEsbyxzPXRoaXMuY3R4LGw9dGhpcy5jdXJyZW50LHU9bC54LGM9bC55LGg9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShzKSxmPTA9PT1oWzBdJiYwPT09aFszXXx8MD09PWhbMV0mJjA9PT1oWzJdLGQ9Zj9yLnNsaWNlKDApOm51bGwscD0wLHY9MCx5PXQubGVuZ3RoO3A8eTtwKyspc3dpdGNoKDB8dFtwXSl7Y2FzZSBuLk9QUy5yZWN0YW5nbGU6dT1lW3YrK10sYz1lW3YrK107dmFyIG09ZVt2KytdLGc9ZVt2KytdLGI9dSttLF89YytnO3MubW92ZVRvKHUsYyksMD09PW18fDA9PT1nP3MubGluZVRvKGIsXyk6KHMubGluZVRvKGIsYykscy5saW5lVG8oYixfKSxzLmxpbmVUbyh1LF8pKSxmfHxsLnVwZGF0ZVJlY3RNaW5NYXgoaCxbdSxjLGIsX10pLHMuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSBuLk9QUy5tb3ZlVG86dT1lW3YrK10sYz1lW3YrK10scy5tb3ZlVG8odSxjKSxmfHxsLnVwZGF0ZVBhdGhNaW5NYXgoaCx1LGMpO2JyZWFrO2Nhc2Ugbi5PUFMubGluZVRvOnU9ZVt2KytdLGM9ZVt2KytdLHMubGluZVRvKHUsYyksZnx8bC51cGRhdGVQYXRoTWluTWF4KGgsdSxjKTticmVhaztjYXNlIG4uT1BTLmN1cnZlVG86YT11LG89Yyx1PWVbdis0XSxjPWVbdis1XSxzLmJlemllckN1cnZlVG8oZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sdSxjLGQpLHYrPTY7YnJlYWs7Y2FzZSBuLk9QUy5jdXJ2ZVRvMjphPXUsbz1jLHMuYmV6aWVyQ3VydmVUbyh1LGMsZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSksbC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoaCxhLG8sdSxjLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sZCksdT1lW3YrMl0sYz1lW3YrM10sdis9NDticmVhaztjYXNlIG4uT1BTLmN1cnZlVG8zOmE9dSxvPWMsdT1lW3YrMl0sYz1lW3YrM10scy5iZXppZXJDdXJ2ZVRvKGVbdl0sZVt2KzFdLHUsYyx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLHUsYyx1LGMsZCksdis9NDticmVhaztjYXNlIG4uT1BTLmNsb3NlUGF0aDpzLmNsb3NlUGF0aCgpfWYmJmwudXBkYXRlU2NhbGluZ1BhdGhNaW5NYXgoaCxkKSxsLnNldEN1cnJlbnRQb2ludCh1LGMpfX0se2tleToiY2xvc2VQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3R4LmNsb3NlUGF0aCgpfX0se2tleToic3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5zdHJva2VBbHBoYSx0aGlzLmNvbnRlbnRWaXNpYmxlJiYoIm9iamVjdCI9PT1wKHIpJiZudWxsIT1yJiZyLmdldFBhdHRlcm4/KGUuc2F2ZSgpLGUuc3Ryb2tlU3R5bGU9ci5nZXRQYXR0ZXJuKGUsdGhpcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKSxhLlBhdGhUeXBlLlNUUk9LRSksdGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCExKSxlLnJlc3RvcmUoKSk6dGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCEwKSksdCYmdGhpcy5jb25zdW1lUGF0aCh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKSxlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5maWxsQWxwaGF9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5maWxsQ29sb3Isbj0hMTt0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT1yLmdldFBhdHRlcm4oZSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpLGEuUGF0aFR5cGUuRklMTCksbj0hMCk7dmFyIG89dGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTt0aGlzLmNvbnRlbnRWaXNpYmxlJiZudWxsIT09byYmKHRoaXMucGVuZGluZ0VPRmlsbD8oZS5maWxsKCJldmVub2RkIiksdGhpcy5wZW5kaW5nRU9GaWxsPSExKTplLmZpbGwoKSksbiYmZS5yZXN0b3JlKCksdCYmdGhpcy5jb25zdW1lUGF0aChvKX19LHtrZXk6ImVvRmlsbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZmlsbCghMSksdGhpcy5zdHJva2UoITEpLHRoaXMuY29uc3VtZVBhdGgoKX19LHtrZXk6ImVvRmlsbFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0VPRmlsbD0hMCx0aGlzLmNsb3NlUGF0aCgpLHRoaXMuZmlsbFN0cm9rZSgpfX0se2tleToiZW5kUGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN1bWVQYXRoKCl9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0NsaXA9SX19LHtrZXk6ImVvQ2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdDbGlwPWp9fSx7a2V5OiJiZWdpblRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZT0xLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUZXh0UGF0aHMsZT10aGlzLmN0eDtpZih2b2lkIDAhPT10KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpO3ZhciByLG49Yyh0KTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zZXRUcmFuc2Zvcm0uYXBwbHkoZSxsKGkudHJhbnNmb3JtKSksZS50cmFuc2xhdGUoaS54LGkueSksaS5hZGRUb1BhdGgoZSxpLmZvbnRTaXplKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9ZS5yZXN0b3JlKCksZS5jbGlwKCksZS5iZWdpblBhdGgoKSxkZWxldGUgdGhpcy5wZW5kaW5nVGV4dFBhdGhzfWVsc2UgZS5iZWdpblBhdGgoKX19LHtrZXk6InNldENoYXJTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmc9dH19LHtrZXk6InNldFdvcmRTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9dH19LHtrZXk6InNldEhTY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRIU2NhbGU9dC8xMDB9fSx7a2V5OiJzZXRMZWFkaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGVhZGluZz0tdH19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21tb25PYmpzLmdldCh0KSxpPXRoaXMuY3VycmVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGZpbmQgZm9udCBmb3IgIi5jb25jYXQodCkpO2lmKGkuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsMCE9PWkuZm9udE1hdHJpeFswXSYmMCE9PWkuZm9udE1hdHJpeFszXXx8KDAsbi53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK3QpLGU8MD8oZT0tZSxpLmZvbnREaXJlY3Rpb249LTEpOmkuZm9udERpcmVjdGlvbj0xLHRoaXMuY3VycmVudC5mb250PXIsdGhpcy5jdXJyZW50LmZvbnRTaXplPWUsIXIuaXNUeXBlM0ZvbnQpe3ZhciBhPXIubG9hZGVkTmFtZXx8InNhbnMtc2VyaWYiLG89Im5vcm1hbCI7ci5ibGFjaz9vPSI5MDAiOnIuYm9sZCYmKG89ImJvbGQiKTt2YXIgcz1yLml0YWxpYz8iaXRhbGljIjoibm9ybWFsIixsPSciJy5jb25jYXQoYSwnIiwgJykuY29uY2F0KHIuZmFsbGJhY2tOYW1lKSx1PWU7ZTwxNj91PTE2OmU+MTAwJiYodT0xMDApLHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPWUvdSx0aGlzLmN0eC5mb250PSIiLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiAiKS5jb25jYXQodSwicHggIikuY29uY2F0KGwpfX19LHtrZXk6InNldFRleHRSZW5kZXJpbmdNb2RlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9dH19LHtrZXk6InNldFRleHRSaXNlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJpc2U9dH19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9dCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPWV9fSx7a2V5OiJzZXRMZWFkaW5nTW92ZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRMZWFkaW5nKC1lKSx0aGlzLm1vdmVUZXh0KHQsZSl9fSx7a2V5OiJzZXRUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9W3QsZSxyLG4saSxhXSx0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSx0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MH19LHtrZXk6Im5leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9fSx7a2V5OiJwYWludENoYXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9dGhpcy5jdHgsdT10aGlzLmN1cnJlbnQsYz11LmZvbnQsaD11LnRleHRSZW5kZXJpbmdNb2RlLGY9dS5mb250U2l6ZS91LmZvbnRTaXplU2NhbGUsZD1oJm4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSyxwPSEhKGgmbi5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKSx2PXUucGF0dGVybkZpbGwmJiFjLm1pc3NpbmdGaWxlOyhjLmRpc2FibGVGb250RmFjZXx8cHx8dikmJihvPWMuZ2V0UGF0aEdlbmVyYXRvcih0aGlzLmNvbW1vbk9ianMsdCkpLGMuZGlzYWJsZUZvbnRGYWNlfHx2PyhzLnNhdmUoKSxzLnRyYW5zbGF0ZShlLHIpLHMuYmVnaW5QYXRoKCksbyhzLGYpLGEmJnMuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbChhKSksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuZmlsbCgpLGQhPT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpOihkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5maWxsVGV4dCh0LGUsciksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5zdHJva2VUZXh0KHQsZSxyKSkscCYmKHRoaXMucGVuZGluZ1RleHRQYXRoc3x8KHRoaXMucGVuZGluZ1RleHRQYXRocz1bXSkpLnB1c2goe3RyYW5zZm9ybTooMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHMpLHg6ZSx5OnIsZm9udFNpemU6ZixhZGRUb1BhdGg6b30pfX0se2tleToiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIsMTAsMTApLmNvbnRleHQ7dC5zY2FsZSgxLjUsMSksdC5maWxsVGV4dCgiSSIsMCwxMCk7Zm9yKHZhciBlPXQuZ2V0SW1hZ2VEYXRhKDAsMCwxMCwxMCkuZGF0YSxyPSExLGk9MztpPGUubGVuZ3RoO2krPTQpaWYoZVtpXT4wJiZlW2ldPDI1NSl7cj0hMDticmVha31yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLHIpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udDtpZihyLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQodCk7dmFyIG89ZS5mb250U2l6ZTtpZigwIT09byl7dmFyIHMsdT10aGlzLmN0eCxoPWUuZm9udFNpemVTY2FsZSxmPWUuY2hhclNwYWNpbmcsZD1lLndvcmRTcGFjaW5nLHA9ZS5mb250RGlyZWN0aW9uLHY9ZS50ZXh0SFNjYWxlKnAseT10Lmxlbmd0aCxtPXIudmVydGljYWwsZz1tPzE6LTEsYj1yLmRlZmF1bHRWTWV0cmljcyxfPW8qZS5mb250TWF0cml4WzBdLHc9ZS50ZXh0UmVuZGVyaW5nTW9kZT09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmIXIuZGlzYWJsZUZvbnRGYWNlJiYhZS5wYXR0ZXJuRmlsbDtpZih1LnNhdmUoKSx1LnRyYW5zZm9ybS5hcHBseSh1LGwoZS50ZXh0TWF0cml4KSksdS50cmFuc2xhdGUoZS54LGUueStlLnRleHRSaXNlKSxwPjA/dS5zY2FsZSh2LC0xKTp1LnNjYWxlKHYsMSksZS5wYXR0ZXJuRmlsbCl7dS5zYXZlKCk7dmFyIEE9ZS5maWxsQ29sb3IuZ2V0UGF0dGVybih1LHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkodSksYS5QYXRoVHlwZS5GSUxMKTtzPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodSksdS5yZXN0b3JlKCksdS5maWxsU3R5bGU9QX12YXIgaz1lLmxpbmVXaWR0aCxTPWUudGV4dE1hdHJpeFNjYWxlO2lmKDA9PT1TfHwwPT09ayl7dmFyIHg9ZS50ZXh0UmVuZGVyaW5nTW9kZSZuLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7eCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZ4IT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8KGs9dGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpfWVsc2Ugay89UztpZigxIT09aCYmKHUuc2NhbGUoaCxoKSxrLz1oKSx1LmxpbmVXaWR0aD1rLHIuaXNJbnZhbGlkUERGanNGb250KXt2YXIgRSxQPVtdLFQ9MCxDPWModCk7dHJ5e2ZvcihDLnMoKTshKEU9Qy5uKCkpLmRvbmU7KXt2YXIgTz1FLnZhbHVlO1AucHVzaChPLnVuaWNvZGUpLFQrPU8ud2lkdGh9fWNhdGNoKHQpe0MuZSh0KX1maW5hbGx5e0MuZigpfXJldHVybiB1LmZpbGxUZXh0KFAuam9pbigiIiksMCwwKSxlLngrPVQqXyp2LHUucmVzdG9yZSgpLHZvaWQgdGhpcy5jb21wb3NlKCl9dmFyIEYsTT0wO2ZvcihGPTA7Rjx5OysrRil7dmFyIFI9dFtGXTtpZigibnVtYmVyIiE9dHlwZW9mIFIpe3ZhciBJPSExLGo9KFIuaXNTcGFjZT9kOjApK2YsTD1SLmZvbnRDaGFyLEQ9Ui5hY2NlbnQsTj12b2lkIDAsVT12b2lkIDAsVz1SLndpZHRoO2lmKG0pe3ZhciBHPVIudm1ldHJpY3x8YixCPS0oUi52bWV0cmljP0dbMV06LjUqVykqXyxxPUdbMl0qXztXPUc/LUdbMF06VyxOPUIvaCxVPShNK3EpL2h9ZWxzZSBOPU0vaCxVPTA7aWYoci5yZW1lYXN1cmUmJlc+MCl7dmFyIEg9MWUzKnUubWVhc3VyZVRleHQoTCkud2lkdGgvbypoO2lmKFc8SCYmdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCl7dmFyIHo9Vy9IO0k9ITAsdS5zYXZlKCksdS5zY2FsZSh6LDEpLE4vPXp9ZWxzZSBXIT09SCYmKE4rPShXLUgpLzJlMypvL2gpfWlmKHRoaXMuY29udGVudFZpc2libGUmJihSLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSlpZih3JiYhRCl1LmZpbGxUZXh0KEwsTixVKTtlbHNlIGlmKHRoaXMucGFpbnRDaGFyKEwsTixVLHMpLEQpe3ZhciBWPU4rbypELm9mZnNldC54L2gsWD1VLW8qRC5vZmZzZXQueS9oO3RoaXMucGFpbnRDaGFyKEQuZm9udENoYXIsVixYLHMpfU0rPW0/VypfLWoqcDpXKl8raipwLEkmJnUucmVzdG9yZSgpfWVsc2UgTSs9ZypSKm8vMWUzfW0/ZS55LT1NOmUueCs9TSp2LHUucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InNob3dUeXBlM1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG89dGhpcy5jdHgscz10aGlzLmN1cnJlbnQsdT1zLmZvbnQsYz1zLmZvbnRTaXplLGg9cy5mb250RGlyZWN0aW9uLGY9dS52ZXJ0aWNhbD8xOi0xLGQ9cy5jaGFyU3BhY2luZyxwPXMud29yZFNwYWNpbmcsdj1zLnRleHRIU2NhbGUqaCx5PXMuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxtPXQubGVuZ3RoO2lmKHMudGV4dFJlbmRlcmluZ01vZGUhPT1uLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSYmMCE9PWMpe2Zvcih0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsLG8uc2F2ZSgpLG8udHJhbnNmb3JtLmFwcGx5KG8sbChzLnRleHRNYXRyaXgpKSxvLnRyYW5zbGF0ZShzLngscy55KSxvLnNjYWxlKHYsaCksZT0wO2U8bTsrK2UpaWYoIm51bWJlciIhPXR5cGVvZihyPXRbZV0pKXt2YXIgZz0oci5pc1NwYWNlP3A6MCkrZCxiPXUuY2hhclByb2NPcGVyYXRvckxpc3Rbci5vcGVyYXRvckxpc3RJZF07Yj8odGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMucHJvY2Vzc2luZ1R5cGUzPXIsdGhpcy5zYXZlKCksby5zY2FsZShjLGMpLG8udHJhbnNmb3JtLmFwcGx5KG8sbCh5KSksdGhpcy5leGVjdXRlT3BlcmF0b3JMaXN0KGIpLHRoaXMucmVzdG9yZSgpKSxpPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbci53aWR0aCwwXSx5KVswXSpjK2csby50cmFuc2xhdGUoaSwwKSxzLngrPWkqdik6KDAsbi53YXJuKSgnVHlwZTMgY2hhcmFjdGVyICInLmNvbmNhdChyLm9wZXJhdG9yTGlzdElkLCciIGlzIG5vdCBhdmFpbGFibGUuJykpfWVsc2UgYT1mKnIqYy8xZTMsdGhpcy5jdHgudHJhbnNsYXRlKGEsMCkscy54Kz1hKnY7by5yZXN0b3JlKCksdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbH19fSx7a2V5OiJzZXRDaGFyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToic2V0Q2hhcldpZHRoQW5kQm91bmRzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdHgucmVjdChyLG4saS1yLGEtbiksdGhpcy5jdHguY2xpcCgpLHRoaXMuZW5kUGF0aCgpfX0se2tleToiZ2V0Q29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZigiVGlsaW5nUGF0dGVybiI9PT1lWzBdKXt2YXIgbz1lWzFdLHM9dGhpcy5iYXNlVHJhbnNmb3JtfHwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxsPXtjcmVhdGVDYW52YXNHcmFwaGljczpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSxuLmNvbW1vbk9ianMsbi5vYmpzLG4uY2FudmFzRmFjdG9yeSx7b3B0aW9uYWxDb250ZW50Q29uZmlnOm4ub3B0aW9uYWxDb250ZW50Q29uZmlnLG1hcmtlZENvbnRlbnRTdGFjazpuLm1hcmtlZENvbnRlbnRTdGFja30pfX07cj1uZXcgYS5UaWxpbmdQYXR0ZXJuKGUsbyx0aGlzLmN0eCxsLHMpfWVsc2Ugcj10aGlzLl9nZXRQYXR0ZXJuKGVbMV0sZVsyXSk7cmV0dXJuIHJ9fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKX19LHtrZXk6InNldEZpbGxDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LmZpbGxDb2xvcj10aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyksdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsPSEwfX0se2tleToic2V0U3Ryb2tlUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LnN0cm9rZVN0eWxlPWEsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWF9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LmZpbGxTdHlsZT1hLHRoaXMuY3VycmVudC5maWxsQ29sb3I9YSx0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITF9fSx7a2V5OiJfZ2V0UGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJucy5oYXModCk/ZT10aGlzLmNhY2hlZFBhdHRlcm5zLmdldCh0KTooZT0oMCxhLmdldFNoYWRpbmdQYXR0ZXJuKSh0aGlzLm9ianMuZ2V0KHQpKSx0aGlzLmNhY2hlZFBhdHRlcm5zLnNldCh0LGUpKSxyJiYoZS5tYXRyaXg9ciksZX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmN0eDt0aGlzLnNhdmUoKTt2YXIgcj10aGlzLl9nZXRQYXR0ZXJuKHQpO2UuZmlsbFN0eWxlPXIuZ2V0UGF0dGVybihlLHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksYS5QYXRoVHlwZS5TSEFESU5HKTt2YXIgbz0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKTtpZihvKXt2YXIgcz1lLmNhbnZhcyxsPXMud2lkdGgsdT1zLmhlaWdodCxjPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxvKSxoPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCx1XSxvKSxmPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCwwXSxvKSxkPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCx1XSxvKSxwPU1hdGgubWluKGNbMF0saFswXSxmWzBdLGRbMF0pLHY9TWF0aC5taW4oY1sxXSxoWzFdLGZbMV0sZFsxXSkseT1NYXRoLm1heChjWzBdLGhbMF0sZlswXSxkWzBdKSxtPU1hdGgubWF4KGNbMV0saFsxXSxmWzFdLGRbMV0pO3RoaXMuY3R4LmZpbGxSZWN0KHAsdix5LXAsbS12KX1lbHNlIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLC0xZTEwLDJlMTAsMmUxMCk7dGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpLHRoaXMucmVzdG9yZSgpfX19LHtrZXk6ImJlZ2luSW5saW5lSW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlIil9fSx7a2V5OiJiZWdpbkltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuc2F2ZSgpLHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKSxBcnJheS5pc0FycmF5KHQpJiY2PT09dC5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbCh0KSksdGhpcy5iYXNlVHJhbnNmb3JtPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpLGUpKXt2YXIgcj1lWzJdLWVbMF0sbj1lWzNdLWVbMV07dGhpcy5jdHgucmVjdChlWzBdLGVbMV0scixuKSx0aGlzLmN1cnJlbnQudXBkYXRlUmVjdE1pbk1heCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxlKSx0aGlzLmNsaXAoKSx0aGlzLmVuZFBhdGgoKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0RW5kIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGVudFZpc2libGUmJih0aGlzLnJlc3RvcmUoKSx0aGlzLmJhc2VUcmFuc2Zvcm09dGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucG9wKCkpfX0se2tleToiYmVnaW5Hcm91cCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5jb250ZW50VmlzaWJsZSl7dGhpcy5zYXZlKCksdGhpcy5pblNNYXNrTW9kZSYmKHRoaXMuZW5kU01hc2tNb2RlKCksdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrPW51bGwpO3ZhciBlPXRoaXMuY3R4O3QuaXNvbGF0ZWR8fCgwLG4uaW5mbykoIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKSx0Lmtub2Nrb3V0JiYoMCxuLndhcm4pKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcj0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpO2lmKHQubWF0cml4JiZlLnRyYW5zZm9ybS5hcHBseShlLGwodC5tYXRyaXgpKSwhdC5iYm94KXRocm93IG5ldyBFcnJvcigiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLiIpO3ZhciBhPW4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LmJib3gsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSksbz1bMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodF07YT1uLlV0aWwuaW50ZXJzZWN0KGEsbyl8fFswLDAsMCwwXTt2YXIgcz1NYXRoLmZsb29yKGFbMF0pLHU9TWF0aC5mbG9vcihhWzFdKSxjPU1hdGgubWF4KE1hdGguY2VpbChhWzJdKS1zLDEpLGg9TWF0aC5tYXgoTWF0aC5jZWlsKGFbM10pLXUsMSksZj0xLGQ9MTtjPmcmJihmPWMvZyxjPWcpLGg+ZyYmKGQ9aC9nLGg9ZyksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3goWzAsMCxjLGhdKTt2YXIgcD0iZ3JvdXBBdCIrdGhpcy5ncm91cExldmVsO3Quc21hc2smJihwKz0iX3NtYXNrXyIrdGhpcy5zbWFza0NvdW50ZXIrKyUyKTt2YXIgdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhwLGMsaCkseT12LmNvbnRleHQ7eS5zY2FsZSgxL2YsMS9kKSx5LnRyYW5zbGF0ZSgtcywtdSkseS50cmFuc2Zvcm0uYXBwbHkoeSxsKHIpKSx0LnNtYXNrP3RoaXMuc21hc2tTdGFjay5wdXNoKHtjYW52YXM6di5jYW52YXMsY29udGV4dDp5LG9mZnNldFg6cyxvZmZzZXRZOnUsc2NhbGVYOmYsc2NhbGVZOmQsc3VidHlwZTp0LnNtYXNrLnN1YnR5cGUsYmFja2Ryb3A6dC5zbWFzay5iYWNrZHJvcCx0cmFuc2Zlck1hcDp0LnNtYXNrLnRyYW5zZmVyTWFwfHxudWxsLHN0YXJ0VHJhbnNmb3JtSW52ZXJzZTpudWxsfSk6KGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxlLnRyYW5zbGF0ZShzLHUpLGUuc2NhbGUoZixkKSxlLnNhdmUoKSksRShlLHkpLHRoaXMuY3R4PXksdGhpcy5zZXRHU3RhdGUoW1siQk0iLCJzb3VyY2Utb3ZlciJdLFsiY2EiLDFdLFsiQ0EiLDFdXSksdGhpcy5ncm91cFN0YWNrLnB1c2goZSksdGhpcy5ncm91cExldmVsKyt9fX0se2tleToiZW5kR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3RoaXMuZ3JvdXBMZXZlbC0tO3ZhciBlPXRoaXMuY3R4LHI9dGhpcy5ncm91cFN0YWNrLnBvcCgpO2lmKHRoaXMuY3R4PXIsdGhpcy5jdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLHQuc21hc2spdGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpLHRoaXMucmVzdG9yZSgpO2Vsc2V7dmFyIGE7dGhpcy5jdHgucmVzdG9yZSgpO3ZhciBvPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpO3RoaXMucmVzdG9yZSgpLHRoaXMuY3R4LnNhdmUoKSwoYT10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KGEsbChvKSk7dmFyIHM9bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0XSxvKTt0aGlzLmN0eC5kcmF3SW1hZ2UoZS5jYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy5jb21wb3NlKHMpfX19fSx7a2V5OiJiZWdpbkFubm90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM7aWYodSh0aGlzLEwsTikuY2FsbCh0aGlzKSxQKHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKSx0aGlzLmN0eC5zYXZlKCksdGhpcy5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiYocz10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbCh0aGlzLmJhc2VUcmFuc2Zvcm0pKSxBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGgpe3ZhciBjPWVbMl0tZVswXSxmPWVbM10tZVsxXTtpZihvJiZ0aGlzLmFubm90YXRpb25DYW52YXNNYXApeyhyPXIuc2xpY2UoKSlbNF0tPWVbMF0scls1XS09ZVsxXSwoZT1lLnNsaWNlKCkpWzBdPWVbMV09MCxlWzJdPWMsZVszXT1mO3ZhciBkPWgobi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpKSwyKSxwPWRbMF0sdj1kWzFdLHk9dGhpcy52aWV3cG9ydFNjYWxlLG09TWF0aC5jZWlsKGMqdGhpcy5vdXRwdXRTY2FsZVgqeSksZz1NYXRoLmNlaWwoZip0aGlzLm91dHB1dFNjYWxlWSp5KTt0aGlzLmFubm90YXRpb25DYW52YXM9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShtLGcpO3ZhciBiPXRoaXMuYW5ub3RhdGlvbkNhbnZhcyxfPWIuY2FudmFzLHc9Yi5jb250ZXh0O3RoaXMuYW5ub3RhdGlvbkNhbnZhc01hcC5zZXQodCxfKSx0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9dyx0aGlzLmN0eC5zZXRUcmFuc2Zvcm0ocCwwLDAsLXYsMCxmKnYpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpfWVsc2UgUCh0aGlzLmN0eCx0aGlzLmZvcmVncm91bmRDb2xvciksdGhpcy5jdHgucmVjdChlWzBdLGVbMV0sYyxmKSx0aGlzLmN0eC5jbGlwKCksdGhpcy5lbmRQYXRoKCl9dGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLGwocikpLHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbChhKSl9fSx7a2V5OiJlbmRBbm5vdGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYW5ub3RhdGlvbkNhbnZhcyYmKHRoaXMuY3R4PXRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eCxkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4LGRlbGV0ZSB0aGlzLmFubm90YXRpb25DYW52YXMpfX0se2tleToicGFpbnRJbWFnZU1hc2tYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10LmNvdW50Oyh0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KSkuY291bnQ9ZTt2YXIgcj10aGlzLmN0eCxuPXRoaXMucHJvY2Vzc2luZ1R5cGUzO2lmKG4mJih2b2lkIDA9PT1uLmNvbXBpbGVkJiYobi5jb21waWxlZD1mdW5jdGlvbih0KXt2YXIgZT10LndpZHRoLHI9dC5oZWlnaHQ7aWYoZT5ifHxyPmIpcmV0dXJuIG51bGw7dmFyIG4saSxhLG8scz1uZXcgVWludDhBcnJheShbMCwyLDQsMCwxLDAsNSw0LDgsMTAsMCw4LDAsMiwxLDBdKSxsPWUrMSx1PW5ldyBVaW50OEFycmF5KGwqKHIrMSkpLGg9ZSs3Ji04LGY9bmV3IFVpbnQ4QXJyYXkoaCpyKSxkPTAscD1jKHQuZGF0YSk7dHJ5e2ZvcihwLnMoKTshKG89cC5uKCkpLmRvbmU7KWZvcih2YXIgdj1vLnZhbHVlLHk9MTI4O3k+MDspZltkKytdPXYmeT8wOjI1NSx5Pj49MX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX12YXIgbT0wO2ZvcigwIT09ZltkPTBdJiYodVswXT0xLCsrbSksaT0xO2k8ZTtpKyspZltkXSE9PWZbZCsxXSYmKHVbaV09ZltkXT8yOjEsKyttKSxkKys7Zm9yKDAhPT1mW2RdJiYodVtpXT0yLCsrbSksbj0xO248cjtuKyspe2E9bipsLGZbKGQ9bipoKS1oXSE9PWZbZF0mJih1W2FdPWZbZF0/MTo4LCsrbSk7dmFyIGc9KGZbZF0/NDowKSsoZltkLWhdPzg6MCk7Zm9yKGk9MTtpPGU7aSsrKXNbZz0oZz4+MikrKGZbZCsxXT80OjApKyhmW2QtaCsxXT84OjApXSYmKHVbYStpXT1zW2ddLCsrbSksZCsrO2lmKGZbZC1oXSE9PWZbZF0mJih1W2EraV09ZltkXT8yOjQsKyttKSxtPjFlMylyZXR1cm4gbnVsbH1mb3IoYT1uKmwsMCE9PWZbZD1oKihyLTEpXSYmKHVbYV09OCwrK20pLGk9MTtpPGU7aSsrKWZbZF0hPT1mW2QrMV0mJih1W2EraV09ZltkXT80OjgsKyttKSxkKys7aWYoMCE9PWZbZF0mJih1W2EraV09NCwrK20pLG0+MWUzKXJldHVybiBudWxsO3ZhciBfPW5ldyBJbnQzMkFycmF5KFswLGwsLTEsMCwtbCwwLDAsMCwxXSksdz1uZXcgUGF0aDJEO2ZvcihuPTA7bSYmbjw9cjtuKyspe2Zvcih2YXIgQT1uKmwsaz1BK2U7QTxrJiYhdVtBXTspQSsrO2lmKEEhPT1rKXt3Lm1vdmVUbyhBJWwsbik7dmFyIFM9QSx4PXVbQV07ZG97dmFyIEU9X1t4XTtkb3tBKz1FfXdoaWxlKCF1W0FdKTt2YXIgUD11W0FdOzUhPT1QJiYxMCE9PVA/KHg9UCx1W0FdPTApOih4PVAmNTEqeD4+NCx1W0FdJj14Pj4yfHg8PDIpLHcubGluZVRvKEElbCxBL2x8MCksdVtBXXx8LS1tfXdoaWxlKFMhPT1BKTstLW59fXJldHVybiBmPW51bGwsdT1udWxsLGZ1bmN0aW9uKHQpe3Quc2F2ZSgpLHQuc2NhbGUoMS9lLC0xL3IpLHQudHJhbnNsYXRlKDAsLXIpLHQuZmlsbCh3KSx0LmJlZ2luUGF0aCgpLHQucmVzdG9yZSgpfX0odCkpLG4uY29tcGlsZWQpKW4uY29tcGlsZWQocik7ZWxzZXt2YXIgaT10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpLGE9aS5jYW52YXM7ci5zYXZlKCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHIuZHJhd0ltYWdlKGEsaS5vZmZzZXRYLGkub2Zmc2V0WSksci5yZXN0b3JlKCksdGhpcy5jb21wb3NlKCl9fX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDAscz1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOnZvaWQgMDtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KTt2YXIgbD10aGlzLmN0eDtsLnNhdmUoKTt2YXIgdT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGwpO2wudHJhbnNmb3JtKGUscixhLG8sMCwwKTt2YXIgYz10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpO2wuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYy5vZmZzZXRYLXVbNF0sYy5vZmZzZXRZLXVbNV0pO2Zvcih2YXIgZj0wLGQ9cy5sZW5ndGg7ZjxkO2YrPTIpe3ZhciBwPW4uVXRpbC50cmFuc2Zvcm0odSxbZSxyLGEsbyxzW2ZdLHNbZisxXV0pLHY9aChuLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0scCksMikseT12WzBdLG09dlsxXTtsLmRyYXdJbWFnZShjLmNhbnZhcyx5LG0pfWwucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZSxyPXRoaXMuY3R4LG49dGhpcy5jdXJyZW50LmZpbGxDb2xvcixvPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxzPWModCk7dHJ5e2ZvcihzLnMoKTshKGU9cy5uKCkpLmRvbmU7KXt2YXIgdT1lLnZhbHVlLGg9dS5kYXRhLGY9dS53aWR0aCxkPXUuaGVpZ2h0LHA9dS50cmFuc2Zvcm0sdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsZixkKSx5PXYuY29udGV4dDt5LnNhdmUoKSx4KHksdGhpcy5nZXRPYmplY3QoaCx1KSkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIseS5maWxsU3R5bGU9bz9uLmdldFBhdHRlcm4oeSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKHIpLGEuUGF0aFR5cGUuRklMTCk6bix5LmZpbGxSZWN0KDAsMCxmLGQpLHkucmVzdG9yZSgpLHIuc2F2ZSgpLHIudHJhbnNmb3JtLmFwcGx5KHIsbChwKSksci5zY2FsZSgxLC0xKSxBKHIsdi5jYW52YXMsMCwwLGYsZCwwLC0xLDEsMSksci5yZXN0b3JlKCl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmdldE9iamVjdCh0KTtlP3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSk6KDAsbi53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpKXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgYT10aGlzLmdldE9iamVjdCh0KTtpZihhKXtmb3IodmFyIG89YS53aWR0aCxzPWEuaGVpZ2h0LGw9W10sdT0wLGM9aS5sZW5ndGg7dTxjO3UrPTIpbC5wdXNoKHt0cmFuc2Zvcm06W2UsMCwwLHIsaVt1XSxpW3UrMV1dLHg6MCx5OjAsdzpvLGg6c30pO3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChhLGwpfWVsc2UoMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9fX0se2tleToicGFpbnRJbmxpbmVJbWFnZVhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGE9dGhpcy5jdHg7aWYodGhpcy5zYXZlKCksYS5zY2FsZSgxL3IsLTEvbiksImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCF0LmRhdGEpZT10O2Vsc2V7dmFyIG89dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixyLG4pO1Moby5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyksZT1vLmNhbnZhc312YXIgcz10aGlzLl9zY2FsZUltYWdlKGUsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoYSkpO2EuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPUYoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShhKSx0LmludGVycG9sYXRlKSxBKGEscy5pbWcsMCwwLHMucGFpbnRXaWR0aCxzLnBhaW50SGVpZ2h0LDAsLW4scixuKSx0aGlzLmNvbXBvc2UoKSx0aGlzLnJlc3RvcmUoKX19fSx7a2V5OiJwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciByPXRoaXMuY3R4LG49dC53aWR0aCxpPXQuaGVpZ2h0LGE9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixuLGkpO1MoYS5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyk7dmFyIG8scz1jKGUpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIHU9by52YWx1ZTtyLnNhdmUoKSxyLnRyYW5zZm9ybS5hcHBseShyLGwodS50cmFuc2Zvcm0pKSxyLnNjYWxlKDEsLTEpLEEocixhLmNhbnZhcyx1LngsdS55LHUudyx1LmgsMCwtMSwxLDEpLHIucmVzdG9yZSgpfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX10aGlzLmNvbXBvc2UoKX19fSx7a2V5OiJwYWludFNvbGlkQ29sb3JJbWFnZU1hc2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuY3R4LmZpbGxSZWN0KDAsMCwxLDEpLHRoaXMuY29tcG9zZSgpKX19LHtrZXk6Im1hcmtQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToibWFya1BvaW50UHJvcHMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToiYmVnaW5NYXJrZWRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOiEwfSl9fSx7a2V5OiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXsiT0MiPT09dD90aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOnRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShlKX0pOnRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe3Zpc2libGU6ITB9KSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiZW5kTWFya2VkQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wb3AoKSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiYmVnaW5Db21wYXQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiZW5kQ29tcGF0Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImNvbnN1bWVQYXRoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQuaXNFbXB0eUNsaXAoKTt0aGlzLnBlbmRpbmdDbGlwJiZ0aGlzLmN1cnJlbnQudXBkYXRlQ2xpcEZyb21QYXRoKCksdGhpcy5wZW5kaW5nQ2xpcHx8dGhpcy5jb21wb3NlKHQpO3ZhciByPXRoaXMuY3R4O3RoaXMucGVuZGluZ0NsaXAmJihlfHwodGhpcy5wZW5kaW5nQ2xpcD09PWo/ci5jbGlwKCJldmVub2RkIik6ci5jbGlwKCkpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3godGhpcy5jdXJyZW50LmNsaXBCb3gpLHIuYmVnaW5QYXRoKCl9fSx7a2V5OiJnZXRTaW5nbGVQaXhlbFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoKXt2YXIgdD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtpZigwPT09dFsxXSYmMD09PXRbMl0pdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD0xL01hdGgubWluKE1hdGguYWJzKHRbMF0pLE1hdGguYWJzKHRbM10pKTtlbHNle3ZhciBlPU1hdGguYWJzKHRbMF0qdFszXS10WzJdKnRbMV0pLHI9TWF0aC5oeXBvdCh0WzBdLHRbMl0pLG49TWF0aC5oeXBvdCh0WzFdLHRbM10pO3RoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9TWF0aC5tYXgocixuKS9lfX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH19LHtrZXk6ImdldFNjYWxlRm9yU3Ryb2tpbmciLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcpe3ZhciB0LGUscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7aWYoMD09PW5bMV0mJjA9PT1uWzJdKXt2YXIgYT1NYXRoLmFicyhuWzBdKSxvPU1hdGguYWJzKG5bM10pO2lmKDA9PT1yKXQ9MS9hLGU9MS9vO2Vsc2V7dmFyIHM9YSpyLGw9bypyO3Q9czwxPzEvczoxLGU9bDwxPzEvbDoxfX1lbHNle3ZhciB1PU1hdGguYWJzKG5bMF0qblszXS1uWzJdKm5bMV0pLGM9TWF0aC5oeXBvdChuWzBdLG5bMV0pLGg9TWF0aC5oeXBvdChuWzJdLG5bM10pO2lmKDA9PT1yKXQ9aC91LGU9Yy91O2Vsc2V7dmFyIGY9cip1O3Q9aD5mP2gvZjoxLGU9Yz5mP2MvZjoxfX10aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPVt0LGVdfXJldHVybiB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nfX0se2tleToicmVzY2FsZUFuZFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdHgscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49aCh0aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKSwyKSxhPW5bMF0sbz1uWzFdO2lmKGUubGluZVdpZHRoPXJ8fDEsMSE9PWF8fDEhPT1vKXt2YXIgcyx1LGM7dCYmKHM9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSx1PWUuZ2V0TGluZURhc2goKS5zbGljZSgpLGM9ZS5saW5lRGFzaE9mZnNldCksZS5zY2FsZShhLG8pO3ZhciBmPU1hdGgubWF4KGEsbyk7ZS5zZXRMaW5lRGFzaChlLmdldExpbmVEYXNoKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9mfSkpKSxlLmxpbmVEYXNoT2Zmc2V0Lz1mLGUuc3Ryb2tlKCksdCYmKGUuc2V0VHJhbnNmb3JtLmFwcGx5KGUsbChzKSksZS5zZXRMaW5lRGFzaCh1KSxlLmxpbmVEYXNoT2Zmc2V0PWMpfWVsc2UgZS5zdHJva2UoKX19LHtrZXk6ImlzQ29udGVudFZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubWFya2VkQ29udGVudFN0YWNrLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1t0XS52aXNpYmxlKXJldHVybiExO3JldHVybiEwfX1dKSx0fSgpO2Z1bmN0aW9uIE4oKXtmb3IoO3RoaXMuc3RhdGVTdGFjay5sZW5ndGh8fHRoaXMuaW5TTWFza01vZGU7KXRoaXMucmVzdG9yZSgpO3RoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLnRyYW5zcGFyZW50Q2FudmFzJiYodGhpcy5jdHg9dGhpcy5jb21wb3NpdGVDdHgsdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMudHJhbnNwYXJlbnRDYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy50cmFuc3BhcmVudENhbnZhcz1udWxsKX1mb3IodmFyIFUgaW4gZS5DYW52YXNHcmFwaGljcz1ELG4uT1BTKXZvaWQgMCE9PUQucHJvdG90eXBlW1VdJiYoRC5wcm90b3R5cGVbbi5PUFNbVV1dPUQucHJvdG90eXBlW1VdKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlRpbGluZ1BhdHRlcm49ZS5QYXRoVHlwZT12b2lkIDAsZS5nZXRTaGFkaW5nUGF0dGVybj1mdW5jdGlvbih0KXtzd2l0Y2godFswXSl7Y2FzZSJSYWRpYWxBeGlhbCI6cmV0dXJuIG5ldyB3KHQpO2Nhc2UiTWVzaCI6cmV0dXJuIG5ldyBTKHQpO2Nhc2UiRHVtbXkiOnJldHVybiBuZXcgeH10aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSVIgdHlwZTogIi5jb25jYXQodFswXSkpfTt2YXIgbj1yKDEpLGk9cigxMzcpLGE9cigzKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB1KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8bCh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LGgodCxlKX1mdW5jdGlvbiBmKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQodCk7aWYoZSl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGkpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1wKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxkKHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz17RklMTDoiRmlsbCIsU1RST0tFOiJTdHJva2UiLFNIQURJTkc6IlNoYWRpbmcifTtmdW5jdGlvbiBiKHQsZSl7aWYoZSYmIWEuaXNOb2RlSlMpe3ZhciByPWVbMl0tZVswXSxuPWVbM10tZVsxXSxpPW5ldyBQYXRoMkQ7aS5yZWN0KGVbMF0sZVsxXSxyLG4pLHQuY2xpcChpKX19ZS5QYXRoVHlwZT1nO3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3YodGhpcyx0KSx0aGlzLmNvbnN0cnVjdG9yPT09dCYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTaGFkaW5nUGF0dGVybi4iKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC4iKX19XSksdH0oKSx3PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl90eXBlPXRbMV0sbi5fYmJveD10WzJdLG4uX2NvbG9yU3RvcHM9dFszXSxuLl9wMD10WzRdLG4uX3AxPXRbNV0sbi5fcjA9dFs2XSxuLl9yMT10WzddLG4ubWF0cml4PW51bGwsbn1yZXR1cm4gbShyLFt7a2V5OiJfY3JlYXRlR3JhZGllbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlOyJheGlhbCI9PT10aGlzLl90eXBlP2U9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSx0aGlzLl9wMFsxXSx0aGlzLl9wMVswXSx0aGlzLl9wMVsxXSk6InJhZGlhbCI9PT10aGlzLl90eXBlJiYoZT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLHRoaXMuX3AwWzFdLHRoaXMuX3IwLHRoaXMuX3AxWzBdLHRoaXMuX3AxWzFdLHRoaXMuX3IxKSk7dmFyIHIsbj1zKHRoaXMuX2NvbG9yU3RvcHMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9ci52YWx1ZTtlLmFkZENvbG9yU3RvcChpWzBdLGlbMV0pfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gZX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzO2lmKGE9PT1nLlNUUk9LRXx8YT09PWcuRklMTCl7dmFyIGw9ZS5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goYSwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKXx8WzAsMCwwLDBdLHU9TWF0aC5jZWlsKGxbMl0tbFswXSl8fDEsYz1NYXRoLmNlaWwobFszXS1sWzFdKXx8MSxoPWUuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIix1LGMsITApLGY9aC5jb250ZXh0O2YuY2xlYXJSZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYuYmVnaW5QYXRoKCksZi5yZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYudHJhbnNsYXRlKC1sWzBdLC1sWzFdKSxyPW4uVXRpbC50cmFuc2Zvcm0ocixbMSwwLDAsMSxsWzBdLGxbMV1dKSxmLnRyYW5zZm9ybS5hcHBseShmLG8oZS5iYXNlVHJhbnNmb3JtKSksdGhpcy5tYXRyaXgmJmYudHJhbnNmb3JtLmFwcGx5KGYsbyh0aGlzLm1hdHJpeCkpLGIoZix0aGlzLl9iYm94KSxmLmZpbGxTdHlsZT10aGlzLl9jcmVhdGVHcmFkaWVudChmKSxmLmZpbGwoKSxzPXQuY3JlYXRlUGF0dGVybihoLmNhbnZhcywibm8tcmVwZWF0Iik7dmFyIGQ9bmV3IERPTU1hdHJpeChyKTtzLnNldFRyYW5zZm9ybShkKX1lbHNlIGIodCx0aGlzLl9iYm94KSxzPXRoaXMuX2NyZWF0ZUdyYWRpZW50KHQpO3JldHVybiBzfX1dKSxyfShfKTtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsdT1lLmNvb3JkcyxjPWUuY29sb3JzLGg9dC5kYXRhLGY9NCp0LndpZHRoO3VbcisxXT51W24rMV0mJihsPXIscj1uLG49bCxsPWEsYT1vLG89bCksdVtuKzFdPnVbaSsxXSYmKGw9bixuPWksaT1sLGw9byxvPXMscz1sKSx1W3IrMV0+dVtuKzFdJiYobD1yLHI9bixuPWwsbD1hLGE9byxvPWwpO3ZhciBkPSh1W3JdK2Uub2Zmc2V0WCkqZS5zY2FsZVgscD0odVtyKzFdK2Uub2Zmc2V0WSkqZS5zY2FsZVksdj0odVtuXStlLm9mZnNldFgpKmUuc2NhbGVYLHk9KHVbbisxXStlLm9mZnNldFkpKmUuc2NhbGVZLG09KHVbaV0rZS5vZmZzZXRYKSplLnNjYWxlWCxnPSh1W2krMV0rZS5vZmZzZXRZKSplLnNjYWxlWTtpZighKHA+PWcpKWZvcih2YXIgYixfLHcsQSxrLFMseCxFLFA9Y1thXSxUPWNbYSsxXSxDPWNbYSsyXSxPPWNbb10sRj1jW28rMV0sTT1jW28rMl0sUj1jW3NdLEk9Y1tzKzFdLGo9Y1tzKzJdLEw9TWF0aC5yb3VuZChwKSxEPU1hdGgucm91bmQoZyksTj1MO048PUQ7TisrKXtpZihOPHkpe3ZhciBVO2I9ZC0oZC12KSooVT1OPHA/MDoocC1OKS8ocC15KSksXz1QLShQLU8pKlUsdz1ULShULUYpKlUsQT1DLShDLU0pKlV9ZWxzZXt2YXIgVztiPXYtKHYtbSkqKFc9Tj5nPzE6eT09PWc/MDooeS1OKS8oeS1nKSksXz1PLShPLVIpKlcsdz1GLShGLUkpKlcsQT1NLShNLWopKld9dmFyIEc9dm9pZCAwO2s9ZC0oZC1tKSooRz1OPHA/MDpOPmc/MToocC1OKS8ocC1nKSksUz1QLShQLVIpKkcseD1ULShULUkpKkcsRT1DLShDLWopKkc7Zm9yKHZhciBCPU1hdGgucm91bmQoTWF0aC5taW4oYixrKSkscT1NYXRoLnJvdW5kKE1hdGgubWF4KGIsaykpLEg9ZipOKzQqQix6PUI7ejw9cTt6KyspKEc9KGIteikvKGItaykpPDA/Rz0wOkc+MSYmKEc9MSksaFtIKytdPV8tKF8tUykqR3wwLGhbSCsrXT13LSh3LXgpKkd8MCxoW0grK109QS0oQS1FKSpHfDAsaFtIKytdPTI1NX19ZnVuY3Rpb24gayh0LGUscil7dmFyIG4saSxhPWUuY29vcmRzLG89ZS5jb2xvcnM7c3dpdGNoKGUudHlwZSl7Y2FzZSJsYXR0aWNlIjp2YXIgcz1lLnZlcnRpY2VzUGVyUm93LGw9TWF0aC5mbG9vcihhLmxlbmd0aC9zKS0xLHU9cy0xO2ZvcihuPTA7bjxsO24rKylmb3IodmFyIGM9bipzLGg9MDtoPHU7aCsrLGMrKylBKHQscixhW2NdLGFbYysxXSxhW2Mrc10sb1tjXSxvW2MrMV0sb1tjK3NdKSxBKHQscixhW2MrcysxXSxhW2MrMV0sYVtjK3NdLG9bYytzKzFdLG9bYysxXSxvW2Mrc10pO2JyZWFrO2Nhc2UidHJpYW5nbGVzIjpmb3Iobj0wLGk9YS5sZW5ndGg7bjxpO24rPTMpQSh0LHIsYVtuXSxhW24rMV0sYVtuKzJdLG9bbl0sb1tuKzFdLG9bbisyXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgZmlndXJlIil9fXZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl9jb29yZHM9dFsyXSxuLl9jb2xvcnM9dFszXSxuLl9maWd1cmVzPXRbNF0sbi5fYm91bmRzPXRbNV0sbi5fYmJveD10WzddLG4uX2JhY2tncm91bmQ9dFs4XSxuLm1hdHJpeD1udWxsLG59cmV0dXJuIG0ocixbe2tleToiX2NyZWF0ZU1lc2hDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSksaT1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1sxXSksYT1NYXRoLmNlaWwodGhpcy5fYm91bmRzWzJdKS1uLG89TWF0aC5jZWlsKHRoaXMuX2JvdW5kc1szXSktaSxsPU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhhKnRbMF0qMS4xKSksM2UzKSx1PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhvKnRbMV0qMS4xKSksM2UzKSxjPWEvbCxoPW8vdSxmPXtjb29yZHM6dGhpcy5fY29vcmRzLGNvbG9yczp0aGlzLl9jb2xvcnMsb2Zmc2V0WDotbixvZmZzZXRZOi1pLHNjYWxlWDoxL2Msc2NhbGVZOjEvaH0sZD1sKzQscD11KzQsdj1yLmdldENhbnZhcygibWVzaCIsZCxwLCExKSx5PXYuY29udGV4dCxtPXkuY3JlYXRlSW1hZ2VEYXRhKGwsdSk7aWYoZSlmb3IodmFyIGc9bS5kYXRhLGI9MCxfPWcubGVuZ3RoO2I8XztiKz00KWdbYl09ZVswXSxnW2IrMV09ZVsxXSxnW2IrMl09ZVsyXSxnW2IrM109MjU1O3ZhciB3LEE9cyh0aGlzLl9maWd1cmVzKTt0cnl7Zm9yKEEucygpOyEodz1BLm4oKSkuZG9uZTspayhtLHcudmFsdWUsZil9Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9cmV0dXJuIHkucHV0SW1hZ2VEYXRhKG0sMiwyKSx7Y2FudmFzOnYuY2FudmFzLG9mZnNldFg6bi0yKmMsb2Zmc2V0WTppLTIqaCxzY2FsZVg6YyxzY2FsZVk6aH19fSx7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0LGUscixhKXt2YXIgcztpZihiKHQsdGhpcy5fYmJveCksYT09PWcuU0hBRElORylzPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKTtlbHNlIGlmKHM9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgpe3ZhciBsPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7cz1bc1swXSpsWzBdLHNbMV0qbFsxXV19dmFyIHU9dGhpcy5fY3JlYXRlTWVzaENhbnZhcyhzLGE9PT1nLlNIQURJTkc/bnVsbDp0aGlzLl9iYWNrZ3JvdW5kLGUuY2FjaGVkQ2FudmFzZXMpO3JldHVybiBhIT09Zy5TSEFESU5HJiYodC5zZXRUcmFuc2Zvcm0uYXBwbHkodCxvKGUuYmFzZVRyYW5zZm9ybSkpLHRoaXMubWF0cml4JiZ0LnRyYW5zZm9ybS5hcHBseSh0LG8odGhpcy5tYXRyaXgpKSksdC50cmFuc2xhdGUodS5vZmZzZXRYLHUub2Zmc2V0WSksdC5zY2FsZSh1LnNjYWxlWCx1LnNjYWxlWSksdC5jcmVhdGVQYXR0ZXJuKHUuY2FudmFzLCJuby1yZXBlYXQiKX19XSkscn0oXykseD1mdW5jdGlvbih0KXtjKHIsdCk7dmFyIGU9ZihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHYodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbShyLFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJob3RwaW5rIn19XSkscn0oXyksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4saSxhKXt2KHRoaXMsdCksdGhpcy5vcGVyYXRvckxpc3Q9ZVsyXSx0aGlzLm1hdHJpeD1lWzNdfHxbMSwwLDAsMSwwLDBdLHRoaXMuYmJveD1lWzRdLHRoaXMueHN0ZXA9ZVs1XSx0aGlzLnlzdGVwPWVbNl0sdGhpcy5wYWludFR5cGU9ZVs3XSx0aGlzLnRpbGluZ1R5cGU9ZVs4XSx0aGlzLmNvbG9yPXIsdGhpcy5jdHg9bix0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeT1pLHRoaXMuYmFzZVRyYW5zZm9ybT1hfXJldHVybiBtKHQsW3trZXk6ImNyZWF0ZVBhdHRlcm5DYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3BlcmF0b3JMaXN0LHI9dGhpcy5iYm94LGE9dGhpcy54c3RlcCxvPXRoaXMueXN0ZXAscz10aGlzLnBhaW50VHlwZSxsPXRoaXMudGlsaW5nVHlwZSx1PXRoaXMuY29sb3IsYz10aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTsoMCxuLmluZm8pKCJUaWxpbmdUeXBlOiAiK2wpO3ZhciBoPXJbMF0sZj1yWzFdLGQ9clsyXSxwPXJbM10sdj1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLHk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksbT1bdlswXSp5WzBdLHZbMV0qeVsxXV0sZz10aGlzLmdldFNpemVBbmRTY2FsZShhLHRoaXMuY3R4LmNhbnZhcy53aWR0aCxtWzBdKSxiPXRoaXMuZ2V0U2l6ZUFuZFNjYWxlKG8sdGhpcy5jdHguY2FudmFzLmhlaWdodCxtWzFdKSxfPXQuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixnLnNpemUsYi5zaXplLCEwKSx3PV8uY29udGV4dCxBPWMuY3JlYXRlQ2FudmFzR3JhcGhpY3Modyk7QS5ncm91cExldmVsPXQuZ3JvdXBMZXZlbCx0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChBLHMsdSk7dmFyIGs9aCxTPWYseD1kLEU9cDtyZXR1cm4gaDwwJiYoaz0wLHgrPU1hdGguYWJzKGgpKSxmPDAmJihTPTAsRSs9TWF0aC5hYnMoZikpLHcudHJhbnNsYXRlKC1nLnNjYWxlKmssLWIuc2NhbGUqUyksQS50cmFuc2Zvcm0oZy5zY2FsZSwwLDAsYi5zY2FsZSwwLDApLHcuc2F2ZSgpLHRoaXMuY2xpcEJib3goQSxrLFMseCxFKSxBLmJhc2VUcmFuc2Zvcm09KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShBLmN0eCksQS5leGVjdXRlT3BlcmF0b3JMaXN0KGUpLEEuZW5kRHJhd2luZygpLHtjYW52YXM6Xy5jYW52YXMsc2NhbGVYOmcuc2NhbGUsc2NhbGVZOmIuc2NhbGUsb2Zmc2V0WDprLG9mZnNldFk6U319fSx7a2V5OiJnZXRTaXplQW5kU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUscixuKXtlPU1hdGguYWJzKGUpO3ZhciBpPU1hdGgubWF4KHQuTUFYX1BBVFRFUk5fU0laRSxyKSxhPU1hdGguY2VpbChlKm4pO3JldHVybiBhPj1pP2E9aTpuPWEvZSx7c2NhbGU6bixzaXplOmF9fX0se2tleToiY2xpcEJib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89bi1lLHM9YS1yO3QuY3R4LnJlY3QoZSxyLG8scyksdC5jdXJyZW50LnVwZGF0ZVJlY3RNaW5NYXgoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0LmN0eCksW2UscixuLGFdKSx0LmNsaXAoKSx0LmVuZFBhdGgoKX19LHtrZXk6InNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuY3R4LGE9dC5jdXJyZW50O3N3aXRjaChlKXtjYXNlIDE6dmFyIG89dGhpcy5jdHg7aS5maWxsU3R5bGU9by5maWxsU3R5bGUsaS5zdHJva2VTdHlsZT1vLnN0cm9rZVN0eWxlLGEuZmlsbENvbG9yPW8uZmlsbFN0eWxlLGEuc3Ryb2tlQ29sb3I9by5zdHJva2VTdHlsZTticmVhaztjYXNlIDI6dmFyIHM9bi5VdGlsLm1ha2VIZXhDb2xvcihyWzBdLHJbMV0sclsyXSk7aS5maWxsU3R5bGU9cyxpLnN0cm9rZVN0eWxlPXMsYS5maWxsQ29sb3I9cyxhLnN0cm9rZUNvbG9yPXM7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogIi5jb25jYXQoZSkpfX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXI7aSE9PWcuU0hBRElORyYmKGE9bi5VdGlsLnRyYW5zZm9ybShhLGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgmJihhPW4uVXRpbC50cmFuc2Zvcm0oYSx0aGlzLm1hdHJpeCkpKTt2YXIgbz10aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMoZSkscz1uZXcgRE9NTWF0cml4KGEpO3M9KHM9cy50cmFuc2xhdGUoby5vZmZzZXRYLG8ub2Zmc2V0WSkpLnNjYWxlKDEvby5zY2FsZVgsMS9vLnNjYWxlWSk7dmFyIGw9dC5jcmVhdGVQYXR0ZXJuKG8uY2FudmFzLCJyZXBlYXQiKTtyZXR1cm4gbC5zZXRUcmFuc2Zvcm0ocyksbH19XSxbe2tleToiTUFYX1BBVFRFUk5fU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1BWF9QQVRURVJOX1NJWkUiLDNlMyl9fV0pLHR9KCk7ZS5UaWxpbmdQYXR0ZXJuPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5hcHBseU1hc2tJbWFnZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNyYyxhPXQuc3JjUG9zLG89dm9pZCAwPT09YT8wOmEscz10LmRlc3QsbD10LmRlc3RQb3MsdT12b2lkIDA9PT1sPzA6bCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXQuaW52ZXJzZURlY29kZSxkPXZvaWQgMCE9PWYmJmYscD1uLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuPzQyNzgxOTAwODA6MjU1LHY9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0oZT1kP1swLHBdOltwLDBdKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQ7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGkodCwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKHQsMik6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSx5PXZbMF0sbT12WzFdLGc9Yz4+MyxiPTcmYyxfPXIubGVuZ3RoO3M9bmV3IFVpbnQzMkFycmF5KHMuYnVmZmVyKTtmb3IodmFyIHc9MDt3PGg7dysrKXtmb3IodmFyIEE9bytnO288QTtvKyspe3ZhciBrPW88Xz9yW29dOjI1NTtzW3UrK109MTI4Jms/bTp5LHNbdSsrXT02NCZrP206eSxzW3UrK109MzImaz9tOnksc1t1KytdPTE2Jms/bTp5LHNbdSsrXT04Jms/bTp5LHNbdSsrXT00Jms/bTp5LHNbdSsrXT0yJms/bTp5LHNbdSsrXT0xJms/bTp5fWlmKDAhPT1iKWZvcih2YXIgUz1vPF8/cltvKytdOjI1NSx4PTA7eDxiO3grKylzW3UrK109UyYxPDw3LXg/bTp5fXJldHVybntzcmNQb3M6byxkZXN0UG9zOnV9fTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuR2xvYmFsV29ya2VyT3B0aW9ucz12b2lkIDA7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtlLkdsb2JhbFdvcmtlck9wdGlvbnM9cixyLndvcmtlclBvcnQ9dm9pZCAwPT09ci53b3JrZXJQb3J0P251bGw6ci53b3JrZXJQb3J0LHIud29ya2VyU3JjPXZvaWQgMD09PXIud29ya2VyU3JjPyIiOnIud29ya2VyU3JjfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMSk7ZnVuY3Rpb24gaSgpe2k9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsbykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8sbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09cyhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8sbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LG8oYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8sbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W29dO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1zKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCl7c3dpdGNoKHQgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKHQpJiZudWxsIT09dHx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksdC5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24odC5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKHQubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHQubWVzc2FnZSx0LnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24odC5tZXNzYWdlLHQuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPXRoaXM7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5zb3VyY2VOYW1lPWUsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKGUudGFyZ2V0TmFtZT09PWkuc291cmNlTmFtZSlpZihlLnN0cmVhbSlpLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKTtlbHNlIGlmKGUuY2FsbGJhY2spe3ZhciByPWUuY2FsbGJhY2tJZCxhPWkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PWUuY2FsbGJhY2spYS5yZXNvbHZlKGUuZGF0YSk7ZWxzZXtpZigyIT09ZS5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2EucmVqZWN0KGwoZS5yZWFzb24pKX19ZWxzZXt2YXIgbz1pLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KGUuYWN0aW9uKSk7aWYoZS5jYWxsYmFja0lkKXt2YXIgcz1pLnNvdXJjZU5hbWUsdT1lLnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobyhlLmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbih0KXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDplLmNhbGxiYWNrSWQsZGF0YTp0fSl9KSwoZnVuY3Rpb24odCl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6ZS5jYWxsYmFja0lkLHJlYXNvbjpsKHQpfSl9KSl9ZWxzZSBlLnN0cmVhbUlkP2kuX2NyZWF0ZVN0cmVhbVNpbmsoZSk6byhlLmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIGUscixzLHU7cmV0dXJuIGU9dCxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYoclt0XSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KHQsJyInKSk7clt0XT1lfX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246dCxkYXRhOmV9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5jYWxsYmFja0lkKyssYT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbaV09YTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjp0LGNhbGxiYWNrSWQ6aSxkYXRhOmV9LHIpfWNhdGNoKHQpe2EucmVqZWN0KHQpfXJldHVybiBhLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxjPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBsPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6bCxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246dCxzdHJlYW1JZDpvLGRhdGE6ZSxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxpKSxsLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24odCl7dmFyIGU9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD1lLGMucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTp0LmRlc2lyZWRTaXplfSksZS5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciBlPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD1lLGEuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpsKHQpfSksZS5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbih0KXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgbD10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sbD4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo0LHN0cmVhbUlkOmUsY2h1bms6dH0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjMsc3RyZWFtSWQ6ZX0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW2VdKX0sZXJyb3I6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NSxzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6dC5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW2VdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uocyh0LmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06OCxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo4LHN0cmVhbUlkOmUscmVhc29uOmwodCl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1tlXSxzPXRoaXMuc3RyZWFtU2lua3NbZV07c3dpdGNoKHQuc3RyZWFtKXtjYXNlIDg6dC5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNzp0LnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NyxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZ0LmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9dC5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo3LHN0cmVhbUlkOmUsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKHQpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjcsc3RyZWFtSWQ6ZSxyZWFzb246bCh0KX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUodC5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihsKHQucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLGUpO2JyZWFrO2Nhc2UgMjp0LnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGwodC5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHMub25DYW5jZWwmJnMub25DYW5jZWwobCh0LnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjIsc3RyZWFtSWQ6ZSxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06MixzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QobCh0LnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbZV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9aSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsJiZlLnN0YXJ0Q2FsbC5wcm9taXNlLGUucHVsbENhbGwmJmUucHVsbENhbGwucHJvbWlzZSxlLmNhbmNlbENhbGwmJmUuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBpPXMuYXBwbHkodCxlKTtmdW5jdGlvbiBvKHQpe2EoaSxyLG4sbyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EoaSxyLG4sbyxsLCJ0aHJvdyIsdCl9byh2b2lkIDApfSkpfSxmdW5jdGlvbih0LGUpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NZXNzYWdlSGFuZGxlcj11fSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NZXRhZGF0YT12b2lkIDA7dmFyIGk9cigxKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24gbyh0LGUscil7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHUodCxlLCJnZXQiKSl9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx1KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiB1KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBjPW5ldyBXZWFrTWFwLGg9bmV3IFdlYWtNYXAsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5wYXJzZWREYXRhLG49ZS5yYXdEYXRhOyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG8odGhpcyxjLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxvKHRoaXMsaCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbCh0aGlzLGMsciksbCh0aGlzLGgsbil9dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcyxoKX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT1zKHRoaXMsYykuZ2V0KHQpKSYmdm9pZCAwIT09ZT9lOm51bGx9fSx7a2V5OiJnZXRBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5vYmplY3RGcm9tTWFwKShzKHRoaXMsYykpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyh0aGlzLGMpLmhhcyh0KX19XSkmJmEoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLk1ldGFkYXRhPWZ9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLk9wdGlvbmFsQ29udGVudENvbmZpZz12b2lkIDA7dmFyIGk9cigxKSxhPXIoMTM5KTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1zKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgYX19fX1mdW5jdGlvbiBzKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBsKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZSYmaCh0LnByb3RvdHlwZSxlKSxyJiZoKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBkKHQsZSxyKXtwKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBwKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LG0odCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LG0odCxlLCJnZXQiKSl9ZnVuY3Rpb24gbSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgZz1TeW1ib2woIklOVEVSTkFMIiksYj1uZXcgV2Vha01hcCxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2ModGhpcyx0KSxkKHRoaXMsYix7d3JpdGFibGU6ITAsdmFsdWU6ITB9KSx0aGlzLm5hbWU9ZSx0aGlzLmludGVudD1yfXJldHVybiBmKHQsW3trZXk6InZpc2libGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsYil9fSx7a2V5OiJfc2V0VmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0IT09ZyYmKDAsaS51bnJlYWNoYWJsZSkoIkludGVybmFsIG1ldGhvZCBgX3NldFZpc2libGVgIGNhbGxlZC4iKSx2KHRoaXMsYixlKX19XSksdH0oKSx3PW5ldyBXZWFrTWFwLEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrTWFwLHg9bmV3IFdlYWtTZXQsRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7aWYoYyh0aGlzLHQpLHAodGhpcyxyPXgpLHIuYWRkKHRoaXMpLGQodGhpcyx3LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZCh0aGlzLEEse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxkKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGQodGhpcyxTLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5uYW1lPW51bGwsdGhpcy5jcmVhdG9yPW51bGwsbnVsbCE9PWUpe3RoaXMubmFtZT1lLm5hbWUsdGhpcy5jcmVhdG9yPWUuY3JlYXRvcix2KHRoaXMsUyxlLm9yZGVyKTt2YXIgbixpPW8oZS5ncm91cHMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTt5KHRoaXMsQSkuc2V0KGEuaWQsbmV3IF8oYS5uYW1lLGEuaW50ZW50KSl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfWlmKCJPRkYiPT09ZS5iYXNlU3RhdGUpe3ZhciBzLGw9byh5KHRoaXMsQSkudmFsdWVzKCkpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOylzLnZhbHVlLl9zZXRWaXNpYmxlKGcsITEpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX12YXIgdSxoPW8oZS5vbik7dHJ5e2ZvcihoLnMoKTshKHU9aC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO3kodGhpcyxBKS5nZXQoZikuX3NldFZpc2libGUoZywhMCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXZhciBtLGI9byhlLm9mZik7dHJ5e2ZvcihiLnMoKTshKG09Yi5uKCkpLmRvbmU7KXt2YXIgRT1tLnZhbHVlO3kodGhpcyxBKS5nZXQoRSkuX3NldFZpc2libGUoZywhMSl9fWNhdGNoKHQpe2IuZSh0KX1maW5hbGx5e2IuZigpfXYodGhpcyxrLHRoaXMuZ2V0SGFzaCgpKX19cmV0dXJuIGYodCxbe2tleToiaXNWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09eSh0aGlzLEEpLnNpemUpcmV0dXJuITA7aWYoIXQpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZGVmaW5lZC4iKSwhMDtpZigiT0NHIj09PXQudHlwZSlyZXR1cm4geSh0aGlzLEEpLmhhcyh0LmlkKT95KHRoaXMsQSkuZ2V0KHQuaWQpLnZpc2libGU6KCgwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh0LmlkKSksITApO2lmKCJPQ01EIj09PXQudHlwZSl7aWYodC5leHByZXNzaW9uKXJldHVybiB1KHRoaXMseCxQKS5jYWxsKHRoaXMsdC5leHByZXNzaW9uKTtpZighdC5wb2xpY3l8fCJBbnlPbiI9PT10LnBvbGljeSl7dmFyIGUscj1vKHQuaWRzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobikpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KG4pKSwhMDtpZih5KHRoaXMsQSkuZ2V0KG4pLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXJldHVybiExfWlmKCJBbGxPbiI9PT10LnBvbGljeSl7dmFyIGEscz1vKHQuaWRzKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobCkpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KGwpKSwhMDtpZigheSh0aGlzLEEpLmdldChsKS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4hMH1pZigiQW55T2ZmIj09PXQucG9saWN5KXt2YXIgYyxoPW8odC5pZHMpO3RyeXtmb3IoaC5zKCk7IShjPWgubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZigheSh0aGlzLEEpLmhhcyhmKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoZikpLCEwO2lmKCF5KHRoaXMsQSkuZ2V0KGYpLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiExfWlmKCJBbGxPZmYiPT09dC5wb2xpY3kpe3ZhciBkLHA9byh0Lmlkcyk7dHJ5e2ZvcihwLnMoKTshKGQ9cC5uKCkpLmRvbmU7KXt2YXIgdj1kLnZhbHVlO2lmKCF5KHRoaXMsQSkuaGFzKHYpKXJldHVybigwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh2KSksITA7aWYoeSh0aGlzLEEpLmdldCh2KS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX1yZXR1cm4hMH1yZXR1cm4oMCxpLndhcm4pKCJVbmtub3duIG9wdGlvbmFsIGNvbnRlbnQgcG9saWN5ICIuY29uY2F0KHQucG9saWN5LCIuIikpLCEwfXJldHVybigwLGkud2FybikoIlVua25vd24gZ3JvdXAgdHlwZSAiLmNvbmNhdCh0LnR5cGUsIi4iKSksITB9fSx7a2V5OiJzZXRWaXNpYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3kodGhpcyxBKS5oYXModCk/KHkodGhpcyxBKS5nZXQodCkuX3NldFZpc2libGUoZywhIWUpLHYodGhpcyx3LG51bGwpKTooMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQodCkpfX0se2tleToiaGFzSW5pdGlhbFZpc2liaWxpdHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhhc2goKT09PXkodGhpcyxrKX19LHtrZXk6ImdldE9yZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT95KHRoaXMsUyk/eSh0aGlzLFMpLnNsaWNlKCk6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbCh0KX0odD15KHRoaXMsQSkua2V5cygpKXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8cyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKTpudWxsO3ZhciB0fX0se2tleToiZ2V0R3JvdXBzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT4wPygwLGkub2JqZWN0RnJvbU1hcCkoeSh0aGlzLEEpKTpudWxsfX0se2tleToiZ2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHRoaXMsQSkuZ2V0KHQpfHxudWxsfX0se2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihudWxsIT09eSh0aGlzLHcpKXJldHVybiB5KHRoaXMsdyk7dmFyIHQsZSxyLG49bmV3IGEuTXVybXVySGFzaDNfNjQsaT1vKHkodGhpcyxBKSk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbD0oZT10LnZhbHVlLHI9MixmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fShlKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlLHIpfHxzKGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdT1sWzBdLGM9bFsxXTtuLnVwZGF0ZSgiIi5jb25jYXQodSwiOiIpLmNvbmNhdChjLnZpc2libGUpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIHYodGhpcyx3LG4uaGV4ZGlnZXN0KCkpfX1dKSx0fSgpO2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwyKXJldHVybiEwO2Zvcih2YXIgcj10WzBdLG49MTtuPGU7bisrKXt2YXIgYT10W25dLG89dm9pZCAwO2lmKEFycmF5LmlzQXJyYXkoYSkpbz11KHRoaXMseCxQKS5jYWxsKHRoaXMsYSk7ZWxzZXtpZigheSh0aGlzLEEpLmhhcyhhKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoYSkpLCEwO289eSh0aGlzLEEpLmdldChhKS52aXNpYmxlfXN3aXRjaChyKXtjYXNlIkFuZCI6aWYoIW8pcmV0dXJuITE7YnJlYWs7Y2FzZSJPciI6aWYobylyZXR1cm4hMDticmVhaztjYXNlIk5vdCI6cmV0dXJuIW87ZGVmYXVsdDpyZXR1cm4hMH19cmV0dXJuIkFuZCI9PT1yfWUuT3B0aW9uYWxDb250ZW50Q29uZmlnPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxMzcpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBjKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1sKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgaT10aGlzO2godGhpcyx0KSwoMCxuLmFzc2VydCkociwnUERGRGF0YVRyYW5zcG9ydFN0cmVhbSAtIG1pc3NpbmcgcmVxdWlyZWQgInBkZkRhdGFSYW5nZVRyYW5zcG9ydCIgYXJndW1lbnQuJyksdGhpcy5fcXVldWVkQ2h1bmtzPVtdLHRoaXMuX3Byb2dyZXNzaXZlRG9uZT1lLnByb2dyZXNzaXZlRG9uZXx8ITEsdGhpcy5fY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9ZS5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZXx8bnVsbDt2YXIgYT1lLmluaXRpYWxEYXRhO2lmKChudWxsPT1hP3ZvaWQgMDphLmxlbmd0aCk+MCl7dmFyIG89bmV3IFVpbnQ4QXJyYXkoYSkuYnVmZmVyO3RoaXMuX3F1ZXVlZENodW5rcy5wdXNoKG8pfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydD1yLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2UsdGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVhZGVycz1bXSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblJlY2VpdmVEYXRhKHtiZWdpbjp0LGNodW5rOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblByb2dyZXNzKHtsb2FkZWQ6dCx0b3RhbDplfSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKChmdW5jdGlvbih0KXtpLl9vblJlY2VpdmVEYXRhKHtjaHVuazp0fSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlRG9uZUxpc3RlbmVyKChmdW5jdGlvbigpe2kuX29uUHJvZ3Jlc3NpdmVEb25lKCl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LnRyYW5zcG9ydFJlYWR5KCl9cmV0dXJuIGQodCxbe2tleToiX29uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQuY2h1bmspLmJ1ZmZlcjtpZih2b2lkIDA9PT10LmJlZ2luKXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyP3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGUpOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpO2Vsc2V7dmFyIHI9dGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoKGZ1bmN0aW9uKHIpe3JldHVybiByLl9iZWdpbj09PXQuYmVnaW4mJihyLl9lbnF1ZXVlKGUpLCEwKX0pKTsoMCxuLmFzc2VydCkociwiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC4iKX19fSx7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk7dm9pZCAwPT09dC50b3RhbD9udWxsPT09KGU9dGhpcy5fcmFuZ2VSZWFkZXJzWzBdKXx8dm9pZCAwPT09ZXx8bnVsbD09PShyPWUub25Qcm9ncmVzcyl8fHZvaWQgMD09PXJ8fHIuY2FsbChlLHtsb2FkZWQ6dC5sb2FkZWR9KTpudWxsPT09KG49dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1ufHxudWxsPT09KGk9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09aXx8aS5jYWxsKG4se2xvYWRlZDp0LmxvYWRlZCx0b3RhbDp0LnRvdGFsfSl9fSx7a2V5OiJfb25Qcm9ncmVzc2l2ZURvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09dHx8dC5wcm9ncmVzc2l2ZURvbmUoKSx0aGlzLl9wcm9ncmVzc2l2ZURvbmU9ITB9fSx7a2V5OiJfcmVtb3ZlUmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHQpO2U+PTAmJnRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3ZhciB0PXRoaXMuX3F1ZXVlZENodW5rcztyZXR1cm4gdGhpcy5fcXVldWVkQ2h1bmtzPW51bGwsbmV3IHYodGhpcyx0LHRoaXMuX3Byb2dyZXNzaXZlRG9uZSx0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSl9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IHkodGhpcyx0LGUpO3JldHVybiB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSh0LGUpLHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCk7dmFyIHIsbj11KHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUuY2FuY2VsKHQpfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX1dKSx0fSgpO2UuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1wO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtoKHRoaXMsdCksdGhpcy5fc3RyZWFtPWUsdGhpcy5fZG9uZT1ufHwhMSx0aGlzLl9maWxlbmFtZT0oMCxpLmlzUGRmRmlsZSkoYSk/YTpudWxsLHRoaXMuX3F1ZXVlZENodW5rcz1yfHxbXSx0aGlzLl9sb2FkZWQ9MDt2YXIgbyxzPXUodGhpcy5fcXVldWVkQ2h1bmtzKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWU7dGhpcy5fbG9hZGVkKz1sLmJ5dGVMZW5ndGh9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX2hlYWRlcnNSZWFkeT1Qcm9taXNlLnJlc29sdmUoKSxlLl9mdWxsUmVxdWVzdFJlYWRlcj10aGlzLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lfHwodGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVua3MucHVzaCh0KSx0aGlzLl9sb2FkZWQrPXQuYnl0ZUxlbmd0aCl9fSx7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJmaWxlbmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cmVhbS5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW0uX2NvbnRlbnRMZW5ndGh9fSx7a2V5OiJyZWFkIix2YWx1ZTooZT1zKGEoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCEodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aD4wKSl7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIGU9dGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCksdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmUsZG9uZTohMX0pO2Nhc2UgMzppZighdGhpcy5fZG9uZSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNTpyZXR1cm4gcj0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3JlcXVlc3RzLnB1c2gociksdC5hYnJ1cHQoInJldHVybiIsci5wcm9taXNlKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITA7dmFyIGUscj11KHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wfX0se2tleToicHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RvbmV8fCh0aGlzLl9kb25lPSEwKX19XSksdH0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX3N0cmVhbT1lLHRoaXMuX2JlZ2luPXIsdGhpcy5fZW5kPW4sdGhpcy5fcXVldWVkQ2h1bms9bnVsbCx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5fZG9uZSl7aWYoMD09PXRoaXMuX3JlcXVlc3RzLmxlbmd0aCl0aGlzLl9xdWV1ZWRDaHVuaz10O2Vsc2V7dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTt2YXIgZSxyPXUodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9dGhpcy5fZG9uZT0hMCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NDticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDQ6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDY6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lPSEwO3ZhciBlLHI9dSh0aGlzLl9yZXF1ZXN0cyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9yZXF1ZXN0cy5sZW5ndGg9MCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX1dKSx0fSgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9ZnVuY3Rpb24gbih0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIG49dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4uY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1yKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5YZmFUZXh0PXZvaWQgMDt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToidGV4dENvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9e2l0ZW1zOnIsc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9O3JldHVybiBmdW5jdGlvbiBlKGkpe3ZhciBhO2lmKGkpe3ZhciBvPW51bGwscz1pLm5hbWU7aWYoIiN0ZXh0Ij09PXMpbz1pLnZhbHVlO2Vsc2V7aWYoIXQuc2hvdWxkQnVpbGRUZXh0KHMpKXJldHVybjtudWxsIT1pJiZudWxsIT09KGE9aS5hdHRyaWJ1dGVzKSYmdm9pZCAwIT09YSYmYS50ZXh0Q29udGVudD9vPWkuYXR0cmlidXRlcy50ZXh0Q29udGVudDppLnZhbHVlJiYobz1pLnZhbHVlKX1pZihudWxsIT09byYmci5wdXNoKHtzdHI6b30pLGkuY2hpbGRyZW4pe3ZhciBsLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBuKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bih0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIGk9MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gaT49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbaSsrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gcz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLG89dH0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgb319fX0oaS5jaGlsZHJlbik7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWUobC52YWx1ZSl9Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9fX19KGUpLGl9fSx7a2V5OiJzaG91bGRCdWlsZFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEoInRleHRhcmVhIj09PXR8fCJpbnB1dCI9PT10fHwib3B0aW9uIj09PXR8fCJzZWxlY3QiPT09dCl9fV0sbnVsbCYmaShlLnByb3RvdHlwZSxudWxsKSxyJiZpKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYVRleHQ9YX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWUuTm9kZUNhbnZhc0ZhY3Rvcnk9ZS5Ob2RlQ01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwO3ZhciBpPXIoMTM4KTtmdW5jdGlvbiBhKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBlJiZvKHQucHJvdG90eXBlLGUpLHImJm8odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGwodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmdSh0LGUpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LHUodCxlKX1mdW5jdGlvbiBjKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPWgodCk7aWYoZSl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGksYXJndW1lbnRzLGEpfWVsc2Ugcj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBoKHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxoKHQpfXZhciBmPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXtyZXF1aXJlKCJmcyIpLnJlYWRGaWxlKHQsKGZ1bmN0aW9uKHQsbil7IXQmJm4/ZShuZXcgVWludDhBcnJheShuKSk6cihuZXcgRXJyb3IodCkpfSkpfSkpfSxkPWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJlcXVpcmUoImNhbnZhcyIpLmNyZWF0ZUNhbnZhcyh0LGUpfX1dKSxyfShpLkJhc2VDYW52YXNGYWN0b3J5KTtlLk5vZGVDYW52YXNGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24odCl7bChyLHQpO3ZhciBlPWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBhKHRoaXMsciksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHMocixbe2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0KS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57Y01hcERhdGE6dCxjb21wcmVzc2lvblR5cGU6ZX19KSl9fV0pLHJ9KGkuQmFzZUNNYXBSZWFkZXJGYWN0b3J5KTtlLk5vZGVDTWFwUmVhZGVyRmFjdG9yeT1wO3ZhciB2PWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpfX1dKSxyfShpLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9dn0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVGV4dExheWVyUmVuZGVyVGFzaz12b2lkIDAsZS5yZW5kZXJUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dC50ZXh0Q29udGVudFNvdXJjZXx8IXQudGV4dENvbnRlbnQmJiF0LnRleHRDb250ZW50U3RyZWFtfHwoKDAsYS5kZXByZWNhdGVkKSgiVGhlIFRleHRMYXllclJlbmRlciBgdGV4dENvbnRlbnRgL2B0ZXh0Q29udGVudFN0cmVhbWAgcGFyYW1ldGVycyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSwgcGxlYXNlIHVzZSBgdGV4dENvbnRlbnRTb3VyY2VgIGluc3RlYWQuIiksdC50ZXh0Q29udGVudFNvdXJjZT10LnRleHRDb250ZW50fHx0LnRleHRDb250ZW50U3RyZWFtKTt2YXIgZT1uZXcgcCh0KTtyZXR1cm4gZS5fcmVuZGVyKCksZX0sZS51cGRhdGVUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250YWluZXIscj10LnZpZXdwb3J0LG49dC50ZXh0RGl2cyxpPXQudGV4dERpdlByb3BlcnRpZXMsbz10LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGw9dC5tdXN0Um90YXRlLHU9dm9pZCAwPT09bHx8bCxjPXQubXVzdFJlc2NhbGUsZj12b2lkIDA9PT1jfHxjO2lmKHUmJigwLGEuc2V0TGF5ZXJEaW1lbnNpb25zKShlLHtyb3RhdGlvbjpyLnJvdGF0aW9ufSksZil7dmFyIHAsdj1oKDAsbykseT17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpyLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6dn0sbT1zKG4pO3RyeXtmb3IobS5zKCk7IShwPW0ubigpKS5kb25lOyl7dmFyIGc9cC52YWx1ZTt5LnByb3BlcnRpZXM9aS5nZXQoZykseS5kaXY9ZyxkKHkpfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19fTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2wodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciB1PTMwLGM9bmV3IE1hcDtmdW5jdGlvbiBoKHQsZSl7dmFyIHI7aWYoZSYmaS5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZClyPW5ldyBPZmZzY3JlZW5DYW52YXModCx0KS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLndpZHRoPW4uaGVpZ2h0PXQscj1uLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksYT17YW5nbGU6MCxjYW52YXNXaWR0aDowLGhhc1RleHQ6IiIhPT1lLnN0cixoYXNFT0w6ZS5oYXNFT0wsZm9udFNpemU6MH07dC5fdGV4dERpdnMucHVzaChuKTt2YXIgbz1pLlV0aWwudHJhbnNmb3JtKHQuX3RyYW5zZm9ybSxlLnRyYW5zZm9ybSkscz1NYXRoLmF0YW4yKG9bMV0sb1swXSksbD1yW2UuZm9udE5hbWVdO2wudmVydGljYWwmJihzKz1NYXRoLlBJLzIpO3ZhciBmLGQscD1NYXRoLmh5cG90KG9bMl0sb1szXSksdj1wKmZ1bmN0aW9uKHQsZSl7dmFyIHI9Yy5nZXQodCk7aWYocilyZXR1cm4gcjt2YXIgbj1oKHUsZSk7bi5mb250PSIiLmNvbmNhdCh1LCJweCAiKS5jb25jYXQodCk7dmFyIGk9bi5tZWFzdXJlVGV4dCgiIiksYT1pLmZvbnRCb3VuZGluZ0JveEFzY2VudCxvPU1hdGguYWJzKGkuZm9udEJvdW5kaW5nQm94RGVzY2VudCk7aWYoYSl7dmFyIHM9YS8oYStvKTtyZXR1cm4gYy5zZXQodCxzKSxuLmNhbnZhcy53aWR0aD1uLmNhbnZhcy5oZWlnaHQ9MCxzfW4uc3Ryb2tlU3R5bGU9InJlZCIsbi5jbGVhclJlY3QoMCwwLHUsdSksbi5zdHJva2VUZXh0KCJnIiwwLDApO3ZhciBsPW4uZ2V0SW1hZ2VEYXRhKDAsMCx1LHUpLmRhdGE7bz0wO2Zvcih2YXIgZj1sLmxlbmd0aC0xLTM7Zj49MDtmLT00KWlmKGxbZl0+MCl7bz1NYXRoLmNlaWwoZi80L3UpO2JyZWFrfW4uY2xlYXJSZWN0KDAsMCx1LHUpLG4uc3Ryb2tlVGV4dCgiQSIsMCx1KSxhPTA7Zm9yKHZhciBkPTAscD0obD1uLmdldEltYWdlRGF0YSgwLDAsdSx1KS5kYXRhKS5sZW5ndGg7ZDxwO2QrPTQpaWYobFtkXT4wKXthPXUtTWF0aC5mbG9vcihkLzQvdSk7YnJlYWt9aWYobi5jYW52YXMud2lkdGg9bi5jYW52YXMuaGVpZ2h0PTAsYSl7dmFyIHY9YS8oYStvKTtyZXR1cm4gYy5zZXQodCx2KSx2fXJldHVybiBjLnNldCh0LC44KSwuOH0obC5mb250RmFtaWx5LHQuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTswPT09cz8oZj1vWzRdLGQ9b1s1XS12KTooZj1vWzRdK3YqTWF0aC5zaW4ocyksZD1vWzVdLXYqTWF0aC5jb3MocykpO3ZhciB5PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikqIixtPW4uc3R5bGU7dC5fY29udGFpbmVyPT09dC5fcm9vdENvbnRhaW5lcj8obS5sZWZ0PSIiLmNvbmNhdCgoMTAwKmYvdC5fcGFnZVdpZHRoKS50b0ZpeGVkKDIpLCIlIiksbS50b3A9IiIuY29uY2F0KCgxMDAqZC90Ll9wYWdlSGVpZ2h0KS50b0ZpeGVkKDIpLCIlIikpOihtLmxlZnQ9IiIuY29uY2F0KHkpLmNvbmNhdChmLnRvRml4ZWQoMiksInB4KSIpLG0udG9wPSIiLmNvbmNhdCh5KS5jb25jYXQoZC50b0ZpeGVkKDIpLCJweCkiKSksbS5mb250U2l6ZT0iIi5jb25jYXQoeSkuY29uY2F0KHAudG9GaXhlZCgyKSwicHgpIiksbS5mb250RmFtaWx5PWwuZm9udEZhbWlseSxhLmZvbnRTaXplPXAsbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKSxuLnRleHRDb250ZW50PWUuc3RyLG4uZGlyPWUuZGlyLHQuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYobi5kYXRhc2V0LmZvbnROYW1lPWUuZm9udE5hbWUpLDAhPT1zJiYoYS5hbmdsZT1zKigxODAvTWF0aC5QSSkpO3ZhciBnPSExO2lmKGUuc3RyLmxlbmd0aD4xKWc9ITA7ZWxzZSBpZigiICIhPT1lLnN0ciYmZS50cmFuc2Zvcm1bMF0hPT1lLnRyYW5zZm9ybVszXSl7dmFyIGI9TWF0aC5hYnMoZS50cmFuc2Zvcm1bMF0pLF89TWF0aC5hYnMoZS50cmFuc2Zvcm1bM10pO2IhPT1fJiZNYXRoLm1heChiLF8pL01hdGgubWluKGIsXyk+MS41JiYoZz0hMCl9ZyYmKGEuY2FudmFzV2lkdGg9bC52ZXJ0aWNhbD9lLmhlaWdodDplLndpZHRoKSx0Ll90ZXh0RGl2UHJvcGVydGllcy5zZXQobixhKSx0Ll9pc1JlYWRhYmxlU3RyZWFtJiZ0Ll9sYXlvdXRUZXh0KG4pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXYscj10LnNjYWxlLG49dC5wcm9wZXJ0aWVzLGk9dC5jdHgsYT10LnByZXZGb250U2l6ZSxvPXQucHJldkZvbnRGYW1pbHkscz1lLnN0eWxlLGw9IiI7aWYoMCE9PW4uY2FudmFzV2lkdGgmJm4uaGFzVGV4dCl7dmFyIHU9cy5mb250RmFtaWx5LGM9bi5jYW52YXNXaWR0aCxoPW4uZm9udFNpemU7YT09PWgmJm89PT11fHwoaS5mb250PSIiLmNvbmNhdChoKnIsInB4ICIpLmNvbmNhdCh1KSx0LnByZXZGb250U2l6ZT1oLHQucHJldkZvbnRGYW1pbHk9dSk7dmFyIGY9aS5tZWFzdXJlVGV4dChlLnRleHRDb250ZW50KS53aWR0aDtmPjAmJihsPSJzY2FsZVgoIi5jb25jYXQoYypyL2YsIikiKSl9MCE9PW4uYW5nbGUmJihsPSJyb3RhdGUoIi5jb25jYXQobi5hbmdsZSwiZGVnKSAiKS5jb25jYXQobCkpLGwubGVuZ3RoPjAmJihzLnRyYW5zZm9ybT1sKX12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbj10aGlzLG89ZS50ZXh0Q29udGVudFNvdXJjZSxzPWUuY29udGFpbmVyLGw9ZS52aWV3cG9ydCx1PWUudGV4dERpdnMsYz1lLnRleHREaXZQcm9wZXJ0aWVzLGY9ZS50ZXh0Q29udGVudEl0ZW1zU3RyLGQ9ZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLl90ZXh0Q29udGVudFNvdXJjZT1vLHRoaXMuX2lzUmVhZGFibGVTdHJlYW09byBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtLHRoaXMuX2NvbnRhaW5lcj10aGlzLl9yb290Q29udGFpbmVyPXMsdGhpcy5fdGV4dERpdnM9dXx8W10sdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0cj1mfHxbXSx0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZD0hKG51bGw9PT0ocj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpfHx2b2lkIDA9PT1yfHwhci5lbmFibGVkKSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl90ZXh0RGl2UHJvcGVydGllcz1jfHxuZXcgV2Vha01hcCx0aGlzLl9jYW5jZWxlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fbGF5b3V0VGV4dFBhcmFtcz17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpsLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6aCgwLGQpfTt2YXIgcD1sLnJhd0RpbXMsdj1wLnBhZ2VXaWR0aCx5PXAucGFnZUhlaWdodCxtPXAucGFnZVgsZz1wLnBhZ2VZO3RoaXMuX3RyYW5zZm9ybT1bMSwwLDAsLTEsLW0sZyt5XSx0aGlzLl9wYWdlV2lkdGg9dix0aGlzLl9wYWdlSGVpZ2h0PXksKDAsYS5zZXRMYXllckRpbWVuc2lvbnMpKHMsbCksdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlLmZpbmFsbHkoKGZ1bmN0aW9uKCl7bi5fbGF5b3V0VGV4dFBhcmFtcz1udWxsfSkpLmNhdGNoKChmdW5jdGlvbigpe30pKX12YXIgZSxyO3JldHVybiBlPXQsKHI9W3trZXk6InByb21pc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsZWQ9ITAsdGhpcy5fcmVhZGVyJiYodGhpcy5fcmVhZGVyLmNhbmNlbChuZXcgaS5BYm9ydEV4Y2VwdGlvbigiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLiIpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBpLkFib3J0RXhjZXB0aW9uKCJUZXh0TGF5ZXIgdGFzayBjYW5jZWxsZWQuIikpfX0se2tleToiX3Byb2Nlc3NJdGVtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXModCk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKHZvaWQgMCE9PWkuc3RyKXRoaXMuX3RleHRDb250ZW50SXRlbXNTdHIucHVzaChpLnN0ciksZih0aGlzLGksZSk7ZWxzZSBpZigiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiPT09aS50eXBlfHwiYmVnaW5NYXJrZWRDb250ZW50Ij09PWkudHlwZSl7dmFyIGE9dGhpcy5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcmtlZENvbnRlbnQiKSxudWxsIT09aS5pZCYmdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiaWQiLCIiLmNvbmNhdChpLmlkKSksYS5hcHBlbmQodGhpcy5fY29udGFpbmVyKX1lbHNlImVuZE1hcmtlZENvbnRlbnQiPT09aS50eXBlJiYodGhpcy5fY29udGFpbmVyPXRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToiX2xheW91dFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xheW91dFRleHRQYXJhbXMucHJvcGVydGllcz10aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQodCk7aWYodGhpcy5fbGF5b3V0VGV4dFBhcmFtcy5kaXY9dCxkKHRoaXMuX2xheW91dFRleHRQYXJhbXMpLGUuaGFzVGV4dCYmdGhpcy5fY29udGFpbmVyLmFwcGVuZCh0KSxlLmhhc0VPTCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTtyLnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmQocil9fX0se2tleToiX3JlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5faXNSZWFkYWJsZVN0cmVhbSl0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTb3VyY2UuZ2V0UmVhZGVyKCksZnVuY3Rpb24gbigpe3QuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oaSl7dmFyIGE9aS52YWx1ZTtpLmRvbmU/ZS5yZXNvbHZlKCk6KE9iamVjdC5hc3NpZ24ocixhLnN0eWxlcyksdC5fcHJvY2Vzc0l0ZW1zKGEuaXRlbXMsciksbigpKX0pLGUucmVqZWN0KX0oKTtlbHNle2lmKCF0aGlzLl90ZXh0Q29udGVudFNvdXJjZSl0aHJvdyBuZXcgRXJyb3IoJ05vICJ0ZXh0Q29udGVudFNvdXJjZSIgcGFyYW1ldGVyIHNwZWNpZmllZC4nKTt2YXIgbj10aGlzLl90ZXh0Q29udGVudFNvdXJjZSxhPW4uaXRlbXMsbz1uLnN0eWxlczt0aGlzLl9wcm9jZXNzSXRlbXMoYSxvKSxlLnJlc29sdmUoKX1lLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyPW51bGwsZnVuY3Rpb24odCl7aWYoIXQuX2NhbmNlbGVkKXt2YXIgZT10Ll90ZXh0RGl2cyxyPXQuX2NhcGFiaWxpdHk7aWYoZS5sZW5ndGg+MWU1KXIucmVzb2x2ZSgpO2Vsc2V7aWYoIXQuX2lzUmVhZGFibGVTdHJlYW0pe3ZhciBuLGk9cyhlKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7dC5fbGF5b3V0VGV4dChhKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fXIucmVzb2x2ZSgpfX19KHQpfSksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QpfX1dKSYmbyhlLnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fSgpO2UuVGV4dExheWVyUmVuZGVyVGFzaz1wfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDE1Mykscz1yKDE1NCksbD1yKDEzNyk7ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGModCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKHQsZSk6dm9pZCAwfX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxkKG4ua2V5KSxuKX19ZnVuY3Rpb24gZih0LGUpe3YodCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBkKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBwKHQsZSxyKXt2KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB2KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB5KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gZyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCxiKHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBiKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBfLHcsQT1uZXcgV2Vha01hcCxrPW5ldyBXZWFrTWFwLFM9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcCxFPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsVD1uZXcgV2Vha01hcCxDPW5ldyBXZWFrTWFwLE89bmV3IFdlYWtTZXQsRj1uZXcgV2Vha1NldCxNPW5ldyBXZWFrU2V0LFI9bmV3IFdlYWtTZXQsST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksZih0aGlzLFIpLGYodGhpcyxNKSxmKHRoaXMsRiksZih0aGlzLE8pLHAodGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxwKHRoaXMsUyx7d3JpdGFibGU6ITAsdmFsdWU6dGhpcy5wb2ludGVydXAuYmluZCh0aGlzKX0pLHAodGhpcyx4LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLnBvaW50ZXJkb3duLmJpbmQodGhpcyl9KSxwKHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHAodGhpcyxQLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxULHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0Ll9pbml0aWFsaXplZHx8KHQuX2luaXRpYWxpemVkPSEwLG8uRnJlZVRleHRFZGl0b3IuaW5pdGlhbGl6ZShlLmwxMG4pLHMuSW5rRWRpdG9yLmluaXRpYWxpemUoZS5sMTBuKSksZS51aU1hbmFnZXIucmVnaXN0ZXJFZGl0b3JUeXBlcyhbby5GcmVlVGV4dEVkaXRvcixzLklua0VkaXRvcl0pLGcodGhpcyxDLGUudWlNYW5hZ2VyKSx0aGlzLnBhZ2VJbmRleD1lLnBhZ2VJbmRleCx0aGlzLmRpdj1lLmRpdixnKHRoaXMsQSxlLmFjY2Vzc2liaWxpdHlNYW5hZ2VyKSxtKHRoaXMsQykuYWRkTGF5ZXIodGhpcyl9dmFyIGUscjtyZXR1cm4gZT10LHI9W3trZXk6InVwZGF0ZVRvb2xiYXIiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51cGRhdGVUb29sYmFyKHQpfX0se2tleToidXBkYXRlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bSh0aGlzLEMpLmdldE1vZGUoKTt5KHRoaXMsUixOKS5jYWxsKHRoaXMpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8odGhpcy5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMSksdGhpcy5kaXNhYmxlQ2xpY2soKSk6dGhpcy5lbmFibGVDbGljaygpLG0odGhpcyxDKS51bnNlbGVjdEFsbCgpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImZyZWVUZXh0RWRpdGluZyIsdD09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImlua0VkaXRpbmciLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSyl9fSx7a2V5OiJhZGRJbmtFZGl0b3JJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodHx8bSh0aGlzLEMpLmdldE1vZGUoKT09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LKXtpZighdCl7dmFyIGUscj11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlO2lmKG4uaXNFbXB0eSgpKXJldHVybiB2b2lkIG4uc2V0SW5CYWNrZ3JvdW5kKCl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX15KHRoaXMsTSxEKS5jYWxsKHRoaXMse29mZnNldFg6MCxvZmZzZXRZOjB9KS5zZXRJbkJhY2tncm91bmQoKX19fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS5zZXRFZGl0aW5nU3RhdGUodCl9fSx7a2V5OiJhZGRDb21tYW5kcyIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLmFkZENvbW1hbmRzKHQpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZUVkaXRpbmcoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19fSx7a2V5OiJkaXNhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmRpc2FibGVFZGl0aW5nKCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fX0se2tleToic2V0QWN0aXZlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuZ2V0QWN0aXZlKCkhPT10JiZtKHRoaXMsQykuc2V0QWN0aXZlRWRpdG9yKHQpfX0se2tleToiZW5hYmxlQ2xpY2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG0odGhpcyx4KSksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixtKHRoaXMsUykpfX0se2tleToiZGlzYWJsZUNsaWNrIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixtKHRoaXMseCkpLHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsbSh0aGlzLFMpKX19LHtrZXk6ImF0dGFjaCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEUpLnNldCh0LmlkLHQpfX0se2tleToiZGV0YWNoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTttKHRoaXMsRSkuZGVsZXRlKHQuaWQpLG51bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZVBvaW50ZXJJblRleHRMYXllcih0LmNvbnRlbnREaXYpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO20odGhpcyxDKS5yZW1vdmVFZGl0b3IodCksdGhpcy5kZXRhY2godCksdC5kaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIsc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmRpdi5zdHlsZS5kaXNwbGF5PSIiLHQuZGl2LnJlbW92ZSgpLHQuaXNBdHRhY2hlZFRvRE9NPSExLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5JiZtKGUsQykuZm9jdXNNYWluQ29udGFpbmVyKCl9KSwwKSxtKHRoaXMsVCl8fHRoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXtpZih5KHRoaXMsTyxqKS5jYWxsKHRoaXMsdCksbSh0aGlzLEMpLmFkZEVkaXRvcih0KSx0aGlzLmF0dGFjaCh0KSwhdC5pc0F0dGFjaGVkVG9ET00pe3ZhciBlPXQucmVuZGVyKCk7dGhpcy5kaXYuYXBwZW5kKGUpLHQuaXNBdHRhY2hlZFRvRE9NPSEwfXRoaXMubW92ZUVkaXRvckluRE9NKHQpLHQub25jZUFkZGVkKCksbSh0aGlzLEMpLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UodCl9fSx7a2V5OiJtb3ZlRWRpdG9ySW5ET00iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsdC5kaXYsdC5jb250ZW50RGl2LCEwKX19LHtrZXk6ImFkZE9yUmVidWlsZCIsdmFsdWU6ZnVuY3Rpb24odCl7dC5uZWVkc1RvQmVSZWJ1aWx0KCk/dC5yZWJ1aWxkKCk6dGhpcy5hZGQodCl9fSx7a2V5OiJhZGRBTmV3RWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITB9KX19LHtrZXk6ImFkZFVuZG9hYmxlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITF9KX19LHtrZXk6ImdldE5leHRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLEMpLmdldElkKCl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuYW5ub3RhdGlvblR5cGUpe2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpyZXR1cm4gby5GcmVlVGV4dEVkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKTtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOnJldHVybiBzLklua0VkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKX1yZXR1cm4gbnVsbH19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuc2V0U2VsZWN0ZWQodCl9fSx7a2V5OiJ0b2dnbGVTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLnRvZ2dsZVNlbGVjdGVkKHQpfX0se2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odGhpcyxDKS5pc1NlbGVjdGVkKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51bnNlbGVjdCh0KX19LHtrZXk6InBvaW50ZXJ1cCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYzswIT09dC5idXR0b258fHQuY3RybEtleSYmZXx8dC50YXJnZXQ9PT10aGlzLmRpdiYmbSh0aGlzLFApJiYoZyh0aGlzLFAsITEpLG0odGhpcyxrKT95KHRoaXMsTSxEKS5jYWxsKHRoaXMsdCk6Zyh0aGlzLGssITApKX19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1pLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjO2lmKCEoMCE9PXQuYnV0dG9ufHx0LmN0cmxLZXkmJmUpJiZ0LnRhcmdldD09PXRoaXMuZGl2KXtnKHRoaXMsUCwhMCk7dmFyIHI9bSh0aGlzLEMpLmdldEFjdGl2ZSgpO2codGhpcyxrLCFyfHxyLmlzRW1wdHkoKSl9fX0se2tleToiZHJvcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9wbGFpbiIpLHI9bSh0aGlzLEMpLmdldEVkaXRvcihlKTtpZihyKXt0LnByZXZlbnREZWZhdWx0KCksdC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIseSh0aGlzLE8saikuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5jbGllbnRYLW4ueCxhPXQuY2xpZW50WS1uLnk7ci50cmFuc2xhdGUoaS1yLnN0YXJ0WCxhLXIuc3RhcnRZKSx0aGlzLm1vdmVFZGl0b3JJbkRPTShyKSxyLmRpdi5mb2N1cygpfX19LHtrZXk6ImRyYWdvdmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0OyhudWxsPT09KHQ9bSh0aGlzLEMpLmdldEFjdGl2ZSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5wYXJlbnQpPT09dGhpcyYmbSh0aGlzLEMpLnNldEFjdGl2ZUVkaXRvcihudWxsKTt2YXIgZSxyPXUobSh0aGlzLEUpLnZhbHVlcygpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuLGk9ZS52YWx1ZTtudWxsPT09KG49bSh0aGlzLEEpKXx8dm9pZCAwPT09bnx8bi5yZW1vdmVQb2ludGVySW5UZXh0TGF5ZXIoaS5jb250ZW50RGl2KSxpLnNldFBhcmVudChudWxsKSxpLmlzQXR0YWNoZWRUb0RPTT0hMSxpLmRpdi5yZW1vdmUoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5kaXY9bnVsbCxtKHRoaXMsRSkuY2xlYXIoKSxtKHRoaXMsQykucmVtb3ZlTGF5ZXIodGhpcyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmlld3BvcnQ7dGhpcy52aWV3cG9ydD1lLCgwLGwuc2V0TGF5ZXJEaW1lbnNpb25zKSh0aGlzLmRpdixlKSwoMCxhLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnb3ZlciIsImRyb3AiXSk7dmFyIHIsbj11KG0odGhpcyxDKS5nZXRFZGl0b3JzKHRoaXMucGFnZUluZGV4KSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO3RoaXMuYWRkKGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX10aGlzLnVwZGF0ZU1vZGUoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC52aWV3cG9ydDttKHRoaXMsQykuY29tbWl0T3JSZW1vdmUoKSx0aGlzLnZpZXdwb3J0PWUsKDAsbC5zZXRMYXllckRpbWVuc2lvbnMpKHRoaXMuZGl2LHtyb3RhdGlvbjplLnJvdGF0aW9ufSksdGhpcy51cGRhdGVNb2RlKCl9fSx7a2V5OiJwYWdlRGltZW5zaW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5yYXdEaW1zO3JldHVyblt0LnBhZ2VXaWR0aCx0LnBhZ2VIZWlnaHRdfX1dLHImJmgoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtmdW5jdGlvbiBqKHQpe3ZhciBlO3QucGFyZW50IT09dGhpcyYmKHRoaXMuYXR0YWNoKHQpLG51bGw9PT0oZT10LnBhcmVudCl8fHZvaWQgMD09PWV8fGUuZGV0YWNoKHQpLHQuc2V0UGFyZW50KHRoaXMpLHQuZGl2JiZ0LmlzQXR0YWNoZWRUb0RPTSYmKHQuZGl2LnJlbW92ZSgpLHRoaXMuZGl2LmFwcGVuZCh0LmRpdikpKX1mdW5jdGlvbiBMKHQpe3N3aXRjaChtKHRoaXMsQykuZ2V0TW9kZSgpKXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBvLkZyZWVUZXh0RWRpdG9yKHQpO2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6cmV0dXJuIG5ldyBzLklua0VkaXRvcih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEKHQpe3ZhciBlPXRoaXMuZ2V0TmV4dElkKCkscj15KHRoaXMsRixMKS5jYWxsKHRoaXMse3BhcmVudDp0aGlzLGlkOmUseDp0Lm9mZnNldFgseTp0Lm9mZnNldFksdWlNYW5hZ2VyOm0odGhpcyxDKX0pO3JldHVybiByJiZ0aGlzLmFkZChyKSxyfWZ1bmN0aW9uIE4oKXtnKHRoaXMsVCwhMCk7dmFyIHQsZT11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3IuaXNFbXB0eSgpJiZyLnJlbW92ZSgpfX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1nKHRoaXMsVCwhMSl9ZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9SSxfPUksKHc9ZCh3PSJfaW5pdGlhbGl6ZWQiKSlpbiBfP09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHcse3ZhbHVlOmZhbHNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6X1t3XT1mYWxzZX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRnJlZVRleHRFZGl0b3I9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDEzNSk7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9dSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx1KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gYyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/aChPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2IodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmgoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXyhuLmtleSksbil9fWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PW0odCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSx2KHQsZSl9ZnVuY3Rpb24geSh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sbSh0KX1mdW5jdGlvbiBnKHQsZSl7QSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGIodCxlLHIpe3JldHVybihlPV8oZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gXyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW4oZSk/ZTpTdHJpbmcoZSl9ZnVuY3Rpb24gdyh0LGUscil7QSh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gQSh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKHQpOmUudmFsdWV9KHQsRSh0LGUsImdldCIpKX1mdW5jdGlvbiBTKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19KHQsRSh0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gRSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgUD1uZXcgV2Vha01hcCxUPW5ldyBXZWFrTWFwLEM9bmV3IFdlYWtNYXAsTz1uZXcgV2Vha01hcCxGPW5ldyBXZWFrTWFwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha1NldCxEPW5ldyBXZWFrU2V0LE49bmV3IFdlYWtTZXQsVT1uZXcgV2Vha1NldCxXPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZ2KHQsZSl9KEUsdCk7dmFyIGUscixoLGIsXyxBPShiPUUsXz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgdCxlPW0oYik7aWYoXyl7dmFyIHI9bSh0aGlzKS5jb25zdHJ1Y3Rvcjt0PVJlZmxlY3QuY29uc3RydWN0KGUsYXJndW1lbnRzLHIpfWVsc2UgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiB5KHQpfSh0aGlzLHQpfSk7ZnVuY3Rpb24gRSh0KXt2YXIgZTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxFKSxnKHkoZT1BLmNhbGwodGhpcyxmKGYoe30sdCkse30se25hbWU6ImZyZWVUZXh0RWRpdG9yIn0pKSksVSksZyh5KGUpLE4pLGcoeShlKSxEKSxnKHkoZSksTCksdyh5KGUpLFAse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Qmx1ci5iaW5kKHkoZSkpfSksdyh5KGUpLFQse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Rm9jdXMuYmluZCh5KGUpKX0pLHcoeShlKSxDLHt3cml0YWJsZTohMCx2YWx1ZTplLmVkaXRvckRpdklucHV0LmJpbmQoeShlKSl9KSx3KHkoZSksTyx7d3JpdGFibGU6ITAsdmFsdWU6ZS5lZGl0b3JEaXZLZXlkb3duLmJpbmQoeShlKSl9KSx3KHkoZSksRix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdyh5KGUpLE0se3dyaXRhYmxlOiEwLHZhbHVlOiIifSksdyh5KGUpLFIse3dyaXRhYmxlOiEwLHZhbHVlOiIiLmNvbmNhdChlLmlkLCItZWRpdG9yIil9KSx3KHkoZSksSSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx3KHkoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkseCh5KGUpLEYsdC5jb2xvcnx8RS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLHgoeShlKSxqLHQuZm9udFNpemV8fEUuX2RlZmF1bHRGb250U2l6ZSksZX1yZXR1cm4gZT1FLGg9W3trZXk6ImluaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2wxMG5Qcm9taXNlPW5ldyBNYXAoWyJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudCIsImVkaXRvcl9mcmVlX3RleHQyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSk7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO3RoaXMuX2ludGVybmFsUGFkZGluZz1wYXJzZUZsb2F0KGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1mcmVldGV4dC1wYWRkaW5nIikpfX0se2tleToidXBkYXRlRGVmYXVsdFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkU6RS5fZGVmYXVsdEZvbnRTaXplPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOkUuX2RlZmF1bHRDb2xvcj1lfX19LHtrZXk6ImRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLEUuX2RlZmF1bHRGb250U2l6ZV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsRS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4sYT1wKG0oRSksImRlc2VyaWFsaXplIix0aGlzKS5jYWxsKHRoaXMsdCxlLHIpO3JldHVybiB4KGEsaix0LmZvbnRTaXplKSx4KGEsRixpLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBjKHQpfShuPXQuY29sb3IpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KG4pfHx1KG4pfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSkseChhLE0sdC52YWx1ZSksYX19XSwocj1be2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRTpTKHRoaXMsTCxHKS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOlModGhpcyxELEIpLmNhbGwodGhpcyxlKX19fSx7a2V5OiJwcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLGsodGhpcyxqKV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isayh0aGlzLEYpXV19fSx7a2V5OiJnZXRJbml0aWFsVHJhbnNsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnRTY2FsZTtyZXR1cm5bLUUuX2ludGVybmFsUGFkZGluZyp0LC0oRS5faW50ZXJuYWxQYWRkaW5nK2sodGhpcyxqKSkqdF19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3AobShFLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5pc0F0dGFjaGVkVG9ET018fHRoaXMucGFyZW50LmFkZCh0aGlzKSl9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpfHwodGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCExKSx0aGlzLnBhcmVudC51cGRhdGVUb29sYmFyKGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHAobShFLnByb3RvdHlwZSksImVuYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QucmVtb3ZlKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwLHRoaXMuZGl2LmRyYWdnYWJsZT0hMSx0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGsodGhpcyxPKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGsodGhpcyxUKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsayh0aGlzLFApKSx0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsayh0aGlzLEMpKSl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0luRWRpdE1vZGUoKSYmKHRoaXMucGFyZW50LnNldEVkaXRpbmdTdGF0ZSghMCkscChtKEUucHJvdG90eXBlKSwiZGlzYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSExLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixrKHRoaXMsUikpLHRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixrKHRoaXMsTykpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixrKHRoaXMsVCkpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGsodGhpcyxQKSksdGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGsodGhpcyxDKSksdGhpcy5kaXYuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmlzRWRpdGluZz0hMSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7cChtKEUucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHQudGFyZ2V0IT09dGhpcy5lZGl0b3JEaXYmJnRoaXMuZWRpdG9yRGl2LmZvY3VzKCl9fSx7a2V5OiJvbmNlQWRkZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53aWR0aHx8KHRoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpKX19LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZWRpdG9yRGl2fHwiIj09PXRoaXMuZWRpdG9yRGl2LmlubmVyVGV4dC50cmltKCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikscChtKEUucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiY29tbWl0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNJbkVkaXRNb2RlKCkmJihwKG0oRS5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksayh0aGlzLEkpfHwoeCh0aGlzLEksITApLHRoaXMucGFyZW50LmFkZFVuZG9hYmxlRWRpdG9yKHRoaXMpKSx0aGlzLmRpc2FibGVFZGl0TW9kZSgpLHgodGhpcyxNLFModGhpcyxOLHEpLmNhbGwodGhpcykudHJpbUVuZCgpKSxTKHRoaXMsVSxIKS5jYWxsKHRoaXMpKX19LHtrZXk6InNob3VsZEdldEtleWJvYXJkRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5FZGl0TW9kZSgpfX0se2tleToiZGJsY2xpY2siLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpfX0se2tleToia2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLmRpdiYmIkVudGVyIj09PXQua2V5JiYodGhpcy5lbmFibGVFZGl0TW9kZSgpLHRoaXMuZWRpdG9yRGl2LmZvY3VzKCkpfX0se2tleToiZWRpdG9yRGl2S2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7RS5fa2V5Ym9hcmRNYW5hZ2VyLmV4ZWModGhpcyx0KX19LHtrZXk6ImVkaXRvckRpdkZvY3VzIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmlzRWRpdGluZz0hMH19LHtrZXk6ImVkaXRvckRpdkJsdXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuaXNFZGl0aW5nPSExfX0se2tleToiZWRpdG9yRGl2SW5wdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJmcmVlVGV4dEVkaXRpbmciLHRoaXMuaXNFbXB0eSgpKX19LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsImNvbW1lbnQiKSx0aGlzLmVkaXRvckRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIil9fSx7a2V5OiJlbmFibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsInRleHRib3giKSx0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIiwhMCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkscChtKEUucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuZWRpdG9yRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWRpdG9yRGl2LmNsYXNzTmFtZT0iaW50ZXJuYWwiLHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiaWQiLGsodGhpcyxSKSksdGhpcy5lbmFibGVFZGl0aW5nKCksRS5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfZnJlZV90ZXh0Ml9hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KX0pKSxFLl9sMTBuUHJvbWlzZS5nZXQoImZyZWVfdGV4dDJfZGVmYXVsdF9jb250ZW50IikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJkZWZhdWx0LWNvbnRlbnQiLHQpfSkpLHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZT0hMDt2YXIgbj10aGlzLmVkaXRvckRpdi5zdHlsZTtpZihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGsodGhpcyxqKSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpLG4uY29sb3I9ayh0aGlzLEYpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLmVkaXRvckRpdiksdGhpcy5vdmVybGF5RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJvdmVybGF5IiwiZW5hYmxlZCIpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLm92ZXJsYXlEaXYpLCgwLGEuYmluZEV2ZW50cykodGhpcyx0aGlzLmRpdixbImRibGNsaWNrIiwia2V5ZG93biJdKSx0aGlzLndpZHRoKXt2YXIgaT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWlbMF0sdT1pWzFdO3RoaXMuc2V0QXQodCpvLGUqdSx0aGlzLndpZHRoKm8sdGhpcy5oZWlnaHQqdSk7dmFyIGMsaD1zKGsodGhpcyxNKS5zcGxpdCgiXG4iKSk7dHJ5e2ZvcihoLnMoKTshKGM9aC5uKCkpLmRvbmU7KXt2YXIgZj1jLnZhbHVlLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5hcHBlbmQoZj9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKSx0aGlzLmVkaXRvckRpdi5hcHBlbmQoZCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGU9ITF9ZWxzZSB0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwO3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvckRpdn19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD1FLl9pbnRlcm5hbFBhZGRpbmcqdGhpcy5wYXJlbnRTY2FsZSxlPXRoaXMuZ2V0UmVjdCh0LHQpLHI9by5Bbm5vdGF0aW9uRWRpdG9yLl9jb2xvck1hbmFnZXIuY29udmVydCh0aGlzLmlzQXR0YWNoZWRUb0RPTT9nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWRpdG9yRGl2KS5jb2xvcjprKHRoaXMsRikpO3JldHVybnthbm5vdGF0aW9uVHlwZTppLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhULGNvbG9yOnIsZm9udFNpemU6ayh0aGlzLGopLHZhbHVlOmsodGhpcyxNKSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscmVjdDplLHJvdGF0aW9uOnRoaXMucm90YXRpb259fX1dKSYmZChlLnByb3RvdHlwZSxyKSxoJiZkKGUsaCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksRX0oby5Bbm5vdGF0aW9uRWRpdG9yKTtmdW5jdGlvbiBHKHQpe3ZhciBlPXRoaXMscj1mdW5jdGlvbih0KXtlLmVkaXRvckRpdi5zdHlsZS5mb250U2l6ZT0iY2FsYygiLmNvbmNhdCh0LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIiksZS50cmFuc2xhdGUoMCwtKHQtayhlLGopKSplLnBhcmVudFNjYWxlKSx4KGUsaix0KSxTKGUsVSxIKS5jYWxsKGUpfSxuPWsodGhpcyxqKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyKHQpfSx1bmRvOmZ1bmN0aW9uKCl7cihuKX0sbXVzdEV4ZWM6ITAsdHlwZTppLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIEIodCl7dmFyIGU9dGhpcyxyPWsodGhpcyxGKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXt4KGUsRixlLmVkaXRvckRpdi5zdHlsZS5jb2xvcj10KX0sdW5kbzpmdW5jdGlvbigpe3goZSxGLGUuZWRpdG9yRGl2LnN0eWxlLmNvbG9yPXIpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIHEoKXt2YXIgdD10aGlzLmVkaXRvckRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVkaXRvckRpdi5pbm5lclRleHQ7dmFyIGUscj1bXSxuPXModCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1lLnZhbHVlO3IucHVzaChpLmlubmVyVGV4dC5yZXBsYWNlKC9cclxuP3xcbi8sIiIpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIuam9pbigiXG4iKX1mdW5jdGlvbiBIKCl7dmFyIHQsZT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxyPWVbMF0sbj1lWzFdO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXQ9dGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt2YXIgaT10aGlzLmN1cnJlbnRMYXllcixhPXRoaXMuZGl2LG89YS5zdHlsZS5kaXNwbGF5O2Euc3R5bGUuZGlzcGxheT0iaGlkZGVuIixpLmRpdi5hcHBlbmQodGhpcy5kaXYpLHQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhLnJlbW92ZSgpLGEuc3R5bGUuZGlzcGxheT1vfXRoaXMud2lkdGg9dC53aWR0aC9yLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0L259ZS5GcmVlVGV4dEVkaXRvcj1XLGIoVywiX2ZyZWVUZXh0RGVmYXVsdENvbnRlbnQiLCIiKSxiKFcsIl9sMTBuUHJvbWlzZSIsdm9pZCAwKSxiKFcsIl9pbnRlcm5hbFBhZGRpbmciLDApLGIoVywiX2RlZmF1bHRDb2xvciIsbnVsbCksYihXLCJfZGVmYXVsdEZvbnRTaXplIiwxMCksYihXLCJfa2V5Ym9hcmRNYW5hZ2VyIixuZXcgYS5LZXlib2FyZE1hbmFnZXIoW1tbImN0cmwrRW50ZXIiLCJtYWMrbWV0YStFbnRlciIsIkVzY2FwZSIsIm1hYytFc2NhcGUiXSxXLnByb3RvdHlwZS5jb21taXRPclJlbW92ZV1dKSksYihXLCJfdHlwZSIsImZyZWV0ZXh0Iil9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLklua0VkaXRvcj12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpdEN1cnZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5maXRDdXJ2ZX19KTt2YXIgaT1yKDEpLGE9cigxMzUpLG89cigxNTUpLHM9cigxMzYpO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWgodCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGYodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxoKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8aCh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaCh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZih0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2YodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGYodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP2QoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt3KHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpkKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEEobi5rZXkpLG4pfX1mdW5jdGlvbiB5KCl7cmV0dXJuIHk9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJm51bGwhPT0odD1iKHQpKTspO3JldHVybiB0fSh0LGUpO2lmKG4pe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKTtyZXR1cm4gaS5nZXQ/aS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/dDpyKTppLnZhbHVlfX0seS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbSh0LGUpfWZ1bmN0aW9uIGcodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGIodCl9ZnVuY3Rpb24gXyh0LGUpe1ModCxlKSxlLmFkZCh0KX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oZT1BKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIEEodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGsodCxlLHIpe1ModCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIFModCxlKXtpZihlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKHQhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgc3RhdGljIGFjY2VzcyBvZiB3cm9uZyBwcm92ZW5hbmNlIil9KHQsZSkscn1mdW5jdGlvbiBFKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LFQodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LFQodCxlLCJnZXQiKSl9ZnVuY3Rpb24gVCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBDKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfXZhciBPPTE2LEY9MTAwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha01hcCxEPW5ldyBXZWFrTWFwLE49bmV3IFdlYWtNYXAsVT1uZXcgV2Vha01hcCxXPW5ldyBXZWFrTWFwLEc9bmV3IFdlYWtNYXAsQj1uZXcgV2Vha01hcCxxPW5ldyBXZWFrTWFwLEg9bmV3IFdlYWtNYXAsej1uZXcgV2Vha01hcCxWPW5ldyBXZWFrU2V0LFg9bmV3IFdlYWtTZXQsWT1uZXcgV2Vha1NldCxLPW5ldyBXZWFrU2V0LEo9bmV3IFdlYWtTZXQsUT1uZXcgV2Vha1NldCwkPW5ldyBXZWFrU2V0LFo9bmV3IFdlYWtTZXQsdHQ9bmV3IFdlYWtTZXQsZXQ9bmV3IFdlYWtTZXQscnQ9bmV3IFdlYWtTZXQsbnQ9bmV3IFdlYWtTZXQsaXQ9bmV3IFdlYWtTZXQsYXQ9bmV3IFdlYWtTZXQsb3Q9bmV3IFdlYWtTZXQsc3Q9bmV3IFdlYWtTZXQsbHQ9bmV3IFdlYWtTZXQsdXQ9bmV3IFdlYWtTZXQsY3Q9bmV3IFdlYWtTZXQsaHQ9bmV3IFdlYWtTZXQsZnQ9bmV3IFdlYWtTZXQsZHQ9bmV3IFdlYWtTZXQscHQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJm0odCxlKX0oZCx0KTt2YXIgZSxyLG8scyxoLGY9KHM9ZCxoPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciB0LGU9YihzKTtpZihoKXt2YXIgcj1iKHRoaXMpLmNvbnN0cnVjdG9yO3Q9UmVmbGVjdC5jb25zdHJ1Y3QoZSxhcmd1bWVudHMscil9ZWxzZSB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW4oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGcodCl9KHRoaXMsdCl9KTtmdW5jdGlvbiBkKHQpe3ZhciBlO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGQpLF8oZyhlPWYuY2FsbCh0aGlzLHAocCh7fSx0KSx7fSx7bmFtZToiaW5rRWRpdG9yIn0pKSksZHQpLF8oZyhlKSxmdCksXyhnKGUpLGh0KSxfKGcoZSksY3QpLF8oZyhlKSx1dCksXyhnKGUpLGx0KSxfKGcoZSksc3QpLF8oZyhlKSxvdCksXyhnKGUpLGF0KSxfKGcoZSksaXQpLF8oZyhlKSxudCksXyhnKGUpLHJ0KSxfKGcoZSksZXQpLF8oZyhlKSx0dCksXyhnKGUpLFopLF8oZyhlKSwkKSxfKGcoZSksUSksXyhnKGUpLEopLF8oZyhlKSxLKSxfKGcoZSksWSksXyhnKGUpLFgpLF8oZyhlKSxWKSxrKGcoZSksTSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSxSLHt3cml0YWJsZTohMCx2YWx1ZTowfSksayhnKGUpLEkse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVybW92ZS5iaW5kKGcoZSkpfSksayhnKGUpLEwse3dyaXRhYmxlOiEwLHZhbHVlOmUuY2FudmFzUG9pbnRlcmxlYXZlLmJpbmQoZyhlKSl9KSxrKGcoZSksRCx7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVydXAuYmluZChnKGUpKX0pLGsoZyhlKSxOLHt3cml0YWJsZTohMCx2YWx1ZTplLmNhbnZhc1BvaW50ZXJkb3duLmJpbmQoZyhlKSl9KSxrKGcoZSksVSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksVyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksRyx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGsoZyhlKSxCLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksayhnKGUpLHEse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksSCx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSx6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZS5jb2xvcj10LmNvbG9yfHxudWxsLGUudGhpY2tuZXNzPXQudGhpY2tuZXNzfHxudWxsLGUub3BhY2l0eT10Lm9wYWNpdHl8fG51bGwsZS5wYXRocz1bXSxlLmJlemllclBhdGgyRD1bXSxlLmN1cnJlbnRQYXRoPVtdLGUuc2NhbGVGYWN0b3I9MSxlLnRyYW5zbGF0aW9uWD1lLnRyYW5zbGF0aW9uWT0wLGUueD0wLGUueT0wLGV9cmV0dXJuIGU9ZCxvPVt7a2V5OiJpbml0aWFsaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9sMTBuUHJvbWlzZT1uZXcgTWFwKFsiZWRpdG9yX2lua19jYW52YXNfYXJpYV9sYWJlbCIsImVkaXRvcl9pbmsyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSl9fSx7a2V5OiJ1cGRhdGVEZWZhdWx0UGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUzpkLl9kZWZhdWx0VGhpY2tuZXNzPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUjpkLl9kZWZhdWx0Q29sb3I9ZTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6ZC5fZGVmYXVsdE9wYWNpdHk9ZS8xMDB9fX0se2tleToiZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1MsZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCpkLl9kZWZhdWx0T3BhY2l0eSldXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG49eShiKGQpLCJkZXNlcmlhbGl6ZSIsdGhpcykuY2FsbCh0aGlzLHQsZSxyKTtuLnRoaWNrbmVzcz10LnRoaWNrbmVzcyxuLmNvbG9yPWkuVXRpbC5tYWtlSGV4Q29sb3IuYXBwbHkoaS5VdGlsLHUodC5jb2xvcikpLG4ub3BhY2l0eT10Lm9wYWNpdHk7dmFyIGE9YyhuLnBhZ2VEaW1lbnNpb25zLDIpLG89YVswXSxzPWFbMV0saD1uLndpZHRoKm8sZj1uLmhlaWdodCpzLHA9bi5wYXJlbnRTY2FsZSx2PXQudGhpY2tuZXNzLzI7RShuLE0saC9mKSxFKG4sVSwhMCksRShuLHEsTWF0aC5yb3VuZChoKSksRShuLEgsTWF0aC5yb3VuZChmKSk7dmFyIG0sZz1sKHQucGF0aHMpO3RyeXtmb3IoZy5zKCk7IShtPWcubigpKS5kb25lOyl7dmFyIF89bS52YWx1ZS5iZXppZXIsdz1bXTtuLnBhdGhzLnB1c2godyk7Zm9yKHZhciBBPXAqKF9bMF0tdiksaz1wKihmLV9bMV0tdiksUz0yLFA9Xy5sZW5ndGg7UzxQO1MrPTYpe3ZhciBUPXAqKF9bU10tdiksRj1wKihmLV9bUysxXS12KSxqPXAqKF9bUysyXS12KSxMPXAqKGYtX1tTKzNdLXYpLEQ9cCooX1tTKzRdLXYpLE49cCooZi1fW1MrNV0tdik7dy5wdXNoKFtbQSxrXSxbVCxGXSxbaixMXSxbRCxOXV0pLEE9RCxrPU59dmFyIFc9eCh0aGlzLGQsT3QpLmNhbGwodGhpcyx3KTtuLmJlemllclBhdGgyRC5wdXNoKFcpfX1jYXRjaCh0KXtnLmUodCl9ZmluYWxseXtnLmYoKX12YXIgRz1DKG4sY3QsSXQpLmNhbGwobik7cmV0dXJuIEUobixJLE1hdGgubWF4KE8sR1syXS1HWzBdKSksRShuLFIsTWF0aC5tYXgoTyxHWzNdLUdbMV0pKSxDKG4sYXQsVHQpLmNhbGwobixoLGYpLG59fV0sKHI9W3trZXk6InVwZGF0ZVBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6Qyh0aGlzLFYsdnQpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SOkModGhpcyxYLHl0KS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19PUEFDSVRZOkModGhpcyxZLG10KS5jYWxsKHRoaXMsZSl9fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm5bW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyx0aGlzLnRoaWNrbmVzc3x8ZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLHRoaXMuY29sb3J8fGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCoobnVsbCE9PSh0PXRoaXMub3BhY2l0eSkmJnZvaWQgMCE9PXQ/dDpkLl9kZWZhdWx0T3BhY2l0eSkpXV19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3koYihkLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5jYW52YXN8fChDKHRoaXMscnQseHQpLmNhbGwodGhpcyksQyh0aGlzLG50LEV0KS5jYWxsKHRoaXMpKSx0aGlzLmlzQXR0YWNoZWRUb0RPTXx8KHRoaXMucGFyZW50LmFkZCh0aGlzKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcykpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuY2FudmFzJiYodGhpcy5pc0VtcHR5KCl8fHRoaXMuY29tbWl0KCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PTAsdGhpcy5jYW52YXMucmVtb3ZlKCksdGhpcy5jYW52YXM9bnVsbCxQKHRoaXMsQikuZGlzY29ubmVjdCgpLEUodGhpcyxCLG51bGwpLHkoYihkLnByb3RvdHlwZSksInJlbW92ZSIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJzZXRQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpeyF0aGlzLnBhcmVudCYmdD90aGlzLl91aU1hbmFnZXIucmVtb3ZlU2hvdWxkUmVzY2FsZSh0aGlzKTp0aGlzLnBhcmVudCYmbnVsbD09PXQmJnRoaXMuX3VpTWFuYWdlci5hZGRTaG91bGRSZXNjYWxlKHRoaXMpLHkoYihkLnByb3RvdHlwZSksInNldFBhcmVudCIsdGhpcykuY2FsbCh0aGlzLHQpfX0se2tleToib25TY2FsZUNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV0sbj10aGlzLndpZHRoKmUsaT10aGlzLmhlaWdodCpyO3RoaXMuc2V0RGltZW5zaW9ucyhuLGkpfX0se2tleToiZW5hYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7UCh0aGlzLFUpfHxudWxsPT09dGhpcy5jYW52YXN8fCh5KGIoZC5wcm90b3R5cGUpLCJlbmFibGVFZGl0TW9kZSIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6ImRpc2FibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpJiZudWxsIT09dGhpcy5jYW52YXMmJih5KGIoZC5wcm90b3R5cGUpLCJkaXNhYmxlRWRpdE1vZGUiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5kaXYuZHJhZ2dhYmxlPSF0aGlzLmlzRW1wdHkoKSx0aGlzLmRpdi5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0aW5nIiksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6Im9uY2VBZGRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpdi5kcmFnZ2FibGU9IXRoaXMuaXNFbXB0eSgpfX0se2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMucGF0aHMubGVuZ3RofHwxPT09dGhpcy5wYXRocy5sZW5ndGgmJjA9PT10aGlzLnBhdGhzWzBdLmxlbmd0aH19LHtrZXk6ImNvbW1pdCIsdmFsdWU6ZnVuY3Rpb24oKXtQKHRoaXMsVSl8fCh5KGIoZC5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5kaXNhYmxlRWRpdE1vZGUoKSx0aGlzLnNldEluRm9yZWdyb3VuZCgpLEUodGhpcyxVLCEwKSx0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJkaXNhYmxlZCIpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzLCEwKSx0aGlzLnBhcmVudC5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMCksdGhpcy5wYXJlbnQubW92ZUVkaXRvckluRE9NKHRoaXMpLHRoaXMuZGl2LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7eShiKGQucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHRoaXMuZW5hYmxlRWRpdE1vZGUoKX19LHtrZXk6ImNhbnZhc1BvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJiFQKHRoaXMsVSkmJih0aGlzLnNldEluRm9yZWdyb3VuZCgpLCJtb3VzZSIhPT10LnR5cGUmJnRoaXMuZGl2LmZvY3VzKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksQyh0aGlzLFEsX3QpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybW92ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSxDKHRoaXMsJCx3dCkuY2FsbCh0aGlzLHQub2Zmc2V0WCx0Lm9mZnNldFkpfX0se2tleToiY2FudmFzUG9pbnRlcnVwIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJjAhPT10aGlzLmN1cnJlbnRQYXRoLmxlbmd0aCYmKHQuc3RvcFByb3BhZ2F0aW9uKCksQyh0aGlzLGV0LFN0KS5jYWxsKHRoaXMsdCksdGhpcy5zZXRJbkJhY2tncm91bmQoKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybGVhdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe0ModGhpcyxldCxTdCkuY2FsbCh0aGlzLHQpLHRoaXMuc2V0SW5CYWNrZ3JvdW5kKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkseShiKGQucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLGQuX2wxMG5Qcm9taXNlLmdldCgiZWRpdG9yX2luazJfYXJpYV9sYWJlbCIpLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBudWxsPT09KGU9ci5kaXYpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCl9KSk7dmFyIG49YyhDKHRoaXMsSyxndCkuY2FsbCh0aGlzKSw0KSxpPW5bMF0sYT1uWzFdLG89blsyXSxzPW5bM107aWYodGhpcy5zZXRBdChpLGEsMCwwKSx0aGlzLnNldERpbXMobyxzKSxDKHRoaXMscnQseHQpLmNhbGwodGhpcyksdGhpcy53aWR0aCl7dmFyIGw9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMiksdT1sWzBdLGg9bFsxXTt0aGlzLnNldEF0KHQqdSxlKmgsdGhpcy53aWR0aCp1LHRoaXMuaGVpZ2h0KmgpLEUodGhpcyxXLCEwKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksdGhpcy5zZXREaW1zKHRoaXMud2lkdGgqdSx0aGlzLmhlaWdodCpoKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksQyh0aGlzLGR0LER0KS5jYWxsKHRoaXMpLHRoaXMuZGl2LmNsYXNzTGlzdC5hZGQoImRpc2FibGVkIil9ZWxzZSB0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIiksdGhpcy5lbmFibGVFZGl0TW9kZSgpO3JldHVybiBDKHRoaXMsbnQsRXQpLmNhbGwodGhpcyksdGhpcy5kaXZ9fSx7a2V5OiJzZXREaW1lbnNpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucm91bmQodCksbj1NYXRoLnJvdW5kKGUpO2lmKFAodGhpcyxxKSE9PXJ8fFAodGhpcyxIKSE9PW4pe0UodGhpcyxxLHIpLEUodGhpcyxILG4pLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsUCh0aGlzLE0pJiZNYXRoLmFicyhQKHRoaXMsTSktdC9lKT4uMDEmJihlPU1hdGguY2VpbCh0L1AodGhpcyxNKSksdGhpcy5zZXREaW1zKHQsZSkpO3ZhciBpPWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxvPWlbMV07dGhpcy53aWR0aD10L2EsdGhpcy5oZWlnaHQ9ZS9vLFAodGhpcyxVKSYmQyh0aGlzLGF0LFR0KS5jYWxsKHRoaXMsdCxlKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmdldFJlY3QoMCwwKSxlPXRoaXMucm90YXRpb24lMTgwPT0wP3RbM10tdFsxXTp0WzJdLXRbMF0scj1hLkFubm90YXRpb25FZGl0b3IuX2NvbG9yTWFuYWdlci5jb252ZXJ0KHRoaXMuY3R4LnN0cm9rZVN0eWxlKTtyZXR1cm57YW5ub3RhdGlvblR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkssY29sb3I6cix0aGlja25lc3M6dGhpcy50aGlja25lc3Msb3BhY2l0eTp0aGlzLm9wYWNpdHkscGF0aHM6Qyh0aGlzLHN0LEZ0KS5jYWxsKHRoaXMsdGhpcy5zY2FsZUZhY3Rvci90aGlzLnBhcmVudFNjYWxlLHRoaXMudHJhbnNsYXRpb25YLHRoaXMudHJhbnNsYXRpb25ZLGUpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxyZWN0OnQscm90YXRpb246dGhpcy5yb3RhdGlvbn19fV0pJiZ2KGUucHJvdG90eXBlLHIpLG8mJnYoZSxvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxkfShhLkFubm90YXRpb25FZGl0b3IpO2Z1bmN0aW9uIHZ0KHQpe3ZhciBlPXRoaXMscj10aGlzLnRoaWNrbmVzczt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLnRoaWNrbmVzcz10LEMoZSxmdCxMdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UudGhpY2tuZXNzPXIsQyhlLGZ0LEx0KS5jYWxsKGUpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24geXQodCl7dmFyIGU9dGhpcyxyPXRoaXMuY29sb3I7dGhpcy5hZGRDb21tYW5kcyh7Y21kOmZ1bmN0aW9uKCl7ZS5jb2xvcj10LEMoZSx0dCxrdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UuY29sb3I9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIG10KHQpe3ZhciBlPXRoaXM7dC89MTAwO3ZhciByPXRoaXMub3BhY2l0eTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLm9wYWNpdHk9dCxDKGUsdHQsa3QpLmNhbGwoZSl9LHVuZG86ZnVuY3Rpb24oKXtlLm9wYWNpdHk9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24gZ3QoKXt2YXIgdD10aGlzLnBhcmVudFJvdGF0aW9uLGU9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscj1lWzBdLG49ZVsxXTtzd2l0Y2godCl7Y2FzZSA5MDpyZXR1cm5bMCxuLG4scl07Y2FzZSAxODA6cmV0dXJuW3IsbixyLG5dO2Nhc2UgMjcwOnJldHVybltyLDAsbixyXTtkZWZhdWx0OnJldHVyblswLDAscixuXX19ZnVuY3Rpb24gYnQoKXt2YXIgdD10aGlzLmN0eCxlPXRoaXMuY29sb3Iscj10aGlzLm9wYWNpdHksbj10aGlzLnRoaWNrbmVzcyxpPXRoaXMucGFyZW50U2NhbGUsYT10aGlzLnNjYWxlRmFjdG9yO3QubGluZVdpZHRoPW4qaS9hLHQubGluZUNhcD0icm91bmQiLHQubGluZUpvaW49InJvdW5kIix0Lm1pdGVyTGltaXQ9MTAsdC5zdHJva2VTdHlsZT0iIi5jb25jYXQoZSkuY29uY2F0KCgwLHMub3BhY2l0eVRvSGV4KShyKSl9ZnVuY3Rpb24gX3QodCxlKXt2YXIgcixuPXRoaXM7dGhpcy5pc0VkaXRpbmc9ITAsUCh0aGlzLFcpfHwoRSh0aGlzLFcsITApLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSx0aGlzLnRoaWNrbmVzc3x8KHRoaXMudGhpY2tuZXNzPXB0Ll9kZWZhdWx0VGhpY2tuZXNzKSx0aGlzLmNvbG9yfHwodGhpcy5jb2xvcj1wdC5fZGVmYXVsdENvbG9yfHxhLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLG51bGwhPT0ocj10aGlzLm9wYWNpdHkpJiZ2b2lkIDAhPT1yfHwodGhpcy5vcGFjaXR5PXB0Ll9kZWZhdWx0T3BhY2l0eSkpLHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsbnVsbCksQyh0aGlzLEosYnQpLmNhbGwodGhpcyksdGhpcy5jdHguYmVnaW5QYXRoKCksdGhpcy5jdHgubW92ZVRvKHQsZSksRSh0aGlzLHosKGZ1bmN0aW9uKCl7dmFyIHQ7UChuLHopJiYoUChuLEcpJiYobi5pc0VtcHR5KCk/KG4uY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbi5jdHguY2xlYXJSZWN0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpKTpDKG4sdHQsa3QpLmNhbGwobiksKHQ9bi5jdHgpLmxpbmVUby5hcHBseSh0LHUoUChuLEcpKSksRShuLEcsbnVsbCksbi5jdHguc3Ryb2tlKCkpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUChuLHopKSl9KSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShQKHRoaXMseikpfWZ1bmN0aW9uIHd0KHQsZSl7dmFyIHI9Yyh0aGlzLmN1cnJlbnRQYXRoLmF0KC0xKSwyKSxuPXJbMF0saT1yWzFdO3Q9PT1uJiZlPT09aXx8KHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsW3QsZV0pKX1mdW5jdGlvbiBBdCh0LGUpe3ZhciByPXRoaXM7dGhpcy5jdHguY2xvc2VQYXRoKCksRSh0aGlzLHosbnVsbCksdD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuY2FudmFzLndpZHRoKSxlPU1hdGgubWluKE1hdGgubWF4KGUsMCksdGhpcy5jYW52YXMuaGVpZ2h0KTt2YXIgbixpPWModGhpcy5jdXJyZW50UGF0aC5hdCgtMSksMiksYT1pWzBdLHM9aVsxXTtpZih0PT09YSYmZT09PXN8fHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksMSE9PXRoaXMuY3VycmVudFBhdGgubGVuZ3RoKW49KDAsby5maXRDdXJ2ZSkodGhpcy5jdXJyZW50UGF0aCwzMCxudWxsKTtlbHNle3ZhciBsPVt0LGVdO249W1tsLGwuc2xpY2UoKSxsLnNsaWNlKCksbF1dfXZhciB1PXgocHQscHQsT3QpLmNhbGwocHQsbik7dGhpcy5jdXJyZW50UGF0aC5sZW5ndGg9MCx0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyLnBhdGhzLnB1c2gobiksci5iZXppZXJQYXRoMkQucHVzaCh1KSxyLnJlYnVpbGQoKX0sdW5kbzpmdW5jdGlvbigpe3IucGF0aHMucG9wKCksci5iZXppZXJQYXRoMkQucG9wKCksMD09PXIucGF0aHMubGVuZ3RoP3IucmVtb3ZlKCk6KHIuY2FudmFzfHwoQyhyLHJ0LHh0KS5jYWxsKHIpLEMocixudCxFdCkuY2FsbChyKSksQyhyLGZ0LEx0KS5jYWxsKHIpKX0sbXVzdEV4ZWM6ITB9KX1mdW5jdGlvbiBrdCgpe2lmKHRoaXMuaXNFbXB0eSgpKUModGhpcyxvdCxDdCkuY2FsbCh0aGlzKTtlbHNle0ModGhpcyxKLGJ0KS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuY2FudmFzLGU9dGhpcy5jdHg7ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGUuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyk7dmFyIHIsbj1sKHRoaXMuYmV6aWVyUGF0aDJEKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zdHJva2UoaSl9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfX19ZnVuY3Rpb24gU3QodCl7Qyh0aGlzLFosQXQpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSx0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksdGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9ZnVuY3Rpb24geHQoKXt2YXIgdD10aGlzO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD0wLHRoaXMuY2FudmFzLmNsYXNzTmFtZT0iaW5rRWRpdG9yQ2FudmFzIixwdC5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfaW5rX2NhbnZhc19hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj10LmNhbnZhcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX0pKSx0aGlzLmRpdi5hcHBlbmQodGhpcy5jYW52YXMpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIil9ZnVuY3Rpb24gRXQoKXt2YXIgdD10aGlzLGU9bnVsbDtFKHRoaXMsQixuZXcgUmVzaXplT2JzZXJ2ZXIoKGZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uY29udGVudFJlY3Q7bi53aWR0aCYmbi5oZWlnaHQmJihudWxsIT09ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmZpeERpbXMoKSxlPW51bGx9KSxGKSx0LnNldERpbWVuc2lvbnMobi53aWR0aCxuLmhlaWdodCkpfSkpKSxQKHRoaXMsQikub2JzZXJ2ZSh0aGlzLmRpdil9ZnVuY3Rpb24gUHQoKXtpZihQKHRoaXMsVykpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV07dGhpcy5jYW52YXMud2lkdGg9TWF0aC5jZWlsKHRoaXMud2lkdGgqZSksdGhpcy5jYW52YXMuaGVpZ2h0PU1hdGguY2VpbCh0aGlzLmhlaWdodCpyKSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyl9fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpLG49KHQtcikvUCh0aGlzLEkpLGk9KGUtcikvUCh0aGlzLFIpO3RoaXMuc2NhbGVGYWN0b3I9TWF0aC5taW4obixpKX1mdW5jdGlvbiBDdCgpe3ZhciB0PUModGhpcyxodCxqdCkuY2FsbCh0aGlzKS8yO3RoaXMuY3R4LnNldFRyYW5zZm9ybSh0aGlzLnNjYWxlRmFjdG9yLDAsMCx0aGlzLnNjYWxlRmFjdG9yLHRoaXMudHJhbnNsYXRpb25YKnRoaXMuc2NhbGVGYWN0b3IrdCx0aGlzLnRyYW5zbGF0aW9uWSp0aGlzLnNjYWxlRmFjdG9yK3QpfWZ1bmN0aW9uIE90KHQpe2Zvcih2YXIgZT1uZXcgUGF0aDJELHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe3ZhciBpPWModFtyXSw0KSxhPWlbMF0sbz1pWzFdLHM9aVsyXSxsPWlbM107MD09PXImJmUubW92ZVRvLmFwcGx5KGUsdShhKSksZS5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBGdCh0LGUscixuKXt2YXIgaSxhLG8scz1bXSx1PXRoaXMudGhpY2tuZXNzLzIsaD1sKHRoaXMucGF0aHMpO3RyeXtmb3IoaC5zKCk7IShvPWgubigpKS5kb25lOyl7dmFyIGY9by52YWx1ZTtpPVtdLGE9W107Zm9yKHZhciBkPTAscD1mLmxlbmd0aDtkPHA7ZCsrKXt2YXIgdj1jKGZbZF0sNCkseT12WzBdLG09dlsxXSxnPXZbMl0sYj12WzNdLF89dCooeVswXStlKSt1LHc9bi10Kih5WzFdK3IpLXUsQT10KihtWzBdK2UpK3Usaz1uLXQqKG1bMV0rciktdSxTPXQqKGdbMF0rZSkrdSx4PW4tdCooZ1sxXStyKS11LEU9dCooYlswXStlKSt1LFA9bi10KihiWzFdK3IpLXU7MD09PWQmJihpLnB1c2goXyx3KSxhLnB1c2goXyx3KSksaS5wdXNoKEEsayxTLHgsRSxQKSxDKHRoaXMsbHQsTXQpLmNhbGwodGhpcyxfLHcsQSxrLFMseCxFLFAsNCxhKX1zLnB1c2goe2JlemllcjppLHBvaW50czphfSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiBzfWZ1bmN0aW9uIE10KHQsZSxyLG4saSxhLG8scyxsLHUpe2lmKEModGhpcyx1dCxSdCkuY2FsbCh0aGlzLHQsZSxyLG4saSxhLG8scykpdS5wdXNoKG8scyk7ZWxzZXtmb3IodmFyIGM9MTtjPGwtMTtjKyspe3ZhciBoPWMvbCxmPTEtaCxkPWgqdCtmKnIscD1oKmUrZipuLHY9aCpyK2YqaSx5PWgqbitmKmE7ZD1oKihkPWgqZCtmKnYpK2YqKHY9aCp2K2YqKGgqaStmKm8pKSxwPWgqKHA9aCpwK2YqeSkrZiooeT1oKnkrZiooaCphK2YqcykpLHUucHVzaChkLHApfXUucHVzaChvLHMpfX1mdW5jdGlvbiBSdCh0LGUscixuLGksYSxvLHMpe3ZhciBsPU1hdGgucG93KDMqci0yKnQtbywyKSx1PU1hdGgucG93KDMqbi0yKmUtcywyKSxjPU1hdGgucG93KDMqaS10LTIqbywyKSxoPU1hdGgucG93KDMqYS1lLTIqcywyKTtyZXR1cm4gTWF0aC5tYXgobCxjKStNYXRoLm1heCh1LGgpPD0xMH1mdW5jdGlvbiBJdCgpe3ZhciB0LGU9MS8wLHI9LTEvMCxuPTEvMCxhPS0xLzAsbz1sKHRoaXMucGF0aHMpO3RyeXtmb3Ioby5zKCk7ISh0PW8ubigpKS5kb25lOyl7dmFyIHMsaD1sKHQudmFsdWUpO3RyeXtmb3IoaC5zKCk7IShzPWgubigpKS5kb25lOyl7dmFyIGY9YyhzLnZhbHVlLDQpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWkuVXRpbC5iZXppZXJCb3VuZGluZ0JveC5hcHBseShpLlV0aWwsdShkKS5jb25jYXQodShwKSx1KHYpLHUoeSkpKTtlPU1hdGgubWluKGUsbVswXSksbj1NYXRoLm1pbihuLG1bMV0pLHI9TWF0aC5tYXgocixtWzJdKSxhPU1hdGgubWF4KGEsbVszXSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9cmV0dXJuW2UsbixyLGFdfWZ1bmN0aW9uIGp0KCl7cmV0dXJuIFAodGhpcyxVKT9NYXRoLmNlaWwodGhpcy50aGlja25lc3MqdGhpcy5wYXJlbnRTY2FsZSk6MH1mdW5jdGlvbiBMdCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuaXNFbXB0eSgpKWlmKFAodGhpcyxVKSl7dmFyIGU9Qyh0aGlzLGN0LEl0KS5jYWxsKHRoaXMpLHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpO0UodGhpcyxJLE1hdGgubWF4KE8sZVsyXS1lWzBdKSksRSh0aGlzLFIsTWF0aC5tYXgoTyxlWzNdLWVbMV0pKTt2YXIgbj1NYXRoLmNlaWwocitQKHRoaXMsSSkqdGhpcy5zY2FsZUZhY3RvciksaT1NYXRoLmNlaWwocitQKHRoaXMsUikqdGhpcy5zY2FsZUZhY3RvciksYT1jKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWFbMF0scz1hWzFdO3RoaXMud2lkdGg9bi9vLHRoaXMuaGVpZ2h0PWkvcyxFKHRoaXMsTSxuL2kpLEModGhpcyxkdCxEdCkuY2FsbCh0aGlzKTt2YXIgbD10aGlzLnRyYW5zbGF0aW9uWCx1PXRoaXMudHJhbnNsYXRpb25ZO3RoaXMudHJhbnNsYXRpb25YPS1lWzBdLHRoaXMudHJhbnNsYXRpb25ZPS1lWzFdLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksRSh0aGlzLHEsbiksRSh0aGlzLEgsaSksdGhpcy5zZXREaW1zKG4saSk7dmFyIGg9dD9yL3RoaXMuc2NhbGVGYWN0b3IvMjowO3RoaXMudHJhbnNsYXRlKGwtdGhpcy50cmFuc2xhdGlvblgtaCx1LXRoaXMudHJhbnNsYXRpb25ZLWgpfWVsc2UgQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpfWZ1bmN0aW9uIER0KCl7dmFyIHQ9dGhpcy5kaXYuc3R5bGU7UCh0aGlzLE0pPj0xPyh0Lm1pbkhlaWdodD0iIi5jb25jYXQoTywicHgiKSx0Lm1pbldpZHRoPSIiLmNvbmNhdChNYXRoLnJvdW5kKFAodGhpcyxNKSpPKSwicHgiKSk6KHQubWluV2lkdGg9IiIuY29uY2F0KE8sInB4IiksdC5taW5IZWlnaHQ9IiIuY29uY2F0KE1hdGgucm91bmQoTy9QKHRoaXMsTSkpLCJweCIpKX1lLklua0VkaXRvcj1wdCx3KHB0LCJfZGVmYXVsdENvbG9yIixudWxsKSx3KHB0LCJfZGVmYXVsdE9wYWNpdHkiLDEpLHcocHQsIl9kZWZhdWx0VGhpY2tuZXNzIiwxKSx3KHB0LCJfbDEwblByb21pc2UiLHZvaWQgMCksdyhwdCwiX3R5cGUiLCJpbmsiKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmZpdEN1cnZlPXZvaWQgMDt2YXIgbj1yKDE1Nik7ZS5maXRDdXJ2ZT1ufSx0PT57ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZSh0KX1mdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbih0LHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQscil7aWYoIm9iamVjdCIhPT1lKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZShpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PWUoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlJiZuKHQucHJvdG90eXBlLGUpLHImJm4odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8byh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIG8scyxoLGYsZCxwLHksbSxnLGIsXyx3LEE7aWYoMj09PXQubGVuZ3RoKXJldHVybiB3PXYudmVjdG9yTGVuKHYuc3VidHJhY3QodFswXSx0WzFdKSkvMyxbbz1bdFswXSx2LmFkZEFycmF5cyh0WzBdLHYubXVsSXRlbXMoZSx3KSksdi5hZGRBcnJheXModFsxXSx2Lm11bEl0ZW1zKHIsdykpLHRbMV1dXTtzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZT1hP3Irdi52ZWN0b3JMZW4odi5zdWJ0cmFjdCh0LG4pKTowLGkucHVzaChlKSxyPWUsbj10fSkpLGk9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L3J9KSl9KHQpO3ZhciBrPWEodSh0LHMscyxlLHIsaSksMyk7aWYobz1rWzBdLGY9a1sxXSxwPWtbMl0sMD09PWZ8fGY8bilyZXR1cm5bb107aWYoZjxuKm4pZm9yKGg9cyxkPWYseT1wLEE9MDtBPDIwO0ErKyl7dmFyIFM9YSh1KHQscyxoPWMobyx0LGgpLGUscixpKSwzKTtpZihvPVNbMF0sZj1TWzFdLHA9U1syXSxmPG4pcmV0dXJuW29dO2lmKHA9PT15KXt2YXIgeD1mL2Q7aWYoeD4uOTk5OSYmeDwxLjAwMDEpYnJlYWt9ZD1mLHk9cH1pZihfPVtdLChtPXYuc3VidHJhY3QodFtwLTFdLHRbcCsxXSkpLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9KSkpe3ZhciBFPVstKG09di5zdWJ0cmFjdCh0W3AtMV0sdFtwXSkpWzFdLG1bMF1dO21bMF09RVswXSxtWzFdPUVbMV19cmV0dXJuIGc9di5ub3JtYWxpemUobSksYj12Lm11bEl0ZW1zKGcsLTEpLChfPV8uY29uY2F0KGwodC5zbGljZSgwLHArMSksZSxnLG4saSkpKS5jb25jYXQobCh0LnNsaWNlKHApLGIscixuLGkpKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxvKXt2YXIgcyxsLHU7cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sZyxiLF8sdyxBLGs9dFswXSxTPXRbdC5sZW5ndGgtMV07Zm9yKGk9W2ssbnVsbCxudWxsLFNdLGE9di56ZXJvc19YeDJ4MihlLmxlbmd0aCksZz0wLGI9ZS5sZW5ndGg7ZzxiO2crKylBPTEtKHc9ZVtnXSksKG89YVtnXSlbMF09di5tdWxJdGVtcyhyLDMqdyooQSpBKSksb1sxXT12Lm11bEl0ZW1zKG4sMypBKih3KncpKTtmb3Iocz1bWzAsMF0sWzAsMF1dLGw9WzAsMF0sZz0wLGI9dC5sZW5ndGg7ZzxiO2crKyl3PWVbZ10sbz1hW2ddLHNbMF1bMF0rPXYuZG90KG9bMF0sb1swXSksc1swXVsxXSs9di5kb3Qob1swXSxvWzFdKSxzWzFdWzBdKz12LmRvdChvWzBdLG9bMV0pLHNbMV1bMV0rPXYuZG90KG9bMV0sb1sxXSksXz12LnN1YnRyYWN0KHRbZ10seS5xKFtrLGssUyxTXSx3KSksbFswXSs9di5kb3Qob1swXSxfKSxsWzFdKz12LmRvdChvWzFdLF8pO3JldHVybiB1PXNbMF1bMF0qc1sxXVsxXS1zWzFdWzBdKnNbMF1bMV0sYz1zWzBdWzBdKmxbMV0tc1sxXVswXSpsWzBdLGg9bFswXSpzWzFdWzFdLWxbMV0qc1swXVsxXSxkPTA9PT11PzA6Yy91LChmPTA9PT11PzA6aC91KTwocD0xZS02KihtPXYudmVjdG9yTGVuKHYuc3VidHJhY3QoayxTKSkpKXx8ZDxwPyhpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLG0vMykpLGlbMl09di5hZGRBcnJheXMoUyx2Lm11bEl0ZW1zKG4sbS8zKSkpOihpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLGYpKSxpWzJdPXYuYWRkQXJyYXlzKFMsdi5tdWxJdGVtcyhuLGQpKSksaX0odCxyLG4saSk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCx1LGM7aT0wLGE9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKTt2YXIgaD1mKGUsMTApO2ZvcihzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXU9dFtzXSxjPWQoMCxyW3NdLGgsMTApLChuPShvPXYuc3VidHJhY3QoeS5xKGUsYyksdSkpWzBdKm9bMF0rb1sxXSpvWzFdKT5pJiYoaT1uLGE9cyk7cmV0dXJuW2ksYV19KHQscyxlKSxoPWEoYywyKTtyZXR1cm4gbD1oWzBdLHU9aFsxXSxvJiZvKHtiZXo6cyxwb2ludHM6dCxwYXJhbXM6ZSxtYXhFcnI6bCxtYXhQb2ludDp1fSksW3MsbCx1XX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGgodCxlW25dLHIpfSkpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXYuc3VidHJhY3QoeS5xKHQsciksZSksaT15LnFwcmltZSh0LHIpLGE9di5tdWxNYXRyaXgobixpKSxvPXYuc3VtKHYuc3F1YXJlSXRlbXMoaSkpKzIqdi5tdWxNYXRyaXgobix5LnFwcmltZXByaW1lKHQscikpO3JldHVybiAwPT09bz9yOnItYS9vfXZhciBmPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49WzBdLGk9dFswXSxhPTAsbz0xO288PWU7bysrKXI9eS5xKHQsby9lKSxhKz12LnZlY3Rvckxlbih2LnN1YnRyYWN0KHIsaSkpLG4ucHVzaChhKSxpPXI7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9hfSkpfTtmdW5jdGlvbiBkKHQsZSxyLG4pe2lmKGU8MClyZXR1cm4gMDtpZihlPjEpcmV0dXJuIDE7Zm9yKHZhciBpLGEsbyxzLGw9MTtsPD1uO2wrKylpZihlPD1yW2xdKXtvPShsLTEpL24sYT1sL24scz0oZS0oaT1yW2wtMV0pKS8ocltsXS1pKSooYS1vKStvO2JyZWFrfXJldHVybiBzfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdi5ub3JtYWxpemUodi5zdWJ0cmFjdCh0LGUpKX12YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OiJ6ZXJvc19YeDJ4MiIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QtLTspZS5wdXNoKFswLDBdKTtyZXR1cm4gZX19LHtrZXk6Im11bEl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX19LHtrZXk6Im11bE1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdCtyKmVbbl19KSwwKX19LHtrZXk6InN1YnRyYWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC1lW3JdfSkpfX0se2tleToiYWRkQXJyYXlzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlW3JdfSkpfX0se2tleToiYWRkSXRlbXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCtlfSkpfX0se2tleToic3VtIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKX19LHtrZXk6ImRvdCIsdmFsdWU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5tdWxNYXRyaXgoZSxyKX19LHtrZXk6InZlY3RvckxlbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguaHlwb3QuYXBwbHkoTWF0aCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBzKHQpfShlPXQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KGUpfHxvKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKTt2YXIgZX19LHtrZXk6ImRpdkl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQvZX0pKX19LHtrZXk6InNxdWFyZUl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KnR9KSl9fSx7a2V5OiJub3JtYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdkl0ZW1zKHQsdGhpcy52ZWN0b3JMZW4odCkpfX1dKSx0fSgpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleToicSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHRbMF0scipyKnIpLGk9di5tdWxJdGVtcyh0WzFdLDMqcipyKmUpLGE9di5tdWxJdGVtcyh0WzJdLDMqciplKmUpLG89di5tdWxJdGVtcyh0WzNdLGUqZSplKTtyZXR1cm4gdi5hZGRBcnJheXModi5hZGRBcnJheXMobixpKSx2LmFkZEFycmF5cyhhLG8pKX19LHtrZXk6InFwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsxXSx0WzBdKSwzKnIqciksaT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsyXSx0WzFdKSw2KnIqZSksYT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFszXSx0WzJdKSwzKmUqZSk7cmV0dXJuIHYuYWRkQXJyYXlzKHYuYWRkQXJyYXlzKG4saSksYSl9fSx7a2V5OiJxcHJpbWVwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5hZGRBcnJheXModi5tdWxJdGVtcyh2LmFkZEFycmF5cyh2LnN1YnRyYWN0KHRbMl0sdi5tdWxJdGVtcyh0WzFdLDIpKSx0WzBdKSw2KigxLWUpKSx2Lm11bEl0ZW1zKHYuYWRkQXJyYXlzKHYuc3VidHJhY3QodFszXSx2Lm11bEl0ZW1zKHRbMl0sMikpLHRbMV0pLDYqZSkpfX1dKSx0fSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7aWYodC5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheShlKXx8ZS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR9KSl8fGUubGVuZ3RoIT09dFswXS5sZW5ndGgpdGhyb3cgRXJyb3IoIkVhY2ggcG9pbnQgc2hvdWxkIGJlIGFuIGFycmF5IG9mIG51bWJlcnMuIEVhY2ggcG9pbnQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYW1vdW50IG9mIG51bWJlcnMuIil9KSksKHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUscil7cmV0dXJuIDA9PT1yfHwhZS5ldmVyeSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PXRbci0xXVtuXX0pKX0pKSkubGVuZ3RoPDIpcmV0dXJuW107dmFyIG49dC5sZW5ndGgsaT1wKHRbMV0sdFswXSksYT1wKHRbbi0yXSx0W24tMV0pO3JldHVybiBsKHQsaSxhLGUscil9LHQuZXhwb3J0cy5maXRDdWJpYz1sLHQuZXhwb3J0cy5jcmVhdGVUYW5nZW50PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uTGF5ZXI9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDEzNCksbz1yKDE1OCkscz1yKDE1OSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX0odCxlKSxyfWZ1bmN0aW9uIHUoKXtyZXR1cm4gdT0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PXYodCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB3KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Xyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj12KHQpO2lmKGUpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09QShlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gcCh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sdih0KX1mdW5jdGlvbiB5KHQsZSl7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBtKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPV8odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8Xyh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gXyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3codCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHcodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe3JldHVybiBBPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxBKHQpfWZ1bmN0aW9uIGsodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBTKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxFKG4ua2V5KSxuKX19ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIGUmJlModC5wcm90b3R5cGUsZSksciYmUyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gRSh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09QSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PUEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PUEoZSk/ZTpTdHJpbmcoZSl9dmFyIFA9MWUzLFQ9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gQyh0KXtyZXR1cm57d2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19fXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2sodGhpcyx0KX1yZXR1cm4geCh0LG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuZGF0YS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBuLkFubm90YXRpb25UeXBlLkxJTks6cmV0dXJuIG5ldyBJKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5URVhUOnJldHVybiBuZXcgVyh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuV0lER0VUOnN3aXRjaCh0LmRhdGEuZmllbGRUeXBlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IEIodCk7Y2FzZSJCdG4iOnJldHVybiB0LmRhdGEucmFkaW9CdXR0b24/bmV3IEgodCk6dC5kYXRhLmNoZWNrQm94P25ldyBxKHQpOm5ldyB6KHQpO2Nhc2UiQ2giOnJldHVybiBuZXcgVih0KX1yZXR1cm4gbmV3IEcodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlBPUFVQOnJldHVybiBuZXcgWCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBLKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5MSU5FOnJldHVybiBuZXcgSih0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgUSh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOnJldHVybiBuZXcgJCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6cmV0dXJuIG5ldyBaKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5DQVJFVDpyZXR1cm4gbmV3IGV0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5JTks6cmV0dXJuIG5ldyBydCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpyZXR1cm4gbmV3IHR0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6cmV0dXJuIG5ldyBudCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOnJldHVybiBuZXcgaXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNRVUlHR0xZOnJldHVybiBuZXcgYXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDpyZXR1cm4gbmV3IG90KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpyZXR1cm4gbmV3IHN0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDpyZXR1cm4gbmV3IGx0KHQpO2RlZmF1bHQ6cmV0dXJuIG5ldyBGKHQpfX19XSksdH0oKSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLmlzUmVuZGVyYWJsZSxpPXZvaWQgMCE9PW4mJm4sYT1yLmlnbm9yZUJvcmRlcixvPXZvaWQgMCE9PWEmJmEscz1yLmNyZWF0ZVF1YWRyaWxhdGVyYWxzLGw9dm9pZCAwIT09cyYmcztrKHRoaXMsdCksdGhpcy5pc1JlbmRlcmFibGU9aSx0aGlzLmRhdGE9ZS5kYXRhLHRoaXMubGF5ZXI9ZS5sYXllcix0aGlzLnBhZ2U9ZS5wYWdlLHRoaXMudmlld3BvcnQ9ZS52aWV3cG9ydCx0aGlzLmxpbmtTZXJ2aWNlPWUubGlua1NlcnZpY2UsdGhpcy5kb3dubG9hZE1hbmFnZXI9ZS5kb3dubG9hZE1hbmFnZXIsdGhpcy5pbWFnZVJlc291cmNlc1BhdGg9ZS5pbWFnZVJlc291cmNlc1BhdGgsdGhpcy5yZW5kZXJGb3Jtcz1lLnJlbmRlckZvcm1zLHRoaXMuc3ZnRmFjdG9yeT1lLnN2Z0ZhY3RvcnksdGhpcy5hbm5vdGF0aW9uU3RvcmFnZT1lLmFubm90YXRpb25TdG9yYWdlLHRoaXMuZW5hYmxlU2NyaXB0aW5nPWUuZW5hYmxlU2NyaXB0aW5nLHRoaXMuaGFzSlNBY3Rpb25zPWUuaGFzSlNBY3Rpb25zLHRoaXMuX2ZpZWxkT2JqZWN0cz1lLmZpZWxkT2JqZWN0cyxpJiYodGhpcy5jb250YWluZXI9dGhpcy5fY3JlYXRlQ29udGFpbmVyKG8pKSxsJiYodGhpcy5xdWFkcmlsYXRlcmFscz10aGlzLl9jcmVhdGVRdWFkcmlsYXRlcmFscyhvKSl9cmV0dXJuIHgodCxbe2tleToiX2NyZWF0ZUNvbnRhaW5lciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGU9dGhpcy5kYXRhLHI9dGhpcy5wYWdlLGk9dGhpcy52aWV3cG9ydCxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iKTthLnNldEF0dHJpYnV0ZSgiZGF0YS1hbm5vdGF0aW9uLWlkIixlLmlkKTt2YXIgbz1pLnJhd0RpbXMscz1vLnBhZ2VXaWR0aCxsPW8ucGFnZUhlaWdodCx1PW8ucGFnZVgsYz1vLnBhZ2VZLGg9QyhlLnJlY3QpLGY9aC53aWR0aCxkPWguaGVpZ2h0LHA9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2UucmVjdFswXSxyLnZpZXdbM10tZS5yZWN0WzFdK3Iudmlld1sxXSxlLnJlY3RbMl0sci52aWV3WzNdLWUucmVjdFszXStyLnZpZXdbMV1dKTtpZighdCYmZS5ib3JkZXJTdHlsZS53aWR0aD4wKXthLnN0eWxlLmJvcmRlcldpZHRoPSIiLmNvbmNhdChlLmJvcmRlclN0eWxlLndpZHRoLCJweCIpO3ZhciB2PWUuYm9yZGVyU3R5bGUuaG9yaXpvbnRhbENvcm5lclJhZGl1cyx5PWUuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7aWYodj4wfHx5PjApe3ZhciBtPSJjYWxjKCIuY29uY2F0KHYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkgLyBjYWxjKCIpLmNvbmNhdCh5LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIik7YS5zdHlsZS5ib3JkZXJSYWRpdXM9bX1lbHNlIGlmKHRoaXMgaW5zdGFuY2VvZiBIKXt2YXIgZz0iY2FsYygiLmNvbmNhdChmLCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYygiKS5jb25jYXQoZCwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpO2Euc3R5bGUuYm9yZGVyUmFkaXVzPWd9c3dpdGNoKGUuYm9yZGVyU3R5bGUuc3R5bGUpe2Nhc2Ugbi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOmEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ6YS5zdHlsZS5ib3JkZXJTdHlsZT0iZGFzaGVkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEOigwLG4ud2FybikoIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBiZXZlbGVkIik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ6KDAsbi53YXJuKSgiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGluc2V0Iik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOmEuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGU9InNvbGlkIn12YXIgYj1lLmJvcmRlckNvbG9yfHxudWxsO2I/YS5zdHlsZS5ib3JkZXJDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8YlswXSwwfGJbMV0sMHxiWzJdKTphLnN0eWxlLmJvcmRlcldpZHRoPTB9YS5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqKHBbMF0tdSkvcywiJSIpLGEuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqKHBbMV0tYykvbCwiJSIpO3ZhciBfPWUucm90YXRpb247cmV0dXJuIGUuaGFzT3duQ2FudmFzfHwwPT09Xz8oYS5zdHlsZS53aWR0aD0iIi5jb25jYXQoMTAwKmYvcywiJSIpLGEuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZC9sLCIlIikpOnRoaXMuc2V0Um90YXRpb24oXyxhKSxhfX0se2tleToic2V0Um90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5jb250YWluZXIsaT10aGlzLnZpZXdwb3J0LnJhd0RpbXMsYT1pLnBhZ2VXaWR0aCxvPWkucGFnZUhlaWdodCxzPUModGhpcy5kYXRhLnJlY3QpLGw9cy53aWR0aCx1PXMuaGVpZ2h0O3QlMTgwPT0wPyhlPTEwMCpsL2Escj0xMDAqdS9vKTooZT0xMDAqdS9hLHI9MTAwKmwvbyksbi5zdHlsZS53aWR0aD0iIi5jb25jYXQoZSwiJSIpLG4uc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChyLCIlIiksbi5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsKDM2MC10KSUzNjApfX0se2tleToiX2NvbW1vbkFjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5kZXRhaWxbdF07ci50YXJnZXQuc3R5bGVbZV09by5Db2xvckNvbnZlcnRlcnNbIiIuY29uY2F0KG5bMF0sIl9IVE1MIildKG4uc2xpY2UoMSkpfTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2NvbW1vbkFjdGlvbnMiLHtkaXNwbGF5OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLmRpc3BsYXklMj09MTt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PXI/ImhpZGRlbiI6InZpc2libGUiLHQuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodC5kYXRhLmlkLHtoaWRkZW46cixwcmludDowPT09ZS5kZXRhaWwuZGlzcGxheXx8Mz09PWUuZGV0YWlsLmRpc3BsYXl9KX0scHJpbnQ6ZnVuY3Rpb24oZSl7dC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3ByaW50OmUuZGV0YWlsLnByaW50fSl9LGhpZGRlbjpmdW5jdGlvbihlKXt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PWUuZGV0YWlsLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIsdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse2hpZGRlbjplLmRldGFpbC5oaWRkZW59KX0sZm9jdXM6ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC50YXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITF9KX0pLDApfSx1c2VyTmFtZTpmdW5jdGlvbih0KXt0LnRhcmdldC50aXRsZT10LmRldGFpbC51c2VyTmFtZX0scmVhZG9ubHk6ZnVuY3Rpb24odCl7dC5kZXRhaWwucmVhZG9ubHk/dC50YXJnZXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpOnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgicmVhZG9ubHkiKX0scmVxdWlyZWQ6ZnVuY3Rpb24oZSl7dC5fc2V0UmVxdWlyZWQoZS50YXJnZXQsZS5kZXRhaWwucmVxdWlyZWQpfSxiZ0NvbG9yOmZ1bmN0aW9uKHQpe2UoImJnQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLHQpfSxmaWxsQ29sb3I6ZnVuY3Rpb24odCl7ZSgiZmlsbENvbG9yIiwiYmFja2dyb3VuZENvbG9yIix0KX0sZmdDb2xvcjpmdW5jdGlvbih0KXtlKCJmZ0NvbG9yIiwiY29sb3IiLHQpfSx0ZXh0Q29sb3I6ZnVuY3Rpb24odCl7ZSgidGV4dENvbG9yIiwiY29sb3IiLHQpfSxib3JkZXJDb2xvcjpmdW5jdGlvbih0KXtlKCJib3JkZXJDb2xvciIsImJvcmRlckNvbG9yIix0KX0sc3Ryb2tlQ29sb3I6ZnVuY3Rpb24odCl7ZSgic3Ryb2tlQ29sb3IiLCJib3JkZXJDb2xvciIsdCl9LHJvdGF0aW9uOmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLnJvdGF0aW9uO3Quc2V0Um90YXRpb24ociksdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3JvdGF0aW9uOnJ9KX19KX19LHtrZXk6Il9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbW1vbkFjdGlvbnMsbj0wLGk9T2JqZWN0LmtleXMoZS5kZXRhaWwpO248aS5sZW5ndGg7bisrKXt2YXIgYT1pW25dLG89dFthXXx8clthXTtudWxsPT1vfHxvKGUpfX19LHtrZXk6Il9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5lbmFibGVTY3JpcHRpbmcpe3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UuZ2V0UmF3VmFsdWUodGhpcy5kYXRhLmlkKTtpZihlKWZvcih2YXIgcj10aGlzLl9jb21tb25BY3Rpb25zLG49MCxpPU9iamVjdC5lbnRyaWVzKGUpO248aS5sZW5ndGg7bisrKXt2YXIgYT1iKGlbbl0sMiksbz1hWzBdLHM9YVsxXSxsPXJbb107bCYmKGwoe2RldGFpbDp7W29dOnN9LHRhcmdldDp0fSksZGVsZXRlIGVbb10pfX19fSx7a2V5OiJfY3JlYXRlUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5kYXRhLnF1YWRQb2ludHMpcmV0dXJuIG51bGw7dmFyIGUscj1bXSxuPXRoaXMuZGF0YS5yZWN0LGk9Zyh0aGlzLmRhdGEucXVhZFBvaW50cyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgYT1lLnZhbHVlO3RoaXMuZGF0YS5yZWN0PVthWzJdLngsYVsyXS55LGFbMV0ueCxhWzFdLnldLHIucHVzaCh0aGlzLl9jcmVhdGVDb250YWluZXIodCkpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdGhpcy5kYXRhLnJlY3Q9bixyfX0se2tleToiX2NyZWF0ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29udGFpbmVyO3RoaXMucXVhZHJpbGF0ZXJhbHMmJih0PXR8fHRoaXMucXVhZHJpbGF0ZXJhbHMscj10aGlzLnF1YWRyaWxhdGVyYWxzWzBdKSx0fHwoKHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmNsYXNzTmFtZT0icG9wdXBUcmlnZ2VyQXJlYSIsci5hcHBlbmQodCkpO3ZhciBuPW5ldyBZKHtjb250YWluZXI6cix0cmlnZ2VyOnQsY29sb3I6ZS5jb2xvcix0aXRsZU9iajplLnRpdGxlT2JqLG1vZGlmaWNhdGlvbkRhdGU6ZS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOmUuY29udGVudHNPYmoscmljaFRleHQ6ZS5yaWNoVGV4dCxoaWRlV3JhcHBlcjohMH0pLnJlbmRlcigpO24uc3R5bGUubGVmdD0iMTAwJSIsci5hcHBlbmQobil9fSx7a2V5OiJfcmVuZGVyUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI9Zyh0aGlzLnF1YWRyaWxhdGVyYWxzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5jbGFzc05hbWU9dH1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdGhpcy5xdWFkcmlsYXRlcmFsc319LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXJgIGNhbGxlZCIpfX0se2tleToiX2dldEVsZW1lbnRzQnlOYW1lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPVtdO2lmKHRoaXMuX2ZpZWxkT2JqZWN0cyl7dmFyIGk9dGhpcy5fZmllbGRPYmplY3RzW3RdO2lmKGkpe3ZhciBhLG89ZyhpKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsbD1zLnBhZ2UsdT1zLmlkLGM9cy5leHBvcnRWYWx1ZXM7aWYoLTEhPT1sJiZ1IT09ZSl7dmFyIGg9InN0cmluZyI9PXR5cGVvZiBjP2M6bnVsbCxmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KHUsJyJdJykpOyFmfHxULmhhcyhmKT9yLnB1c2goe2lkOnUsZXhwb3J0VmFsdWU6aCxkb21FbGVtZW50OmZ9KTooMCxuLndhcm4pKCJfZ2V0RWxlbWVudHNCeU5hbWUgLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdCh1KSl9fX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX19cmV0dXJuIHJ9dmFyIGQscD1nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHQpKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LmV4cG9ydFZhbHVlLG09di5nZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIpO20hPT1lJiZULmhhcyh2KSYmci5wdXNoKHtpZDptLGV4cG9ydFZhbHVlOnksZG9tRWxlbWVudDp2fSl9fWNhdGNoKHQpe3AuZSh0KX1maW5hbGx5e3AuZigpfXJldHVybiByfX1dKSx0fSgpLE09bmV3IFdlYWtTZXQsUj1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gayh0aGlzLHIpLHkocChuPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMCxpZ25vcmVCb3JkZXI6IShudWxsPT1pfHwhaS5pZ25vcmVCb3JkZXIpLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSkpLFIpLHkocChuKSxNKSxuLmlzVG9vbHRpcE9ubHk9dC5kYXRhLmlzVG9vbHRpcE9ubHksbn1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dGhpcy5saW5rU2VydmljZSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIix0LmlkKTt2YXIgbj0hMTtyZXR1cm4gdC51cmw/KGUuYWRkTGlua0F0dHJpYnV0ZXMocix0LnVybCx0Lm5ld1dpbmRvdyksbj0hMCk6dC5hY3Rpb24/KHRoaXMuX2JpbmROYW1lZEFjdGlvbihyLHQuYWN0aW9uKSxuPSEwKTp0LmF0dGFjaG1lbnQ/KHRoaXMuX2JpbmRBdHRhY2htZW50KHIsdC5hdHRhY2htZW50KSxuPSEwKTp0LnNldE9DR1N0YXRlPyhtKHRoaXMsUixMKS5jYWxsKHRoaXMscix0LnNldE9DR1N0YXRlKSxuPSEwKTp0LmRlc3Q/KHRoaXMuX2JpbmRMaW5rKHIsdC5kZXN0KSxuPSEwKToodC5hY3Rpb25zJiYodC5hY3Rpb25zLkFjdGlvbnx8dC5hY3Rpb25zWyJNb3VzZSBVcCJdfHx0LmFjdGlvbnNbIk1vdXNlIERvd24iXSkmJnRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKHRoaXMuX2JpbmRKU0FjdGlvbihyLHQpLG49ITApLHQucmVzZXRGb3JtPyh0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKHIsdC5yZXNldEZvcm0pLG49ITApOnRoaXMuaXNUb29sdGlwT25seSYmIW4mJih0aGlzLl9iaW5kTGluayhyLCIiKSxuPSEwKSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygibGlua0Fubm90YXRpb24iKS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49MD09PWU/cjpyLmNsb25lTm9kZSgpO3JldHVybiB0LmFwcGVuZChuKSx0fSkpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmtBbm5vdGF0aW9uIixuJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXIpfX0se2tleToiX2JpbmRMaW5rIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGUpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiBlJiZyLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihlKSwhMX0sKGV8fCIiPT09ZSkmJm0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZE5hbWVkQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSx0Lm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEF0dGFjaG1lbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5kb3dubG9hZE1hbmFnZXIpfHx2b2lkIDA9PT10fHx0Lm9wZW5PckRvd25sb2FkRGF0YShyLmNvbnRhaW5lcixlLmNvbnRlbnQsZS5maWxlbmFtZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEpTQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTtmb3IodmFyIG49bmV3IE1hcChbWyJBY3Rpb24iLCJvbmNsaWNrIl0sWyJNb3VzZSBVcCIsIm9ubW91c2V1cCJdLFsiTW91c2UgRG93biIsIm9ubW91c2Vkb3duIl1dKSxpPWZ1bmN0aW9uKCl7dmFyIGk9b1thXSxzPW4uZ2V0KGkpO2lmKCFzKXJldHVybiJjb250aW51ZSI7dFtzXT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PXR8fHQuZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6cixkZXRhaWw6e2lkOmUuaWQsbmFtZTppfX0pLCExfX0sYT0wLG89T2JqZWN0LmtleXMoZS5hY3Rpb25zKTthPG8ubGVuZ3RoO2ErKylpKCk7dC5vbmNsaWNrfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxtKHRoaXMsTSxqKS5jYWxsKHRoaXMpfX0se2tleToiX2JpbmRSZXNldEZvcm1BY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXQub25jbGljaztpZihpfHwodC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSksbSh0aGlzLE0saikuY2FsbCh0aGlzKSwhdGhpcy5fZmllbGRPYmplY3RzKXJldHVybigwLG4ud2FybikoJ19iaW5kUmVzZXRGb3JtQWN0aW9uIC0gInJlc2V0Rm9ybSIgYWN0aW9uIG5vdCBzdXBwb3J0ZWQsIGVuc3VyZSB0aGF0IHRoZSBgZmllbGRPYmplY3RzYCBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuJyksdm9pZChpfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSk7dC5vbmNsaWNrPWZ1bmN0aW9uKCl7bnVsbD09aXx8aSgpO3ZhciB0PWUuZmllbGRzLGE9ZS5yZWZzLG89ZS5pbmNsdWRlLHM9W107aWYoMCE9PXQubGVuZ3RofHwwIT09YS5sZW5ndGgpe3ZhciBsLHU9bmV3IFNldChhKSxoPWcodCk7dHJ5e2ZvcihoLnMoKTshKGw9aC5uKCkpLmRvbmU7KXt2YXIgZixkPWwudmFsdWUscD1nKHIuX2ZpZWxkT2JqZWN0c1tkXXx8W10pO3RyeXtmb3IocC5zKCk7IShmPXAubigpKS5kb25lOyl7dmFyIHY9Zi52YWx1ZS5pZDt1LmFkZCh2KX19Y2F0Y2godCl7cC5lKHQpfWZpbmFsbHl7cC5mKCl9fX1jYXRjaCh0KXtoLmUodCl9ZmluYWxseXtoLmYoKX1mb3IodmFyIHk9MCxtPU9iamVjdC52YWx1ZXMoci5fZmllbGRPYmplY3RzKTt5PG0ubGVuZ3RoO3krKyl7dmFyIGIsXz1nKG1beV0pO3RyeXtmb3IoXy5zKCk7IShiPV8ubigpKS5kb25lOyl7dmFyIHc9Yi52YWx1ZTt1Lmhhcyh3LmlkKT09PW8mJnMucHVzaCh3KX19Y2F0Y2godCl7Xy5lKHQpfWZpbmFsbHl7Xy5mKCl9fX1lbHNlIGZvcih2YXIgQT0wLGs9T2JqZWN0LnZhbHVlcyhyLl9maWVsZE9iamVjdHMpO0E8ay5sZW5ndGg7QSsrKXt2YXIgUz1rW0FdO3MucHVzaC5hcHBseShzLGMoUykpfWZvcih2YXIgeCxFPXIuYW5ub3RhdGlvblN0b3JhZ2UsUD1bXSxDPTAsTz1zO0M8Ty5sZW5ndGg7QysrKXt2YXIgRj1PW0NdLE09Ri5pZDtzd2l0Y2goUC5wdXNoKE0pLEYudHlwZSl7Y2FzZSJ0ZXh0Ijp2YXIgUj1GLmRlZmF1bHRWYWx1ZXx8IiI7RS5zZXRWYWx1ZShNLHt2YWx1ZTpSfSk7YnJlYWs7Y2FzZSJjaGVja2JveCI6Y2FzZSJyYWRpb2J1dHRvbiI6dmFyIEk9Ri5kZWZhdWx0VmFsdWU9PT1GLmV4cG9ydFZhbHVlcztFLnNldFZhbHVlKE0se3ZhbHVlOkl9KTticmVhaztjYXNlImNvbWJvYm94IjpjYXNlImxpc3Rib3giOnZhciBqPUYuZGVmYXVsdFZhbHVlfHwiIjtFLnNldFZhbHVlKE0se3ZhbHVlOmp9KTticmVhaztkZWZhdWx0OmNvbnRpbnVlfXZhciBMPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KE0sJyJdJykpO0wmJihULmhhcyhMKT9MLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNldGZvcm0iKSk6KDAsbi53YXJuKSgiX2JpbmRSZXNldEZvcm1BY3Rpb24gLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdChNKSkpfXJldHVybiByLmVuYWJsZVNjcmlwdGluZyYmKG51bGw9PT0oeD1yLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09eHx8eC5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTpyLGRldGFpbDp7aWQ6ImFwcCIsaWRzOlAsbmFtZToiUmVzZXRGb3JtIn19KSksITF9fX1dKSxyfShGKTtmdW5jdGlvbiBqKCl7dGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWludGVybmFsLWxpbmsiLCIiKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiByLmxpbmtTZXJ2aWNlLmV4ZWN1dGVTZXRPQ0dTdGF0ZShlKSwhMX0sbSh0aGlzLE0saikuY2FsbCh0aGlzKX12YXIgRCxOLFUsVz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm99KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIHQuc3JjPXRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoKyJhbm5vdGF0aW9uLSIrdGhpcy5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSsiLnN2ZyIsdC5hbHQ9Ilt7e3R5cGV9fSBBbm5vdGF0aW9uXSIsdC5kYXRhc2V0LmwxMG5JZD0idGV4dF9hbm5vdGF0aW9uX3R5cGUiLHQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7dHlwZTp0aGlzLmRhdGEubmFtZX0pLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZCh0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksRz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGsodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJih0aGlzLmNvbnRhaW5lci50aXRsZT10aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9nZXRLZXlNb2RpZmllciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bi5GZWF0dXJlVGVzdC5wbGF0Zm9ybSxyPWUuaXNXaW4saT1lLmlzTWFjO3JldHVybiByJiZ0LmN0cmxLZXl8fGkmJnQubWV0YUtleX19LHtrZXk6Il9zZXRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2UuaW5jbHVkZXMoIm1vdXNlIik/dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpLHNoaWZ0OnQuc2hpZnRLZXksbW9kaWZpZXI6aS5fZ2V0S2V5TW9kaWZpZXIodCl9fSl9KSk6dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpfX0pfSkpfX0se2tleToiX3NldEV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saT1nKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGEsbz1iKG4udmFsdWUsMikscz1vWzBdLGw9b1sxXTsoIkFjdGlvbiI9PT1sfHxudWxsIT09KGE9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT1hJiZhW2xdKSYmdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcih0LHMsbCxyKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fX0se2tleToiX3NldEJhY2tncm91bmRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcnx8bnVsbDt0LnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsPT09ZT8idHJhbnNwYXJlbnQiOm4uVXRpbC5tYWtlSGV4Q29sb3IoZVswXSxlWzFdLGVbMl0pfX0se2tleToiX3NldFRleHRTdHlsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRDb2xvcixpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fDksYT10LnN0eWxlLG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMTAqdCkvMTB9O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3ZhciBzPU1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLTIpLGw9cy8oTWF0aC5yb3VuZChzLyhuLkxJTkVfRkFDVE9SKmkpKXx8MSk7ZT1NYXRoLm1pbihpLG8obC9uLkxJTkVfRkFDVE9SKSl9ZWxzZXt2YXIgdT1NYXRoLmFicyh0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXS0yKTtlPU1hdGgubWluKGksbyh1L24uTElORV9GQUNUT1IpKX1hLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGUsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkiKSxhLmNvbG9yPW4uVXRpbC5tYWtlSGV4Q29sb3IoclswXSxyWzFdLHJbMl0pLG51bGwhPT10aGlzLmRhdGEudGV4dEFsaWdubWVudCYmKGEudGV4dEFsaWduPVsibGVmdCIsImNlbnRlciIsInJpZ2h0Il1bdGhpcy5kYXRhLnRleHRBbGlnbm1lbnRdKX19LHtrZXk6Il9zZXRSZXF1aXJlZCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtlP3Quc2V0QXR0cmlidXRlKCJyZXF1aXJlZCIsITApOnQucmVtb3ZlQXR0cmlidXRlKCJyZXF1aXJlZCIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIixlKX19XSkscn0oRiksQj1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe2sodGhpcyxyKTt2YXIgbj10LnJlbmRlckZvcm1zfHwhdC5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhdC5kYXRhLmZpZWxkVmFsdWU7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpufSl9cmV0dXJuIHgocixbe2tleToic2V0UHJvcGVydHlPblNpYmxpbmdzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Usbz1nKHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHQubmFtZSx0LmlkKSk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz1pLnZhbHVlO3MuZG9tRWxlbWVudCYmKHMuZG9tRWxlbWVudFtlXT1yKSxhLnNldFZhbHVlKHMuaWQse1tuXTpyfSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZDt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InRleHRXaWRnZXRBbm5vdGF0aW9uIjt2YXIgbj1udWxsO2lmKHRoaXMucmVuZGVyRm9ybXMpe3ZhciBpPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxhPWkuZm9ybWF0dGVkVmFsdWV8fGkudmFsdWV8fCIiLG89ZS5nZXRWYWx1ZShyLHtjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbn0pLmNoYXJMaW1pdDtvJiZhLmxlbmd0aD5vJiYoYT1hLnNsaWNlKDAsbykpO3ZhciBzPXt1c2VyVmFsdWU6YSxmb3JtYXR0ZWRWYWx1ZTpudWxsLGxhc3RDb21taXR0ZWRWYWx1ZTpudWxsLGNvbW1pdEtleToxfTt0aGlzLmRhdGEubXVsdGlMaW5lPygobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpKS50ZXh0Q29udGVudD1hLHRoaXMuZGF0YS5kb05vdFNjcm9sbCYmKG4uc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSk6KChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9InRleHQiLG4uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYSksdGhpcy5kYXRhLmRvTm90U2Nyb2xsJiYobi5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIpKSxULmFkZChuKSxuLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixyKSxuLmRpc2FibGVkPXRoaXMuZGF0YS5yZWFkT25seSxuLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxuLnRhYkluZGV4PVAsdGhpcy5fc2V0UmVxdWlyZWQobix0aGlzLmRhdGEucmVxdWlyZWQpLG8mJihuLm1heExlbmd0aD1vKSxuLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24oaSl7ZS5zZXRWYWx1ZShyLHt2YWx1ZTppLnRhcmdldC52YWx1ZX0pLHQuc2V0UHJvcGVydHlPblNpYmxpbmdzKG4sInZhbHVlIixpLnRhcmdldC52YWx1ZSwidmFsdWUiKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLGk9bnVsbCE9PShyPXQuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSkmJnZvaWQgMCE9PXI/cjoiIjtuLnZhbHVlPXMudXNlclZhbHVlPWkscy5mb3JtYXR0ZWRWYWx1ZT1udWxsfSkpO3ZhciBsPWZ1bmN0aW9uKHQpe3ZhciBlPXMuZm9ybWF0dGVkVmFsdWU7bnVsbCE9ZSYmKHQudGFyZ2V0LnZhbHVlPWUpLHQudGFyZ2V0LnNjcm9sbExlZnQ9MH07aWYodGhpcy5lbmFibGVTY3JpcHRpbmcmJnRoaXMuaGFzSlNBY3Rpb25zKXt2YXIgdTtuLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7cy51c2VyVmFsdWUmJihlLnZhbHVlPXMudXNlclZhbHVlKSxzLmxhc3RDb21taXR0ZWRWYWx1ZT1lLnZhbHVlLHMuY29tbWl0S2V5PTF9KSksbi5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBpPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtzLnVzZXJWYWx1ZT1udWxsIT09KG49dC5kZXRhaWwudmFsdWUpJiZ2b2lkIDAhPT1uP246IiIsZS5zZXRWYWx1ZShyLHt2YWx1ZTpzLnVzZXJWYWx1ZS50b1N0cmluZygpfSksdC50YXJnZXQudmFsdWU9cy51c2VyVmFsdWV9LGZvcm1hdHRlZFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGV0YWlsLmZvcm1hdHRlZFZhbHVlO3MuZm9ybWF0dGVkVmFsdWU9bixudWxsIT1uJiZ0LnRhcmdldCE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJih0LnRhcmdldC52YWx1ZT1uKSxlLnNldFZhbHVlKHIse2Zvcm1hdHRlZFZhbHVlOm59KX0sc2VsUmFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU7KGU9dC50YXJnZXQpLnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KGUsYyh0LmRldGFpbC5zZWxSYW5nZSkpfSxjaGFyTGltaXQ6ZnVuY3Rpb24obil7dmFyIGksYT1uLmRldGFpbC5jaGFyTGltaXQsbz1uLnRhcmdldDtpZigwIT09YSl7by5zZXRBdHRyaWJ1dGUoIm1heExlbmd0aCIsYSk7dmFyIGw9cy51c2VyVmFsdWU7IWx8fGwubGVuZ3RoPD1hfHwobD1sLnNsaWNlKDAsYSksby52YWx1ZT1zLnVzZXJWYWx1ZT1sLGUuc2V0VmFsdWUocix7dmFsdWU6bH0pLG51bGw9PT0oaT10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09aXx8aS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmwsd2lsbENvbW1pdDohMCxjb21taXRLZXk6MSxzZWxTdGFydDpvLnNlbGVjdGlvblN0YXJ0LHNlbEVuZDpvLnNlbGVjdGlvbkVuZH19KSl9ZWxzZSBvLnJlbW92ZUF0dHJpYnV0ZSgibWF4TGVuZ3RoIil9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goaSxuKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLChmdW5jdGlvbihlKXt2YXIgbjtzLmNvbW1pdEtleT0xO3ZhciBpPS0xO2lmKCJFc2NhcGUiPT09ZS5rZXk/aT0wOiJFbnRlciIhPT1lLmtleXx8dC5kYXRhLm11bHRpTGluZT8iVGFiIj09PWUua2V5JiYocy5jb21taXRLZXk9Myk6aT0yLC0xIT09aSl7dmFyIGE9ZS50YXJnZXQudmFsdWU7cy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1hJiYocy5sYXN0Q29tbWl0dGVkVmFsdWU9YSxzLnVzZXJWYWx1ZT1hLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmEsd2lsbENvbW1pdDohMCxjb21taXRLZXk6aSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKX19KSk7dmFyIGg9bDtsPW51bGwsbi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoZnVuY3Rpb24oZSl7aWYoZS5yZWxhdGVkVGFyZ2V0KXt2YXIgbixpPWUudGFyZ2V0LnZhbHVlO3MudXNlclZhbHVlPWkscy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1pJiYobnVsbD09PShuPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1ufHxuLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6aSx3aWxsQ29tbWl0OiEwLGNvbW1pdEtleTpzLmNvbW1pdEtleSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKSxoKGUpfX0pKSxudWxsIT09KHU9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT11JiZ1LktleXN0cm9rZSYmbi5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsKGZ1bmN0aW9uKGUpe3ZhciBuO3MubGFzdENvbW1pdHRlZFZhbHVlPW51bGw7dmFyIGk9ZS5kYXRhLGE9ZS50YXJnZXQsbz1hLnZhbHVlLGw9YS5zZWxlY3Rpb25TdGFydCx1PWEuc2VsZWN0aW9uRW5kLGM9bCxoPXU7c3dpdGNoKGUuaW5wdXRUeXBlKXtjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6dmFyIGY9by5zdWJzdHJpbmcoMCxsKS5tYXRjaCgvXHcqW15cd10qJC8pO2YmJihjLT1mWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJkZWxldGVXb3JkRm9yd2FyZCI6dmFyIGQ9by5zdWJzdHJpbmcobCkubWF0Y2goL15bXlx3XSpcdyovKTtkJiYoaCs9ZFswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEJhY2t3YXJkIjpsPT09dSYmKGMtPTEpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmw9PT11JiYoaCs9MSl9ZS5wcmV2ZW50RGVmYXVsdCgpLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOm8sY2hhbmdlOml8fCIiLHdpbGxDb21taXQ6ITEsc2VsU3RhcnQ6YyxzZWxFbmQ6aH19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhuLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXV0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC52YWx1ZX0pKX1pZihsJiZuLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGwpLHRoaXMuZGF0YS5jb21iKXt2YXIgZj0odGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0pL287bi5jbGFzc0xpc3QuYWRkKCJjb21iIiksbi5zdHlsZS5sZXR0ZXJTcGFjaW5nPSJjYWxjKCIuY29uY2F0KGYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSAtIDFjaCkiKX19ZWxzZShuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS50ZXh0Q29udGVudD10aGlzLmRhdGEuZmllbGRWYWx1ZSxuLnN0eWxlLnZlcnRpY2FsQWxpZ249Im1pZGRsZSIsbi5zdHlsZS5kaXNwbGF5PSJ0YWJsZS1jZWxsIjtyZXR1cm4gdGhpcy5fc2V0VGV4dFN0eWxlKG4pLHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihuKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQobiksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHE9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTp0LnJlbmRlckZvcm1zfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmFubm90YXRpb25TdG9yYWdlLHI9dGhpcy5kYXRhLG49ci5pZCxpPWUuZ2V0VmFsdWUobix7dmFsdWU6ci5leHBvcnRWYWx1ZT09PXIuZmllbGRWYWx1ZX0pLnZhbHVlOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9Ik9mZiIhPT1pLGUuc2V0VmFsdWUobix7dmFsdWU6aX0pKSx0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3giO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIFQuYWRkKGEpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLG4pLGEuZGlzYWJsZWQ9ci5yZWFkT25seSx0aGlzLl9zZXRSZXF1aXJlZChhLHRoaXMuZGF0YS5yZXF1aXJlZCksYS50eXBlPSJjaGVja2JveCIsYS5uYW1lPXIuZmllbGROYW1lLGkmJmEuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCksYS5zZXRBdHRyaWJ1dGUoImV4cG9ydFZhbHVlIixyLmV4cG9ydFZhbHVlKSxhLnRhYkluZGV4PVAsYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLChmdW5jdGlvbihpKXt2YXIgYSxvPWkudGFyZ2V0LHM9by5uYW1lLGw9by5jaGVja2VkLHU9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShzLG4pKTt0cnl7Zm9yKHUucygpOyEoYT11Lm4oKSkuZG9uZTspe3ZhciBjPWEudmFsdWUsaD1sJiZjLmV4cG9ydFZhbHVlPT09ci5leHBvcnRWYWx1ZTtjLmRvbUVsZW1lbnQmJihjLmRvbUVsZW1lbnQuY2hlY2tlZD1oKSxlLnNldFZhbHVlKGMuaWQse3ZhbHVlOmh9KX19Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9ZS5zZXRWYWx1ZShuLHt2YWx1ZTpsfSl9KSksYS5hZGRFdmVudExpc3RlbmVyKCJyZXNldGZvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHRGaWVsZFZhbHVlfHwiT2ZmIjt0LnRhcmdldC5jaGVja2VkPWU9PT1yLmV4cG9ydFZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKGEuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChmdW5jdGlvbihyKXt2YXIgaT17dmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQuY2hlY2tlZD0iT2ZmIiE9PXQuZGV0YWlsLnZhbHVlLGUuc2V0VmFsdWUobix7dmFsdWU6dC50YXJnZXQuY2hlY2tlZH0pfX07dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGkscil9KSksdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoYSxbWyJjaGFuZ2UiLCJWYWxpZGF0ZSJdLFsiY2hhbmdlIiwiQWN0aW9uIl0sWyJmb2N1cyIsIkZvY3VzIl0sWyJibHVyIiwiQmx1ciJdLFsibW91c2Vkb3duIiwiTW91c2UgRG93biJdLFsibW91c2VlbnRlciIsIk1vdXNlIEVudGVyIl0sWyJtb3VzZWxlYXZlIiwiTW91c2UgRXhpdCJdLFsibW91c2V1cCIsIk1vdXNlIFVwIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSksdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGEpLHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRyksSD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3JldHVybiBrKHRoaXMsciksZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnQucmVuZGVyRm9ybXN9KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gcmFkaW9CdXR0b24iO3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uscj10aGlzLmRhdGEsbj1yLmlkLGk9ZS5nZXRWYWx1ZShuLHt2YWx1ZTpyLmZpZWxkVmFsdWU9PT1yLmJ1dHRvblZhbHVlfSkudmFsdWU7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1pIT09ci5idXR0b25WYWx1ZSxlLnNldFZhbHVlKG4se3ZhbHVlOml9KSk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtpZihULmFkZChhKSxhLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixuKSxhLmRpc2FibGVkPXIucmVhZE9ubHksdGhpcy5fc2V0UmVxdWlyZWQoYSx0aGlzLmRhdGEucmVxdWlyZWQpLGEudHlwZT0icmFkaW8iLGEubmFtZT1yLmZpZWxkTmFtZSxpJiZhLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsITApLGEudGFiSW5kZXg9UCxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHIpe3ZhciBpLGE9ci50YXJnZXQsbz1hLm5hbWUscz1hLmNoZWNrZWQsbD1nKHQuX2dldEVsZW1lbnRzQnlOYW1lKG8sbikpO3RyeXtmb3IobC5zKCk7IShpPWwubigpKS5kb25lOyl7dmFyIHU9aS52YWx1ZTtlLnNldFZhbHVlKHUuaWQse3ZhbHVlOiExfSl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfWUuc2V0VmFsdWUobix7dmFsdWU6c30pfSkpLGEuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9ci5kZWZhdWx0RmllbGRWYWx1ZTt0LnRhcmdldC5jaGVja2VkPW51bGwhPWUmJmU9PT1yLmJ1dHRvblZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyl7dmFyIG89ci5idXR0b25WYWx1ZTthLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24ocil7dmFyIGk9e3ZhbHVlOmZ1bmN0aW9uKHIpe3ZhciBpLGE9bz09PXIuZGV0YWlsLnZhbHVlLHM9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShyLnRhcmdldC5uYW1lKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgbD1pLnZhbHVlLHU9YSYmbC5pZD09PW47bC5kb21FbGVtZW50JiYobC5kb21FbGVtZW50LmNoZWNrZWQ9dSksZS5zZXRWYWx1ZShsLmlkLHt2YWx1ZTp1fSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfX19O3QuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChpLHIpfSkpLHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKGEsW1siY2hhbmdlIiwiVmFsaWRhdGUiXSxbImNoYW5nZSIsIkFjdGlvbiJdLFsiZm9jdXMiLCJGb2N1cyJdLFsiYmx1ciIsIkJsdXIiXSxbIm1vdXNlZG93biIsIk1vdXNlIERvd24iXSxbIm1vdXNlZW50ZXIiLCJNb3VzZSBFbnRlciJdLFsibW91c2VsZWF2ZSIsIk1vdXNlIEV4aXQiXSxbIm1vdXNldXAiLCJNb3VzZSBVcCJdXSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNoZWNrZWR9KSl9cmV0dXJuIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihhKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lnbm9yZUJvcmRlcjp0LmRhdGEuaGFzQXBwZWFyYW5jZX0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dSh2KHIucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpO2UuY2xhc3NOYW1lPSJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b24iLHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJihlLnRpdGxlPXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpO3ZhciBuPWUubGFzdENoaWxkO3JldHVybiB0aGlzLmVuYWJsZVNjcmlwdGluZyYmdGhpcy5oYXNKU0FjdGlvbnMmJm4mJih0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSxuLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24oZSl7dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHt9LGUpfSkpKSxlfX1dKSxyfShJKSxWPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGsodGhpcyxyKSxlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6dC5yZW5kZXJGb3Jtc30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZCxuPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO1QuYWRkKGkpLGkuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLHIpLGkuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LHRoaXMuX3NldFJlcXVpcmVkKGksdGhpcy5kYXRhLnJlcXVpcmVkKSxpLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxpLnRhYkluZGV4PVA7dmFyIGE9dGhpcy5kYXRhLmNvbWJvJiZ0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg+MDt0aGlzLmRhdGEuY29tYm98fChpLnNpemU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLHRoaXMuZGF0YS5tdWx0aVNlbGVjdCYmKGkubXVsdGlwbGU9ITApKSxpLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLG49dC5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGE9ZyhpLm9wdGlvbnMpO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvLnNlbGVjdGVkPW8udmFsdWU9PT1ufX1jYXRjaCh0KXthLmUodCl9ZmluYWxseXthLmYoKX19KSk7dmFyIG8scz1nKHRoaXMuZGF0YS5vcHRpb25zKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWUsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTt1LnRleHRDb250ZW50PWwuZGlzcGxheVZhbHVlLHUudmFsdWU9bC5leHBvcnRWYWx1ZSxuLnZhbHVlLmluY2x1ZGVzKGwuZXhwb3J0VmFsdWUpJiYodS5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIiwhMCksYT0hMSksaS5hcHBlbmQodSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXZhciBjPW51bGw7aWYoYSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7aC52YWx1ZT0iICIsaC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsITApLGguc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsITApLGkucHJlcGVuZChoKSxjPWZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixjKSxjPW51bGx9LGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGMpfXZhciBmPWZ1bmN0aW9uKHQpe3ZhciBlPXQ/InZhbHVlIjoidGV4dENvbnRlbnQiLHI9aS5vcHRpb25zO3JldHVybiBpLm11bHRpcGxlP0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RlZH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfSkpOi0xPT09ci5zZWxlY3RlZEluZGV4P251bGw6cltyLnNlbGVjdGVkSW5kZXhdW2VdfSxkPWYoITEpLHA9ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQub3B0aW9ucztyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5VmFsdWU6dC50ZXh0Q29udGVudCxleHBvcnRWYWx1ZTp0LnZhbHVlfX0pKX07cmV0dXJuIHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucz8oaS5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBhPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT09KG49Yyl8fHZvaWQgMD09PW58fG4oKTt2YXIgYSxvPXQuZGV0YWlsLnZhbHVlLHM9bmV3IFNldChBcnJheS5pc0FycmF5KG8pP286W29dKSxsPWcoaS5vcHRpb25zKTt0cnl7Zm9yKGwucygpOyEoYT1sLm4oKSkuZG9uZTspe3ZhciB1PWEudmFsdWU7dS5zZWxlY3RlZD1zLmhhcyh1LnZhbHVlKX19Y2F0Y2godCl7bC5lKHQpfWZpbmFsbHl7bC5mKCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKX0pLGQ9ZighMSl9LG11bHRpcGxlU2VsZWN0aW9uOmZ1bmN0aW9uKHQpe2kubXVsdGlwbGU9ITB9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj1pLm9wdGlvbnMsYT10LmRldGFpbC5yZW1vdmU7aWYoblthXS5zZWxlY3RlZD0hMSxpLnJlbW92ZShhKSxuLmxlbmd0aD4wKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuZmluZEluZGV4LmNhbGwobiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KSk7LTE9PT1vJiYoblswXS5zZWxlY3RlZD0hMCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKSxpdGVtczpwKHQpfSksZD1mKCExKX0sY2xlYXI6ZnVuY3Rpb24odCl7Zm9yKDswIT09aS5sZW5ndGg7KWkucmVtb3ZlKDApO2Uuc2V0VmFsdWUocix7dmFsdWU6bnVsbCxpdGVtczpbXX0pLGQ9ZighMSl9LGluc2VydDpmdW5jdGlvbih0KXt2YXIgbj10LmRldGFpbC5pbnNlcnQsYT1uLmluZGV4LG89bi5kaXNwbGF5VmFsdWUscz1uLmV4cG9ydFZhbHVlLGw9aS5jaGlsZHJlblthXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO3UudGV4dENvbnRlbnQ9byx1LnZhbHVlPXMsbD9sLmJlZm9yZSh1KTppLmFwcGVuZCh1KSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpdGVtczpmdW5jdGlvbih0KXtmb3IodmFyIG49dC5kZXRhaWwuaXRlbXM7MCE9PWkubGVuZ3RoOylpLnJlbW92ZSgwKTt2YXIgYSxvPWcobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlLGw9cy5kaXNwbGF5VmFsdWUsdT1zLmV4cG9ydFZhbHVlLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Yy50ZXh0Q29udGVudD1sLGMudmFsdWU9dSxpLmFwcGVuZChjKX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9aS5vcHRpb25zLmxlbmd0aD4wJiYoaS5vcHRpb25zWzBdLnNlbGVjdGVkPSEwKSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpbmRpY2VzOmZ1bmN0aW9uKHQpe3ZhciBuLGk9bmV3IFNldCh0LmRldGFpbC5pbmRpY2VzKSxhPWcodC50YXJnZXQub3B0aW9ucyk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28uc2VsZWN0ZWQ9aS5oYXMoby5pbmRleCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfWUuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KSxkPWYoITEpfSxlZGl0YWJsZTpmdW5jdGlvbih0KXt0LnRhcmdldC5kaXNhYmxlZD0hdC5kZXRhaWwuZWRpdGFibGV9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYSxuKX0pKSxpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24obil7dmFyIGksYT1mKCEwKTtlLnNldFZhbHVlKHIse3ZhbHVlOmF9KSxuLnByZXZlbnREZWZhdWx0KCksbnVsbD09PShpPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1pfHxpLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6ZCxjaGFuZ2VFeDphLHdpbGxDb21taXQ6ITEsY29tbWl0S2V5OjEsa2V5RG93bjohMX19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhpLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXSxbImlucHV0IiwiQWN0aW9uIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSk6aS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe2Uuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KX0pKSx0aGlzLmRhdGEuY29tYm8mJnRoaXMuX3NldFRleHRTdHlsZShpKSx0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoaSksdGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShHKSxYPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhO2sodGhpcyxyKTt2YXIgbz10LmRhdGEscz0hci5JR05PUkVfVFlQRVMuaGFzKG8ucGFyZW50VHlwZSkmJiEhKG51bGwhPT0obj1vLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT1vLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT1vLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybiBlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6c30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5sYXllci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdCh0aGlzLmRhdGEucGFyZW50SWQsJyJdJykpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5jb250YWluZXI7dmFyIGU9bmV3IFkoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOkFycmF5LmZyb20odCksY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlT2JqOnRoaXMuZGF0YS50aXRsZU9iaixtb2RpZmljYXRpb25EYXRlOnRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOnRoaXMuZGF0YS5jb250ZW50c09iaixyaWNoVGV4dDp0aGlzLmRhdGEucmljaFRleHR9KSxyPXRoaXMucGFnZSxpPW4uVXRpbC5ub3JtYWxpemVSZWN0KFt0aGlzLmRhdGEucGFyZW50UmVjdFswXSxyLnZpZXdbM10tdGhpcy5kYXRhLnBhcmVudFJlY3RbMV0rci52aWV3WzFdLHRoaXMuZGF0YS5wYXJlbnRSZWN0WzJdLHIudmlld1szXS10aGlzLmRhdGEucGFyZW50UmVjdFszXStyLnZpZXdbMV1dKSxhPWlbMF0rdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0tdGhpcy5kYXRhLnBhcmVudFJlY3RbMF0sbz1pWzFdLHM9dGhpcy52aWV3cG9ydC5yYXdEaW1zLGw9cy5wYWdlV2lkdGgsdT1zLnBhZ2VIZWlnaHQsYz1zLnBhZ2VYLGg9cy5wYWdlWTtyZXR1cm4gdGhpcy5jb250YWluZXIuc3R5bGUubGVmdD0iIi5jb25jYXQoMTAwKihhLWMpL2wsIiUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCooby1oKS91LCIlIiksdGhpcy5jb250YWluZXIuYXBwZW5kKGUucmVuZGVyKCkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKTtEPVgsTj0iSUdOT1JFX1RZUEVTIixVPW5ldyBTZXQoWyJMaW5lIiwiU3F1YXJlIiwiQ2lyY2xlIiwiUG9seUxpbmUiLCJQb2x5Z29uIiwiSW5rIl0pLChOPUUoTikpaW4gRD9PYmplY3QuZGVmaW5lUHJvcGVydHkoRCxOLHt2YWx1ZTpVLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6RFtOXT1VO3ZhciBZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtrKHRoaXMsdCksdGhpcy5jb250YWluZXI9ZS5jb250YWluZXIsdGhpcy50cmlnZ2VyPWUudHJpZ2dlcix0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy50aXRsZU9iaj1lLnRpdGxlT2JqLHRoaXMubW9kaWZpY2F0aW9uRGF0ZT1lLm1vZGlmaWNhdGlvbkRhdGUsdGhpcy5jb250ZW50c09iaj1lLmNvbnRlbnRzT2JqLHRoaXMucmljaFRleHQ9ZS5yaWNoVGV4dCx0aGlzLmhpZGVXcmFwcGVyPWUuaGlkZVdyYXBwZXJ8fCExLHRoaXMucGlubmVkPSExfXJldHVybiB4KHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5jbGFzc05hbWU9InBvcHVwV3JhcHBlciIsdGhpcy5oaWRlRWxlbWVudD10aGlzLmhpZGVXcmFwcGVyP3I6dGhpcy5jb250YWluZXIsdGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9InBvcHVwIjt2YXIgbz10aGlzLmNvbG9yO2lmKG8pe3ZhciBsPS43KigyNTUtb1swXSkrb1swXSx1PS43KigyNTUtb1sxXSkrb1sxXSxjPS43KigyNTUtb1syXSkrb1syXTthLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8bCwwfHUsMHxjKX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpO2guZGlyPXRoaXMudGl0bGVPYmouZGlyLGgudGV4dENvbnRlbnQ9dGhpcy50aXRsZU9iai5zdHIsYS5hcHBlbmQoaCk7dmFyIGY9aS5QREZEYXRlU3RyaW5nLnRvRGF0ZU9iamVjdCh0aGlzLm1vZGlmaWNhdGlvbkRhdGUpO2lmKGYpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtkLmNsYXNzTmFtZT0icG9wdXBEYXRlIixkLnRleHRDb250ZW50PSJ7e2RhdGV9fSwge3t0aW1lfX0iLGQuZGF0YXNldC5sMTBuSWQ9ImFubm90YXRpb25fZGF0ZV9zdHJpbmciLGQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7ZGF0ZTpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLHRpbWU6Zi50b0xvY2FsZVRpbWVTdHJpbmcoKX0pLGEuYXBwZW5kKGQpfWlmKG51bGw9PT0odD10aGlzLnJpY2hUZXh0KXx8dm9pZCAwPT09dHx8IXQuc3RyfHxudWxsIT09KGU9dGhpcy5jb250ZW50c09iaikmJnZvaWQgMCE9PWUmJmUuc3RyJiZ0aGlzLmNvbnRlbnRzT2JqLnN0ciE9PXRoaXMucmljaFRleHQuc3RyKXt2YXIgcD10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTthLmFwcGVuZChwKX1lbHNlIHMuWGZhTGF5ZXIucmVuZGVyKHt4ZmFIdG1sOnRoaXMucmljaFRleHQuaHRtbCxpbnRlbnQ6InJpY2hUZXh0IixkaXY6YX0pLGEubGFzdENoaWxkLmNsYXNzTmFtZT0icmljaFRleHQgcG9wdXBDb250ZW50IjtBcnJheS5pc0FycmF5KHRoaXMudHJpZ2dlcil8fCh0aGlzLnRyaWdnZXI9W3RoaXMudHJpZ2dlcl0pO3ZhciB2LHk9Zyh0aGlzLnRyaWdnZXIpO3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIG09di52YWx1ZTttLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl90b2dnbGUuYmluZCh0aGlzKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRoaXMuX3Nob3cuYmluZCh0aGlzLCExKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITEpKX19Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hpZGUuYmluZCh0aGlzLCEwKSksci5hcHBlbmQoYSkscn19LHtrZXk6Il9mb3JtYXRDb250ZW50cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHIscj10LmRpcixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtuLmNsYXNzTmFtZT0icG9wdXBDb250ZW50IixuLmRpcj1yO2Zvcih2YXIgaT1lLnNwbGl0KC8oPzpcclxuP3xcbikvKSxhPTAsbz1pLmxlbmd0aDthPG87KythKXt2YXIgcz1pW2FdO24uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKSxhPG8tMSYmbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSl9cmV0dXJuIG59fSx7a2V5OiJfdG9nZ2xlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGlubmVkP3RoaXMuX2hpZGUoITApOnRoaXMuX3Nob3coITApfX0se2tleToiX3Nob3ciLHZhbHVlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSYmKHRoaXMucGlubmVkPSEwKSx0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiYmKHRoaXMuaGlkZUVsZW1lbnQuaGlkZGVuPSExLHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleD1wYXJzZUludCh0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXgpKzFlMyl9fSx7a2V5OiJfaGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXsoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkmJih0aGlzLnBpbm5lZD0hMSksdGhpcy5oaWRlRWxlbWVudC5oaWRkZW58fHRoaXMucGlubmVkfHwodGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITAsdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4PXBhcnNlSW50KHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCktMWUzKX19XSksdH0oKSxLPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLnRleHRDb250ZW50PXQuZGF0YS50ZXh0Q29udGVudCxvfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZyZWVUZXh0QW5ub3RhdGlvbiIsdGhpcy50ZXh0Q29udGVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImFubm90YXRpb25UZXh0Q29udGVudCIsdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjb21tZW50Iik7dmFyIGUscj1nKHRoaXMudGV4dENvbnRlbnQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtpLnRleHRDb250ZW50PW4sdC5hcHBlbmQoaSl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuY29udGFpbmVyLmFwcGVuZCh0KX1yZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLEo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmVBbm5vdGF0aW9uIjt2YXIgdD10aGlzLmRhdGEsZT1DKHQucmVjdCkscj1lLndpZHRoLG49ZS5oZWlnaHQsaT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHIsbiwhMCksYT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmxpbmUiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIngxIix0LnJlY3RbMl0tdC5saW5lQ29vcmRpbmF0ZXNbMF0pLGEuc2V0QXR0cmlidXRlKCJ5MSIsdC5yZWN0WzNdLXQubGluZUNvb3JkaW5hdGVzWzFdKSxhLnNldEF0dHJpYnV0ZSgieDIiLHQucmVjdFsyXS10LmxpbmVDb29yZGluYXRlc1syXSksYS5zZXRBdHRyaWJ1dGUoInkyIix0LnJlY3RbM10tdC5saW5lQ29vcmRpbmF0ZXNbM10pLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxpLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoaSksdGhpcy5fY3JlYXRlUG9wdXAoYSx0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksUT1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5kYXRhLGU9Qyh0LnJlY3QpLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShyLG4sITApLGE9dC5ib3JkZXJTdHlsZS53aWR0aCxvPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZSgieCIsYS8yKSxvLnNldEF0dHJpYnV0ZSgieSIsYS8yKSxvLnNldEF0dHJpYnV0ZSgid2lkdGgiLHItYSksby5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbi1hKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixhfHwxKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwidHJhbnNwYXJlbnQiKSxvLnNldEF0dHJpYnV0ZSgiZmlsbCIsInRyYW5zcGFyZW50IiksaS5hcHBlbmQobyksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuX2NyZWF0ZVBvcHVwKG8sdCksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLCQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNpcmNsZUFubm90YXRpb24iO3ZhciB0PXRoaXMuZGF0YSxlPUModC5yZWN0KSxyPWUud2lkdGgsbj1lLmhlaWdodCxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUocixuLCEwKSxhPXQuYm9yZGVyU3R5bGUud2lkdGgsbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmVsbGlwc2UiKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoImN4IixyLzIpLG8uc2V0QXR0cmlidXRlKCJjeSIsbi8yKSxvLnNldEF0dHJpYnV0ZSgicngiLHIvMi1hLzIpLG8uc2V0QXR0cmlidXRlKCJyeSIsbi8yLWEvMiksby5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsYXx8MSksby5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iiksby5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpLGkuYXBwZW5kKG8pLHRoaXMuY29udGFpbmVyLmFwcGVuZChpKSx0aGlzLl9jcmVhdGVQb3B1cChvLHQpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxaPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWxpbmVBbm5vdGF0aW9uIixvLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWxpbmUiLG99cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT10aGlzLmNvbnRhaW5lckNsYXNzTmFtZTt2YXIgdCxlPXRoaXMuZGF0YSxyPUMoZS5yZWN0KSxuPXIud2lkdGgsaT1yLmhlaWdodCxhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUobixpLCEwKSxvPVtdLHM9ZyhlLnZlcnRpY2VzKTt0cnl7Zm9yKHMucygpOyEodD1zLm4oKSkuZG9uZTspe3ZhciBsPXQudmFsdWUsdT1sLngtZS5yZWN0WzBdLGM9ZS5yZWN0WzNdLWwueTtvLnB1c2godSsiLCIrYyl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfW89by5qb2luKCIgIik7dmFyIGg9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cmV0dXJuIGguc2V0QXR0cmlidXRlKCJwb2ludHMiLG8pLGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGguc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGguc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxhLmFwcGVuZChoKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5fY3JlYXRlUG9wdXAoaCxlKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksdHQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbjtyZXR1cm4gayh0aGlzLHIpLChuPWUuY2FsbCh0aGlzLHQpKS5jb250YWluZXJDbGFzc05hbWU9InBvbHlnb25Bbm5vdGF0aW9uIixuLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWdvbiIsbn1yZXR1cm4geChyKX0oWiksZXQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJjYXJldEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxydD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYSxvO2sodGhpcyxyKTt2YXIgcz0hISh0LmRhdGEuaGFzUG9wdXB8fG51bGwhPT0obj10LmRhdGEudGl0bGVPYmopJiZ2b2lkIDAhPT1uJiZuLnN0cnx8bnVsbCE9PShpPXQuZGF0YS5jb250ZW50c09iaikmJnZvaWQgMCE9PWkmJmkuc3RyfHxudWxsIT09KGE9dC5kYXRhLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybihvPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpzLGlnbm9yZUJvcmRlcjohMH0pKS5jb250YWluZXJDbGFzc05hbWU9Imlua0Fubm90YXRpb24iLG8uc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5bGluZSIsb31yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO3ZhciB0LGU9dGhpcy5kYXRhLHI9QyhlLnJlY3QpLG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShuLGksITApLG89ZyhlLmlua0xpc3RzKTt0cnl7Zm9yKG8ucygpOyEodD1vLm4oKSkuZG9uZTspe3ZhciBzLGw9dC52YWx1ZSx1PVtdLGM9ZyhsKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciBoPXMudmFsdWUsZj1oLngtZS5yZWN0WzBdLGQ9ZS5yZWN0WzNdLWgueTt1LnB1c2goIiIuY29uY2F0KGYsIiwiKS5jb25jYXQoZCkpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX11PXUuam9pbigiICIpO3ZhciBwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO3Auc2V0QXR0cmlidXRlKCJwb2ludHMiLHUpLHAuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLHAuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLHAuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSx0aGlzLl9jcmVhdGVQb3B1cChwLGUpLGEuYXBwZW5kKHApfX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdGhpcy5jb250YWluZXIuYXBwZW5kKGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxudD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJoaWdobGlnaHRBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iaGlnaGxpZ2h0QW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxpdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJ1bmRlcmxpbmVBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idW5kZXJsaW5lQW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxhdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJzcXVpZ2dseUFubm90YXRpb24iKToodGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzcXVpZ2dseUFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksb3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMCxjcmVhdGVRdWFkcmlsYXRlcmFsczohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygic3RyaWtlb3V0QW5ub3RhdGlvbiIpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InN0cmlrZW91dEFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksc3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzdGFtcEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxsdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGE7ayh0aGlzLHIpO3ZhciBvPShhPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMH0pKS5kYXRhLmZpbGUscz1vLmZpbGVuYW1lLGw9by5jb250ZW50O3JldHVybiBhLmZpbGVuYW1lPSgwLGkuZ2V0RmlsZW5hbWVGcm9tVXJsKShzLCEwKSxhLmNvbnRlbnQ9bCxudWxsPT09KG49YS5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PW58fG4uZGlzcGF0Y2goImZpbGVhdHRhY2htZW50YW5ub3RhdGlvbiIse3NvdXJjZTpwKGEpLGZpbGVuYW1lOnMsY29udGVudDpsfSksYX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyO3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc0FwcGVhcmFuY2U/cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKToocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSkuc3JjPSIiLmNvbmNhdCh0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCwiYW5ub3RhdGlvbi0iKS5jb25jYXQoL3BhcGVyY2xpcC9pLnRlc3QodGhpcy5kYXRhLm5hbWUpPyJwYXBlcmNsaXAiOiJwdXNocGluIiwiLnN2ZyIpLHIuY2xhc3NOYW1lPSJwb3B1cFRyaWdnZXJBcmVhIixyLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIix0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKSwhdGhpcy5kYXRhLmhhc1BvcHVwJiYobnVsbCE9PSh0PXRoaXMuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PXQmJnQuc3RyfHxudWxsIT09KGU9dGhpcy5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09ZSYmZS5zdHJ8fHRoaXMuZGF0YS5yaWNoVGV4dCkmJnRoaXMuX2NyZWF0ZVBvcHVwKHIsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXJ9fSx7a2V5OiJfZG93bmxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZG93bmxvYWRNYW5hZ2VyKXx8dm9pZCAwPT09dHx8dC5vcGVuT3JEb3dubG9hZERhdGEodGhpcy5jb250YWluZXIsdGhpcy5jb250ZW50LHRoaXMuZmlsZW5hbWUpfX1dKSxyfShGKSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtrKHRoaXMsdCl9cmV0dXJuIHgodCxudWxsLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbnMsbz1lLmRpdixzPWUudmlld3BvcnQsdT1lLmFjY2Vzc2liaWxpdHlNYW5hZ2VyOygwLGkuc2V0TGF5ZXJEaW1lbnNpb25zKShvLHMpO3ZhciBjLGg9e2RhdGE6bnVsbCxsYXllcjpvLHBhZ2U6ZS5wYWdlLHZpZXdwb3J0OnMsbGlua1NlcnZpY2U6ZS5saW5rU2VydmljZSxkb3dubG9hZE1hbmFnZXI6ZS5kb3dubG9hZE1hbmFnZXIsaW1hZ2VSZXNvdXJjZXNQYXRoOmUuaW1hZ2VSZXNvdXJjZXNQYXRofHwiIixyZW5kZXJGb3JtczohMSE9PWUucmVuZGVyRm9ybXMsc3ZnRmFjdG9yeTpuZXcgaS5ET01TVkdGYWN0b3J5LGFubm90YXRpb25TdG9yYWdlOmUuYW5ub3RhdGlvblN0b3JhZ2V8fG5ldyBhLkFubm90YXRpb25TdG9yYWdlLGVuYWJsZVNjcmlwdGluZzohMD09PWUuZW5hYmxlU2NyaXB0aW5nLGhhc0pTQWN0aW9uczplLmhhc0pTQWN0aW9ucyxmaWVsZE9iamVjdHM6ZS5maWVsZE9iamVjdHN9LGY9MCxkPWcocik7dHJ5e2ZvcihkLnMoKTshKGM9ZC5uKCkpLmRvbmU7KXt2YXIgcD1jLnZhbHVlO2lmKHAuYW5ub3RhdGlvblR5cGUhPT1uLkFubm90YXRpb25UeXBlLlBPUFVQKXt2YXIgdj1DKHAucmVjdCkseT12LndpZHRoLG09di5oZWlnaHQ7aWYoeTw9MHx8bTw9MCljb250aW51ZX1oLmRhdGE9cDt2YXIgYj1PLmNyZWF0ZShoKTtpZihiLmlzUmVuZGVyYWJsZSl7dmFyIF89Yi5yZW5kZXIoKTtpZihwLmhpZGRlbiYmKF8uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksQXJyYXkuaXNBcnJheShfKSl7dmFyIHcsQT1nKF8pO3RyeXtmb3IoQS5zKCk7ISh3PUEubigpKS5kb25lOyl7dmFyIGs9dy52YWx1ZTtrLnN0eWxlLnpJbmRleD1mKyssbCh0LHQsY3QpLmNhbGwodCxrLHAuaWQsbyx1KX19Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9fWVsc2UgXy5zdHlsZS56SW5kZXg9ZisrLGIgaW5zdGFuY2VvZiBYP28ucHJlcGVuZChfKTpsKHQsdCxjdCkuY2FsbCh0LF8scC5pZCxvLHUpfX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9bCh0aGlzLHQsaHQpLmNhbGwodGhpcyxvLGUuYW5ub3RhdGlvbkNhbnZhc01hcCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxuPWUuZGl2LGE9ZS52aWV3cG9ydDsoMCxpLnNldExheWVyRGltZW5zaW9ucykobix7cm90YXRpb246YS5yb3RhdGlvbn0pLGwodGhpcyx0LGh0KS5jYWxsKHRoaXMsbixyKSxuLmhpZGRlbj0hMX19XSksdH0oKTtmdW5jdGlvbiBjdCh0LGUscixuKXt2YXIgYT10LmZpcnN0Q2hpbGR8fHQ7YS5pZD0iIi5jb25jYXQoaS5Bbm5vdGF0aW9uUHJlZml4KS5jb25jYXQoZSksci5hcHBlbmQodCksbnVsbD09bnx8bi5tb3ZlRWxlbWVudEluRE9NKHIsdCxhLCExKX1mdW5jdGlvbiBodCh0LGUpe2lmKGUpe3ZhciByLG49ZyhlKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPWIoci52YWx1ZSwyKSxhPWlbMF0sbz1pWzFdLHM9dC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdChhLCciXScpKTtpZihzKXt2YXIgbD1zLmZpcnN0Q2hpbGQ7bD8iQ0FOVkFTIj09PWwubm9kZU5hbWU/bC5yZXBsYWNlV2l0aChvKTpsLmJlZm9yZShvKTpzLmFwcGVuZChvKX19fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfWUuY2xlYXIoKX19ZS5Bbm5vdGF0aW9uTGF5ZXI9dXR9LCh0LGUpPT57ZnVuY3Rpb24gcih0KXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scih0KX1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBpKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aSh0LGUpOnZvaWQgMH19KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBpKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1yKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PXIoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGguZmxvb3IoMjU1Kk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ29sb3JDb252ZXJ0ZXJzPXZvaWQgMDt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToiQ01ZS19HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsNCkscj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVyblsiRyIsMS1NYXRoLm1pbigxLC4zKnIrLjU5KmErLjExKmkrbyldfX0se2tleToiR19DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm5bIkNNWUsiLDAsMCwwLDEtbih0LDEpWzBdXX19LHtrZXk6IkdfUkdCIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMSlbMF07cmV0dXJuWyJSR0IiLGUsZSxlXX19LHtrZXk6IkdfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9byhuKHQsMSlbMF0pO3JldHVybiIjIi5jb25jYXQoZSkuY29uY2F0KGUpLmNvbmNhdChlKX19LHtrZXk6IlJHQl9HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMyk7cmV0dXJuWyJHIiwuMyplWzBdKy41OSplWzFdKy4xMSplWzJdXX19LHtrZXk6IlJHQl9IVE1MIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1vKHIpLGw9byhpKSx1PW8oYSk7cmV0dXJuIiMiLmNvbmNhdChzKS5jb25jYXQobCkuY29uY2F0KHUpfX0se2tleToiVF9IVE1MIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIjMDAwMDAwMDAifX0se2tleToiQ01ZS19SR0IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW4odCw0KSxyPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuWyJSR0IiLDEtTWF0aC5taW4oMSxyK28pLDEtTWF0aC5taW4oMSxhK28pLDEtTWF0aC5taW4oMSxpK28pXX19LHtrZXk6IkNNWUtfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5DTVlLX1JHQih0KS5zbGljZSgxKTtyZXR1cm4gdGhpcy5SR0JfSFRNTChlKX19LHtrZXk6IlJHQl9DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj0xLWVbMF0saT0xLWVbMV0sYT0xLWVbMl07cmV0dXJuWyJDTVlLIixyLGksYSxNYXRoLm1pbihyLGksYSldfX1dLG51bGwmJmEoZS5wcm90b3R5cGUsbnVsbCksciYmYShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5Db2xvckNvbnZlcnRlcnM9c30sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlhmYUxheWVyPXZvaWQgMDt2YXIgbj1yKDE0OSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0saSh0KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fHModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPXModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLGw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2w9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBhfX19fWZ1bmN0aW9uIHModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGwodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBsKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1pKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpfXZhciBlLHI7cmV0dXJuIGU9dCxyPVt7a2V5OiJzZXR1cFN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bi5nZXRWYWx1ZShlLHt2YWx1ZTpudWxsfSk7c3dpdGNoKHIubmFtZSl7Y2FzZSJ0ZXh0YXJlYSI6aWYobnVsbCE9PWEudmFsdWUmJih0LnRleHRDb250ZW50PWEudmFsdWUpLCJwcmludCI9PT1pKWJyZWFrO3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLChmdW5jdGlvbih0KXtuLnNldFZhbHVlKGUse3ZhbHVlOnQudGFyZ2V0LnZhbHVlfSl9KSk7YnJlYWs7Y2FzZSJpbnB1dCI6aWYoInJhZGlvIj09PXIuYXR0cmlidXRlcy50eXBlfHwiY2hlY2tib3giPT09ci5hdHRyaWJ1dGVzLnR5cGUpe2lmKGEudmFsdWU9PT1yLmF0dHJpYnV0ZXMueGZhT24/dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCEwKTphLnZhbHVlPT09ci5hdHRyaWJ1dGVzLnhmYU9mZiYmdC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSwicHJpbnQiPT09aSlicmVhazt0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQuY2hlY2tlZD90LnRhcmdldC5nZXRBdHRyaWJ1dGUoInhmYU9uIik6dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJ4ZmFPZmYiKX0pfSkpfWVsc2V7aWYobnVsbCE9PWEudmFsdWUmJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYS52YWx1ZSksInByaW50Ij09PWkpYnJlYWs7dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQudmFsdWV9KX0pKX1icmVhaztjYXNlInNlbGVjdCI6aWYobnVsbCE9PWEudmFsdWUpe3ZhciBzLGw9byhyLmNoaWxkcmVuKTt0cnl7Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7dS5hdHRyaWJ1dGVzLnZhbHVlPT09YS52YWx1ZSYmKHUuYXR0cmlidXRlcy5zZWxlY3RlZD0hMCl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX10LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24odCl7dmFyIHI9dC50YXJnZXQub3B0aW9ucyxpPS0xPT09ci5zZWxlY3RlZEluZGV4PyIiOnJbci5zZWxlY3RlZEluZGV4XS52YWx1ZTtuLnNldFZhbHVlKGUse3ZhbHVlOml9KX0pKX19fSx7a2V5OiJzZXRBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10Lmh0bWwscj10LmVsZW1lbnQsbj10LnN0b3JhZ2UsaT12b2lkIDA9PT1uP251bGw6bixvPXQuaW50ZW50LHM9dC5saW5rU2VydmljZSxsPXIuYXR0cmlidXRlcyx1PWUgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudDsicmFkaW8iPT09bC50eXBlJiYobC5uYW1lPSIiLmNvbmNhdChsLm5hbWUsIi0iKS5jb25jYXQobykpO2Zvcih2YXIgYz0wLGg9T2JqZWN0LmVudHJpZXMobCk7YzxoLmxlbmd0aDtjKyspe3ZhciBmPWEoaFtjXSwyKSxkPWZbMF0scD1mWzFdO2lmKG51bGwhPXApc3dpdGNoKGQpe2Nhc2UiY2xhc3MiOnAubGVuZ3RoJiZlLnNldEF0dHJpYnV0ZShkLHAuam9pbigiICIpKTticmVhaztjYXNlImRhdGFJZCI6YnJlYWs7Y2FzZSJpZCI6ZS5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIscCk7YnJlYWs7Y2FzZSJzdHlsZSI6T2JqZWN0LmFzc2lnbihlLnN0eWxlLHApO2JyZWFrO2Nhc2UidGV4dENvbnRlbnQiOmUudGV4dENvbnRlbnQ9cDticmVhaztkZWZhdWx0OighdXx8ImhyZWYiIT09ZCYmIm5ld1dpbmRvdyIhPT1kKSYmZS5zZXRBdHRyaWJ1dGUoZCxwKX19dSYmcy5hZGRMaW5rQXR0cmlidXRlcyhlLGwuaHJlZixsLm5ld1dpbmRvdyksaSYmbC5kYXRhSWQmJnRoaXMuc2V0dXBTdG9yYWdlKGUsbC5kYXRhSWQscixpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5hbm5vdGF0aW9uU3RvcmFnZSxyPXQubGlua1NlcnZpY2UsaT10LnhmYUh0bWwscz10LmludGVudHx8ImRpc3BsYXkiLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2kuYXR0cmlidXRlcyYmdGhpcy5zZXRBdHRyaWJ1dGVzKHtodG1sOmwsZWxlbWVudDppLGludGVudDpzLGxpbmtTZXJ2aWNlOnJ9KTt2YXIgdT1bW2ksLTEsbF1dLGM9dC5kaXY7aWYoYy5hcHBlbmQobCksdC52aWV3cG9ydCl7dmFyIGg9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTtjLnN0eWxlLnRyYW5zZm9ybT1ofSJyaWNoVGV4dCIhPT1zJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ4ZmFMYXllciB4ZmFGb250Iik7Zm9yKHZhciBmPVtdO3UubGVuZ3RoPjA7KXt2YXIgZCxwLHY9YSh1LmF0KC0xKSwzKSx5PXZbMF0sbT12WzFdLGc9dlsyXTtpZihtKzEhPT15LmNoaWxkcmVuLmxlbmd0aCl7dmFyIGI9eS5jaGlsZHJlblsrK3UuYXQoLTEpWzFdXTtpZihudWxsIT09Yil7dmFyIF89Yi5uYW1lO2lmKCIjdGV4dCIhPT1fKXt2YXIgdz12b2lkIDA7aWYodz1udWxsIT09KGQ9YikmJnZvaWQgMCE9PWQmJm51bGwhPT0ocD1kLmF0dHJpYnV0ZXMpJiZ2b2lkIDAhPT1wJiZwLnhtbG5zP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiLmF0dHJpYnV0ZXMueG1sbnMsXyk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChfKSxnLmFwcGVuZCh3KSxiLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyh7aHRtbDp3LGVsZW1lbnQ6YixzdG9yYWdlOmUsaW50ZW50OnMsbGlua1NlcnZpY2U6cn0pLGIuY2hpbGRyZW4mJmIuY2hpbGRyZW4ubGVuZ3RoPjApdS5wdXNoKFtiLC0xLHddKTtlbHNlIGlmKGIudmFsdWUpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIudmFsdWUpO24uWGZhVGV4dC5zaG91bGRCdWlsZFRleHQoXykmJmYucHVzaChBKSx3LmFwcGVuZChBKX19ZWxzZXt2YXIgaz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiLnZhbHVlKTtmLnB1c2goayksZy5hcHBlbmQoayl9fX1lbHNlIHUucG9wKCl9dmFyIFMseD1vKGMucXVlcnlTZWxlY3RvckFsbCgiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWEiKSk7dHJ5e2Zvcih4LnMoKTshKFM9eC5uKCkpLmRvbmU7KVMudmFsdWUuc2V0QXR0cmlidXRlKCJyZWFkT25seSIsITApfWNhdGNoKHQpe3guZSh0KX1maW5hbGx5e3guZigpfXJldHVybnt0ZXh0RGl2czpmfX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTt0LmRpdi5zdHlsZS50cmFuc2Zvcm09ZSx0LmRpdi5oaWRkZW49ITF9fV0sbnVsbCYmdShlLnByb3RvdHlwZSxudWxsKSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYUxheWVyPWN9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlNWR0dyYXBoaWNzPXZvaWQgMDt2YXIgaT1yKDEzNyksYT1yKDEpLG89cigzKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBoKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Yyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGgodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBoKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiBlJiZmKHQucHJvdG90eXBlLGUpLHImJmYodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgdj1kKChmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLCgwLGEudW5yZWFjaGFibGUpKCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzIil9KSk7ZS5TVkdHcmFwaGljcz12O3ZhciB5PWZ1bmN0aW9uKHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHQudG9TdHJpbmcoKTt2YXIgZT10LnRvRml4ZWQoMTApLHI9ZS5sZW5ndGgtMTtpZigiMCIhPT1lW3JdKXJldHVybiBlO2Rve3ItLX13aGlsZSgiMCI9PT1lW3JdKTtyZXR1cm4gZS5zdWJzdHJpbmcoMCwiLiI9PT1lW3JdP3I6cisxKX0sbT1mdW5jdGlvbih0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOiJzY2FsZSgiLmNvbmNhdCh5KHRbMF0pLCIgIikuY29uY2F0KHkodFszXSksIikiKTtpZih0WzBdPT09dFszXSYmdFsxXT09PS10WzJdKXt2YXIgZT0xODAqTWF0aC5hY29zKHRbMF0pL01hdGguUEk7cmV0dXJuInJvdGF0ZSgiLmNvbmNhdCh5KGUpLCIpIil9fWVsc2UgaWYoMT09PXRbMF0mJjA9PT10WzFdJiYwPT09dFsyXSYmMT09PXRbM10pcmV0dXJuInRyYW5zbGF0ZSgiLmNvbmNhdCh5KHRbNF0pLCIgIikuY29uY2F0KHkodFs1XSksIikiKTtyZXR1cm4ibWF0cml4KCIuY29uY2F0KHkodFswXSksIiAiKS5jb25jYXQoeSh0WzFdKSwiICIpLmNvbmNhdCh5KHRbMl0pLCIgIikuY29uY2F0KHkodFszXSksIiAiKS5jb25jYXQoeSh0WzRdKSwiICIpKyIiLmNvbmNhdCh5KHRbNV0pLCIpIil9LGc9Im5vcm1hbCIsYj0ibm9ybWFsIixfPSIjMDAwMDAwIix3PVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sQT1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLGs9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihVUkwuY3JlYXRlT2JqZWN0VVJMJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJiFyKXJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZTplfSkpO2Zvcih2YXIgbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGk9ImRhdGE6Ii5jb25jYXQoZSwiO2Jhc2U2NCwiKSxhPTAsbz10Lmxlbmd0aDthPG87YSs9Myl7dmFyIHM9MjU1JnRbYV0sbD0yNTUmdFthKzFdLHU9MjU1JnRbYSsyXTtpKz1uW3M+PjJdK25bKDMmcyk8PDR8bD4+NF0rblthKzE8bz8oMTUmbCk8PDJ8dT4+Njo2NF0rblthKzI8bz82MyZ1OjY0XX1yZXR1cm4gaX0sUz1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSksZT1uZXcgSW50MzJBcnJheSgyNTYpLHI9MDtyPDI1NjtyKyspe2Zvcih2YXIgbj1yLGk9MDtpPDg7aSsrKW49MSZuPzM5ODgyOTIzODRebj4+MSYyMTQ3NDgzNjQ3Om4+PjEmMjE0NzQ4MzY0NztlW3JdPW59ZnVuY3Rpb24gcyh0LHIsbixpKXt2YXIgYT1pLG89ci5sZW5ndGg7blthXT1vPj4yNCYyNTUsblthKzFdPW8+PjE2JjI1NSxuW2ErMl09bz4+OCYyNTUsblthKzNdPTI1NSZvLG5bYSs9NF09MjU1JnQuY2hhckNvZGVBdCgwKSxuW2ErMV09MjU1JnQuY2hhckNvZGVBdCgxKSxuW2ErMl09MjU1JnQuY2hhckNvZGVBdCgyKSxuW2ErM109MjU1JnQuY2hhckNvZGVBdCgzKSxhKz00LG4uc2V0KHIsYSk7dmFyIHM9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgaT0tMSxhPXI7YTxuO2ErKyl7dmFyIG89MjU1JihpXnRbYV0pO2k9aT4+PjheZVtvXX1yZXR1cm4tMV5pfShuLGkrNCxhKz1yLmxlbmd0aCk7blthXT1zPj4yNCYyNTUsblthKzFdPXM+PjE2JjI1NSxuW2ErMl09cz4+OCYyNTUsblthKzNdPTI1NSZzfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgscj02NTUzNSxuPU1hdGguY2VpbChlL3IpLGk9bmV3IFVpbnQ4QXJyYXkoMitlKzUqbis0KSxhPTA7aVthKytdPTEyMCxpW2ErK109MTU2O2Zvcih2YXIgbz0wO2U+cjspaVthKytdPTAsaVthKytdPTI1NSxpW2ErK109MjU1LGlbYSsrXT0wLGlbYSsrXT0wLGkuc2V0KHQuc3ViYXJyYXkobyxvK3IpLGEpLGErPXIsbys9cixlLT1yO2lbYSsrXT0xLGlbYSsrXT0yNTUmZSxpW2ErK109ZT4+OCYyNTUsaVthKytdPTI1NSZ+ZSxpW2ErK109KDY1NTM1Jn5lKT4+OCYyNTUsaS5zZXQodC5zdWJhcnJheShvKSxhKSxhKz10Lmxlbmd0aC1vO3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MSxpPTAsYT0wO2E8cjsrK2EpaT0oaSsobj0obisoMjU1JnRbYV0pKSU2NTUyMSkpJTY1NTIxO3JldHVybiBpPDwxNnxufSh0LDAsdC5sZW5ndGgpO3JldHVybiBpW2ErK109cz4+MjQmMjU1LGlbYSsrXT1zPj4xNiYyNTUsaVthKytdPXM+PjgmMjU1LGlbYSsrXT0yNTUmcyxpfXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3ZhciB1LGMsaCxmPWUud2lkdGgsZD1lLmhlaWdodCxwPWUuZGF0YTtzd2l0Y2gocil7Y2FzZSBhLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpjPTAsdT0xLGg9Zis3Pj4zO2JyZWFrO2Nhc2UgYS5JbWFnZUtpbmQuUkdCXzI0QlBQOmM9Mix1PTgsaD0zKmY7YnJlYWs7Y2FzZSBhLkltYWdlS2luZC5SR0JBXzMyQlBQOmM9Nix1PTgsaD00KmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9Zm9yKHZhciB2PW5ldyBVaW50OEFycmF5KCgxK2gpKmQpLHk9MCxtPTAsZz0wO2c8ZDsrK2cpdlt5KytdPTAsdi5zZXQocC5zdWJhcnJheShtLG0raCkseSksbSs9aCx5Kz1oO2lmKHI9PT1hLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCYmaSl7eT0wO2Zvcih2YXIgYj0wO2I8ZDtiKyspe3krKztmb3IodmFyIF89MDtfPGg7XysrKXZbeSsrXV49MjU1fX12YXIgdz1uZXcgVWludDhBcnJheShbZj4+MjQmMjU1LGY+PjE2JjI1NSxmPj44JjI1NSwyNTUmZixkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHUsYywwLDAsMF0pLEE9ZnVuY3Rpb24odCl7aWYoIW8uaXNOb2RlSlMpcmV0dXJuIGwodCk7dHJ5e3ZhciBlO2U9cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKT49OD90OkJ1ZmZlci5mcm9tKHQpO3ZhciByPXJlcXVpcmUoInpsaWIiKS5kZWZsYXRlU3luYyhlLHtsZXZlbDo5fSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBVaW50OEFycmF5P3I6bmV3IFVpbnQ4QXJyYXkocil9Y2F0Y2godCl7KDAsYS53YXJuKSgiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICIrdCl9cmV0dXJuIGwodCl9KHYpLFM9dC5sZW5ndGgrMzYrdy5sZW5ndGgrQS5sZW5ndGgseD1uZXcgVWludDhBcnJheShTKSxFPTA7cmV0dXJuIHguc2V0KHQsRSkscygiSUhEUiIsdyx4LEUrPXQubGVuZ3RoKSxzKCJJREFUQSIsQSx4LEUrPTEyK3cubGVuZ3RoKSxFKz0xMitBLmxlbmd0aCxzKCJJRU5EIixuZXcgVWludDhBcnJheSgwKSx4LEUpLGsoeCwiaW1hZ2UvcG5nIixuKX0oZSx2b2lkIDA9PT1lLmtpbmQ/YS5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6ZS5raW5kLHIsbil9fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLHRoaXMuZm9udFNpemVTY2FsZT0xLHRoaXMuZm9udFdlaWdodD1iLHRoaXMuZm9udFNpemU9MCx0aGlzLnRleHRNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwsdGhpcy50ZXh0TWF0cml4U2NhbGU9MSx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLmxpbmVYPTAsdGhpcy5saW5lWT0wLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wLHRoaXMuZmlsbENvbG9yPV8sdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5maWxsQWxwaGE9MSx0aGlzLnN0cm9rZUFscGhhPTEsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmxpbmVKb2luPSIiLHRoaXMubGluZUNhcD0iIix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLmRhc2hBcnJheT1bXSx0aGlzLmRhc2hQaGFzZT0wLHRoaXMuZGVwZW5kZW5jaWVzPVtdLHRoaXMuYWN0aXZlQ2xpcFVybD1udWxsLHRoaXMuY2xpcEdyb3VwPW51bGwsdGhpcy5tYXNrSWQ9IiJ9cmV0dXJuIGQodCxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fSx7a2V5OiJzZXRDdXJyZW50UG9pbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9fV0pLHR9KCksRT0wLFA9MCxUPTA7ZS5TVkdHcmFwaGljcz12PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Zm9yKHZhciBvIGluIHAodGhpcyx0KSwoMCxpLmRlcHJlY2F0ZWQpKCJUaGUgU1ZHIGJhY2stZW5kIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGFuZCAqbWF5KiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5zdmdGYWN0b3J5PW5ldyBpLkRPTVNWR0ZhY3RvcnksdGhpcy5jdXJyZW50PW5ldyB4LHRoaXMudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHRoaXMudHJhbnNmb3JtU3RhY2s9W10sdGhpcy5leHRyYVN0YWNrPVtdLHRoaXMuY29tbW9uT2Jqcz1lLHRoaXMub2Jqcz1yLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEsdGhpcy5lbWJlZEZvbnRzPSExLHRoaXMuZW1iZWRkZWRGb250cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY3NzU3R5bGU9bnVsbCx0aGlzLmZvcmNlRGF0YVNjaGVtYT0hIW4sdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmc9W10sYS5PUFMpdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmdbYS5PUFNbb11dPW99cmV0dXJuIGQodCxbe2tleToiZ2V0T2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zdGFydHNXaXRoKCJnXyIpP3RoaXMuY29tbW9uT2Jqcy5nZXQodCk6dGhpcy5vYmpzLmdldCh0KTplfX0se2tleToic2F2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy50cmFuc2Zvcm1NYXRyaXgpO3ZhciB0PXRoaXMuY3VycmVudDt0aGlzLmV4dHJhU3RhY2sucHVzaCh0KSx0aGlzLmN1cnJlbnQ9dC5jbG9uZSgpfX0se2tleToicmVzdG9yZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybU1hdHJpeD10aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpLHRoaXMuY3VycmVudD10aGlzLmV4dHJhU3RhY2sucG9wKCksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMudGdycD1udWxsfX0se2tleToiZ3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2F2ZSgpLHRoaXMuZXhlY3V0ZU9wVHJlZSh0KSx0aGlzLnJlc3RvcmUoKX19LHtrZXk6ImxvYWREZXBlbmRlbmNpZXMiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9dC5mbkFycmF5LG49dC5hcmdzQXJyYXksaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldPT09YS5PUFMuZGVwZW5kZW5jeSl7dmFyIHMsbD11KG5baV0pO3RyeXt2YXIgYz1mdW5jdGlvbigpe3ZhciB0PXMudmFsdWUscj10LnN0YXJ0c1dpdGgoImdfIik/ZS5jb21tb25PYmpzOmUub2JqcyxuPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtyLmdldCh0LGUpfSkpO2UuY3VycmVudC5kZXBlbmRlbmNpZXMucHVzaChuKX07Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspYygpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX1yZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyl9fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgcz1bdCxlLHIsbixpLG9dO3RoaXMudHJhbnNmb3JtTWF0cml4PWEuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgscyksdGhpcy50Z3JwPW51bGx9fSx7a2V5OiJnZXRTVkciLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLnZpZXdwb3J0PWU7dmFyIG49dGhpcy5faW5pdGlhbGl6ZShlKTtyZXR1cm4gdGhpcy5sb2FkRGVwZW5kZW5jaWVzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHIudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHIuZXhlY3V0ZU9wVHJlZShyLmNvbnZlcnRPcExpc3QodCkpLG59KSl9fSx7a2V5OiJjb252ZXJ0T3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcscj10LmFyZ3NBcnJheSxuPXQuZm5BcnJheSxpPVtdLGE9MCxvPW4ubGVuZ3RoO2E8bzthKyspe3ZhciBzPW5bYV07aS5wdXNoKHtmbklkOnMsZm46ZVtzXSxhcmdzOnJbYV19KX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPVtdLGk9dSh0KTt0cnl7Zm9yKGkucygpOyEoZT1pLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWU7InNhdmUiIT09YS5mbj8icmVzdG9yZSI9PT1hLmZuP3I9bi5wb3AoKTpyLnB1c2goYSk6KHIucHVzaCh7Zm5JZDo5MixmbjoiZ3JvdXAiLGl0ZW1zOltdfSksbi5wdXNoKHIpLHI9ci5hdCgtMSkuaXRlbXMpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcn0oaSl9fSx7a2V5OiJleGVjdXRlT3BUcmVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlLGk9bi5mbixvPW4uZm5JZCxzPW4uYXJncztzd2l0Y2goMHxvKXtjYXNlIGEuT1BTLmJlZ2luVGV4dDp0aGlzLmJlZ2luVGV4dCgpO2JyZWFrO2Nhc2UgYS5PUFMuZGVwZW5kZW5jeTpicmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6dGhpcy5zZXRMZWFkaW5nKHMpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OnRoaXMuc2V0TGVhZGluZ01vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGb250OnRoaXMuc2V0Rm9udChzKTticmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmNhc2UgYS5PUFMuc2hvd1NwYWNlZFRleHQ6dGhpcy5zaG93VGV4dChzWzBdKTticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6dGhpcy5lbmRUZXh0KCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDp0aGlzLm1vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRDaGFyU3BhY2luZzp0aGlzLnNldENoYXJTcGFjaW5nKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6dGhpcy5zZXRXb3JkU3BhY2luZyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEhTY2FsZTp0aGlzLnNldEhTY2FsZShzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRNYXRyaXg6dGhpcy5zZXRUZXh0TWF0cml4KHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRSaXNlOnRoaXMuc2V0VGV4dFJpc2Uoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTp0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZVdpZHRoOnRoaXMuc2V0TGluZVdpZHRoKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZUpvaW46dGhpcy5zZXRMaW5lSm9pbihzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldExpbmVDYXA6dGhpcy5zZXRMaW5lQ2FwKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TWl0ZXJMaW1pdDp0aGlzLnNldE1pdGVyTGltaXQoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsUkdCQ29sb3I6dGhpcy5zZXRGaWxsUkdCQ29sb3Ioc1swXSxzWzFdLHNbMl0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6dGhpcy5zZXRTdHJva2VSR0JDb2xvcihzWzBdLHNbMV0sc1syXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvck46dGhpcy5zZXRTdHJva2VDb2xvck4ocyk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOnRoaXMuc2V0RmlsbENvbG9yTihzKTticmVhaztjYXNlIGEuT1BTLnNoYWRpbmdGaWxsOnRoaXMuc2hhZGluZ0ZpbGwoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXREYXNoOnRoaXMuc2V0RGFzaChzWzBdLHNbMV0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0RmxhdG5lc3M6dGhpcy5zZXRGbGF0bmVzcyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEdTdGF0ZTp0aGlzLnNldEdTdGF0ZShzWzBdKTticmVhaztjYXNlIGEuT1BTLmZpbGw6dGhpcy5maWxsKCk7YnJlYWs7Y2FzZSBhLk9QUy5lb0ZpbGw6dGhpcy5lb0ZpbGwoKTticmVhaztjYXNlIGEuT1BTLnN0cm9rZTp0aGlzLnN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuZmlsbFN0cm9rZTp0aGlzLmZpbGxTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmVvRmlsbFN0cm9rZTp0aGlzLmVvRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xpcDp0aGlzLmNsaXAoIm5vbnplcm8iKTticmVhaztjYXNlIGEuT1BTLmVvQ2xpcDp0aGlzLmNsaXAoImV2ZW5vZGQiKTticmVhaztjYXNlIGEuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazp0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO2JyZWFrO2Nhc2UgYS5PUFMucGFpbnRJbWFnZVhPYmplY3Q6dGhpcy5wYWludEltYWdlWE9iamVjdChzWzBdKTticmVhaztjYXNlIGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OnRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6dGhpcy5wYWludEltYWdlTWFza1hPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46dGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oc1swXSxzWzFdKTticmVhaztjYXNlIGEuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6dGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7YnJlYWs7Y2FzZSBhLk9QUy5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGgoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlU3Ryb2tlOnRoaXMuY2xvc2VTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlRmlsbFN0cm9rZTp0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6dGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmU6dGhpcy5uZXh0TGluZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMudHJhbnNmb3JtKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLmNvbnN0cnVjdFBhdGg6dGhpcy5jb25zdHJ1Y3RQYXRoKHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5lbmRQYXRoOnRoaXMuZW5kUGF0aCgpO2JyZWFrO2Nhc2UgOTI6dGhpcy5ncm91cChuLml0ZW1zKTticmVhaztkZWZhdWx0OigwLGEud2FybikoIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgIi5jb25jYXQoaSkpfX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX0se2tleToic2V0V29yZFNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC53b3JkU3BhY2luZz10fX0se2tleToic2V0Q2hhclNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5jaGFyU3BhY2luZz10fX0se2tleToibmV4dExpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX19LHtrZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmN1cnJlbnQ7by50ZXh0TWF0cml4PW8ubGluZU1hdHJpeD1bdCxlLHIsbixpLGFdLG8udGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSxvLng9by5saW5lWD0wLG8ueT1vLmxpbmVZPTAsby54Y29vcmRzPVtdLG8ueWNvb3Jkcz1bXSxvLnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSxvLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixvLmZvbnRGYW1pbHkpLG8udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIiwiIi5jb25jYXQoeShvLmZvbnRTaXplKSwicHgiKSksby50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1vLnkpKSxvLnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0Iiksby50eHRFbGVtZW50LmFwcGVuZChvLnRzcGFuKX19LHtrZXk6ImJlZ2luVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC54PXQubGluZVg9MCx0Lnk9dC5saW5lWT0wLHQudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWCx0LmxpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdC50ZXh0TWF0cml4U2NhbGU9MSx0LnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSx0LnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0IiksdC50eHRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIiksdC54Y29vcmRzPVtdLHQueWNvb3Jkcz1bXX19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3VycmVudDtyLng9ci5saW5lWCs9dCxyLnk9ci5saW5lWSs9ZSxyLnhjb29yZHM9W10sci55Y29vcmRzPVtdLHIudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHIudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHIuZm9udEZhbWlseSksci50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLCIiLmNvbmNhdCh5KHIuZm9udFNpemUpLCJweCIpKSxyLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLXIueSkpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udCxuPWUuZm9udFNpemU7aWYoMCE9PW4pe3ZhciBpLG89ZS5mb250U2l6ZVNjYWxlLHM9ZS5jaGFyU3BhY2luZyxsPWUud29yZFNwYWNpbmcsYz1lLmZvbnREaXJlY3Rpb24saD1lLnRleHRIU2NhbGUqYyxmPXIudmVydGljYWwsZD1mPzE6LTEscD1yLmRlZmF1bHRWTWV0cmljcyx2PW4qZS5mb250TWF0cml4WzBdLHc9MCxBPXUodCk7dHJ5e2ZvcihBLnMoKTshKGk9QS5uKCkpLmRvbmU7KXt2YXIgaz1pLnZhbHVlO2lmKG51bGwhPT1rKWlmKCJudW1iZXIiIT10eXBlb2Ygayl7dmFyIFM9KGsuaXNTcGFjZT9sOjApK3MseD1rLmZvbnRDaGFyLEU9dm9pZCAwLFA9dm9pZCAwLFQ9ay53aWR0aDtpZihmKXt2YXIgQz12b2lkIDAsTz1rLnZtZXRyaWN8fHA7Qz0tKEM9ay52bWV0cmljP09bMV06LjUqVCkqdjt2YXIgRj1PWzJdKnY7VD1PPy1PWzBdOlQsRT1DL28sUD0odytGKS9vfWVsc2UgRT13L28sUD0wOyhrLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSYmKGUueGNvb3Jkcy5wdXNoKGUueCtFKSxmJiZlLnljb29yZHMucHVzaCgtZS55K1ApLGUudHNwYW4udGV4dENvbnRlbnQrPXgpLHcrPWY/VCp2LVMqYzpUKnYrUypjfWVsc2Ugdys9ZCprKm4vMWUzO2Vsc2Ugdys9YypsfX1jYXRjaCh0KXtBLmUodCl9ZmluYWxseXtBLmYoKX1lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGUueGNvb3Jkcy5tYXAoeSkuam9pbigiICIpKSxmP2UudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZS55Y29vcmRzLm1hcCh5KS5qb2luKCIgIikpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIseSgtZS55KSksZj9lLnktPXc6ZS54Kz13KmgsZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtc2l6ZSIsIiIuY29uY2F0KHkoZS5mb250U2l6ZSksInB4IikpLGUuZm9udFN0eWxlIT09ZyYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXN0eWxlIixlLmZvbnRTdHlsZSksZS5mb250V2VpZ2h0IT09YiYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KTt2YXIgTT1lLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztpZihNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRT8oZS5maWxsQ29sb3IhPT1fJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGUuZmlsbENvbG9yKSxlLmZpbGxBbHBoYTwxJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsZS5maWxsQWxwaGEpKTplLnRleHRSZW5kZXJpbmdNb2RlPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSD9lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJ0cmFuc3BhcmVudCIpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0V8fE09PT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKXt2YXIgUj0xLyhlLnRleHRNYXRyaXhTY2FsZXx8MSk7dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhlLnRzcGFuLFIpfXZhciBJPWUudGV4dE1hdHJpeDswIT09ZS50ZXh0UmlzZSYmKChJPUkuc2xpY2UoKSlbNV0rPWUudGV4dFJpc2UpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCIiLmNvbmNhdChtKEkpLCIgc2NhbGUoIikuY29uY2F0KHkoaCksIiwgLTEpIikpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxlLnR4dEVsZW1lbnQuYXBwZW5kKGUudHNwYW4pLGUudHh0Z3JwLmFwcGVuZChlLnR4dEVsZW1lbnQpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGUudHh0RWxlbWVudCl9fX0se2tleToic2V0TGVhZGluZ01vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2V0TGVhZGluZygtZSksdGhpcy5tb3ZlVGV4dCh0LGUpfX0se2tleToiYWRkRm9udFN0eWxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5kYXRhKXRocm93IG5ldyBFcnJvcignYWRkRm9udFN0eWxlOiBObyBmb250IGRhdGEgYXZhaWxhYmxlLCBlbnN1cmUgdGhhdCB0aGUgImZvbnRFeHRyYVByb3BlcnRpZXMiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO3RoaXMuY3NzU3R5bGV8fCh0aGlzLmNzc1N0eWxlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6c3R5bGUiKSx0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInR5cGUiLCJ0ZXh0L2NzcyIpLHRoaXMuZGVmcy5hcHBlbmQodGhpcy5jc3NTdHlsZSkpO3ZhciBlPWsodC5kYXRhLHQubWltZXR5cGUsdGhpcy5mb3JjZURhdGFTY2hlbWEpO3RoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQrPSdAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6ICInLmNvbmNhdCh0LmxvYWRlZE5hbWUsJyI7JykrIiBzcmM6IHVybCgiLmNvbmNhdChlLCIpOyB9XG4iKX19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPXRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSksbj10WzFdO2UuZm9udD1yLCF0aGlzLmVtYmVkRm9udHN8fHIubWlzc2luZ0ZpbGV8fHRoaXMuZW1iZWRkZWRGb250c1tyLmxvYWRlZE5hbWVdfHwodGhpcy5hZGRGb250U3R5bGUociksdGhpcy5lbWJlZGRlZEZvbnRzW3IubG9hZGVkTmFtZV09ciksZS5mb250TWF0cml4PXIuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWDt2YXIgaT0ibm9ybWFsIjtyLmJsYWNrP2k9IjkwMCI6ci5ib2xkJiYoaT0iYm9sZCIpO3ZhciBvPXIuaXRhbGljPyJpdGFsaWMiOiJub3JtYWwiO248MD8obj0tbixlLmZvbnREaXJlY3Rpb249LTEpOmUuZm9udERpcmVjdGlvbj0xLGUuZm9udFNpemU9bixlLmZvbnRGYW1pbHk9ci5sb2FkZWROYW1lLGUuZm9udFdlaWdodD1pLGUuZm9udFN0eWxlPW8sZS50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1lLnkpKSxlLnhjb29yZHM9W10sZS55Y29vcmRzPVtdfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuY3VycmVudDtlLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyYmbnVsbCE9PSh0PWUudHh0RWxlbWVudCkmJnZvaWQgMCE9PXQmJnQuaGFzQ2hpbGROb2RlcygpJiYoZS5lbGVtZW50PWUudHh0RWxlbWVudCx0aGlzLmNsaXAoIm5vbnplcm8iKSx0aGlzLmVuZFBhdGgoKSl9fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9dCl9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGluZUNhcD13W3RdfX0se2tleToic2V0TGluZUpvaW4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5saW5lSm9pbj1BW3RdfX0se2tleToic2V0TWl0ZXJMaW1pdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldFN0cm9rZUFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9dH19LHtrZXk6InNldFN0cm9rZVJHQkNvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpfX0se2tleToic2V0RmlsbEFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPXR9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpLHRoaXMuY3VycmVudC50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksdGhpcy5jdXJyZW50Lnhjb29yZHM9W10sdGhpcy5jdXJyZW50Lnljb29yZHM9W119fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4odCl9fSx7a2V5OiJzZXRGaWxsQ29sb3JOIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuX21ha2VDb2xvck5fUGF0dGVybih0KX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpZXdwb3J0LndpZHRoLHI9dGhpcy52aWV3cG9ydC5oZWlnaHQsbj1hLlV0aWwuaW52ZXJzZVRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCksaT1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sbiksbz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAscl0sbikscz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2UsMF0sbiksbD1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2Uscl0sbiksdT1NYXRoLm1pbihpWzBdLG9bMF0sc1swXSxsWzBdKSxjPU1hdGgubWluKGlbMV0sb1sxXSxzWzFdLGxbMV0pLGg9TWF0aC5tYXgoaVswXSxvWzBdLHNbMF0sbFswXSksZj1NYXRoLm1heChpWzFdLG9bMV0sc1sxXSxsWzFdKSxkPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwieCIsdSksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixjKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixoLXUpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixmLWMpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpKSx0aGlzLmN1cnJlbnQuZmlsbEFscGhhPDEmJmQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1vcGFjaXR5Iix0aGlzLmN1cnJlbnQuZmlsbEFscGhhKSx0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChkKX19LHtrZXk6Il9tYWtlQ29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJUaWxpbmdQYXR0ZXJuIj09PXRbMF0/dGhpcy5fbWFrZVRpbGluZ1BhdHRlcm4odCk6dGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpfX0se2tleToiX21ha2VUaWxpbmdQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10WzFdLHI9dFsyXSxuPXRbM118fGEuSURFTlRJVFlfTUFUUklYLGk9bCh0WzRdLDQpLG89aVswXSx1PWlbMV0sYz1pWzJdLGg9aVszXSxmPXRbNV0sZD10WzZdLHA9dFs3XSx2PSJzaGFkaW5nIi5jb25jYXQoVCsrKSx5PWwoYS5VdGlsLm5vcm1hbGl6ZVJlY3QoW10uY29uY2F0KHMoYS5VdGlsLmFwcGx5VHJhbnNmb3JtKFtvLHVdLG4pKSxzKGEuVXRpbC5hcHBseVRyYW5zZm9ybShbYyxoXSxuKSkpKSw0KSxtPXlbMF0sZz15WzFdLGI9eVsyXSxfPXlbM10sdz1sKGEuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShuKSwyKSxBPWYqd1swXSxrPWQqd1sxXSxTPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0dGVybiIpO1Muc2V0QXR0cmlidXRlTlMobnVsbCwiaWQiLHYpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwicGF0dGVyblVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixBKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsayksUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiIi5jb25jYXQobSkpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIiIuY29uY2F0KGcpKTt2YXIgeD10aGlzLnN2ZyxFPXRoaXMudHJhbnNmb3JtTWF0cml4LFA9dGhpcy5jdXJyZW50LmZpbGxDb2xvcixDPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcixPPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoYi1tLF8tZyk7aWYodGhpcy5zdmc9Tyx0aGlzLnRyYW5zZm9ybU1hdHJpeD1uLDI9PT1wKXt2YXIgRj1hLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGEuVXRpbCxzKGUpKTt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPUYsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUZ9cmV0dXJuIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3QocikpLHRoaXMuc3ZnPXgsdGhpcy50cmFuc2Zvcm1NYXRyaXg9RSx0aGlzLmN1cnJlbnQuZmlsbENvbG9yPVAsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUMsUy5hcHBlbmQoTy5jaGlsZE5vZGVzWzBdKSx0aGlzLmRlZnMuYXBwZW5kKFMpLCJ1cmwoIyIuY29uY2F0KHYsIikiKX19LHtrZXk6Il9tYWtlU2hhZGluZ1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIHQmJih0PXRoaXMub2Jqcy5nZXQodCkpLHRbMF0pe2Nhc2UiUmFkaWFsQXhpYWwiOnZhciBlLHI9InNoYWRpbmciLmNvbmNhdChUKyspLG49dFszXTtzd2l0Y2godFsxXSl7Y2FzZSJheGlhbCI6dmFyIGk9dFs0XSxvPXRbNV07KGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpsaW5lYXJHcmFkaWVudCIpKS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsciksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngxIixpWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkxIixpWzFdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngyIixvWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkyIixvWzFdKTticmVhaztjYXNlInJhZGlhbCI6dmFyIHM9dFs0XSxsPXRbNV0sYz10WzZdLGg9dFs3XTsoZT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJhZGlhbEdyYWRpZW50IikpLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLGxbMF0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGxbMV0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsaCksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeCIsc1swXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeSIsc1sxXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmciIsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogIi5jb25jYXQodFsxXSkpfXZhciBmLGQ9dShuKTt0cnl7Zm9yKGQucygpOyEoZj1kLm4oKSkuZG9uZTspe3ZhciBwPWYudmFsdWUsdj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnN0b3AiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsIm9mZnNldCIscFswXSksdi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdG9wLWNvbG9yIixwWzFdKSxlLmFwcGVuZCh2KX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuIHRoaXMuZGVmcy5hcHBlbmQoZSksInVybCgjIi5jb25jYXQociwiKSIpO2Nhc2UiTWVzaCI6cmV0dXJuKDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2giKSxudWxsO2Nhc2UiRHVtbXkiOnJldHVybiJob3RwaW5rIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBJUiB0eXBlOiAiLmNvbmNhdCh0WzBdKSl9fX0se2tleToic2V0RGFzaCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmN1cnJlbnQuZGFzaEFycmF5PXQsdGhpcy5jdXJyZW50LmRhc2hQaGFzZT1lfX0se2tleToiY29uc3RydWN0UGF0aCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuY3VycmVudCxpPW4ueCxvPW4ueSxzPVtdLGw9MCxjPXUodCk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXN3aXRjaCgwfHIudmFsdWUpe2Nhc2UgYS5PUFMucmVjdGFuZ2xlOmk9ZVtsKytdLG89ZVtsKytdO3ZhciBoPWVbbCsrXSxmPWVbbCsrXSxkPWkraCxwPW8rZjtzLnB1c2goIk0iLHkoaSkseShvKSwiTCIseShkKSx5KG8pLCJMIix5KGQpLHkocCksIkwiLHkoaSkseShwKSwiWiIpO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmk9ZVtsKytdLG89ZVtsKytdLHMucHVzaCgiTSIseShpKSx5KG8pKTticmVhaztjYXNlIGEuT1BTLmxpbmVUbzppPWVbbCsrXSxvPWVbbCsrXSxzLnB1c2goIkwiLHkoaSkseShvKSk7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvOmk9ZVtsKzRdLG89ZVtsKzVdLHMucHVzaCgiQyIseShlW2xdKSx5KGVbbCsxXSkseShlW2wrMl0pLHkoZVtsKzNdKSx5KGkpLHkobykpLGwrPTY7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvMjpzLnB1c2goIkMiLHkoaSkseShvKSx5KGVbbF0pLHkoZVtsKzFdKSx5KGVbbCsyXSkseShlW2wrM10pKSxpPWVbbCsyXSxvPWVbbCszXSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY3VydmVUbzM6aT1lW2wrMl0sbz1lW2wrM10scy5wdXNoKCJDIix5KGVbbF0pLHkoZVtsKzFdKSx5KGkpLHkobykseShpKSx5KG8pKSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VQYXRoOnMucHVzaCgiWiIpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX1zPXMuam9pbigiICIpLG4ucGF0aCYmdC5sZW5ndGg+MCYmdFswXSE9PWEuT1BTLnJlY3RhbmdsZSYmdFswXSE9PWEuT1BTLm1vdmVUbz9zPW4ucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIikrczoobi5wYXRoPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0aCIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKG4ucGF0aCkpLG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixzKSxuLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxuLmVsZW1lbnQ9bi5wYXRoLG4uc2V0Q3VycmVudFBvaW50KGksbyl9fSx7a2V5OiJlbmRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudDtpZih0LnBhdGg9bnVsbCx0aGlzLnBlbmRpbmdDbGlwKWlmKHQuZWxlbWVudCl7dmFyIGU9ImNsaXBwYXRoIi5jb25jYXQoRSsrKSxyPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6Y2xpcFBhdGgiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixlKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO3ZhciBuPXQuZWxlbWVudC5jbG9uZU5vZGUoITApO2lmKCJldmVub2RkIj09PXRoaXMucGVuZGluZ0NsaXA/bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJldmVub2RkIik6bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJub256ZXJvIiksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHIuYXBwZW5kKG4pLHRoaXMuZGVmcy5hcHBlbmQociksdC5hY3RpdmVDbGlwVXJsKXt0LmNsaXBHcm91cD1udWxsO3ZhciBpLGE9dSh0aGlzLmV4dHJhU3RhY2spO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOylpLnZhbHVlLmNsaXBHcm91cD1udWxsfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXIuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0LmFjdGl2ZUNsaXBVcmwpfXQuYWN0aXZlQ2xpcFVybD0idXJsKCMiLmNvbmNhdChlLCIpIiksdGhpcy50Z3JwPW51bGx9ZWxzZSB0aGlzLnBlbmRpbmdDbGlwPW51bGx9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmdDbGlwPXR9fSx7a2V5OiJjbG9zZVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O2lmKHQucGF0aCl7dmFyIGU9IiIuY29uY2F0KHQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiksIloiKTt0LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsZSl9fX0se2tleToic2V0TGVhZGluZyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LXR9fSx7a2V5OiJzZXRUZXh0UmlzZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSaXNlPXR9fSx7a2V5OiJzZXRUZXh0UmVuZGVyaW5nTW9kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlPXR9fSx7a2V5OiJzZXRIU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPXQvMTAwfX0se2tleToic2V0UmVuZGVyaW5nSW50ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt9fSx7a2V5OiJzZXRGbGF0bmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1sKGUudmFsdWUsMiksaT1uWzBdLG89blsxXTtzd2l0Y2goaSl7Y2FzZSJMVyI6dGhpcy5zZXRMaW5lV2lkdGgobyk7YnJlYWs7Y2FzZSJMQyI6dGhpcy5zZXRMaW5lQ2FwKG8pO2JyZWFrO2Nhc2UiTEoiOnRoaXMuc2V0TGluZUpvaW4obyk7YnJlYWs7Y2FzZSJNTCI6dGhpcy5zZXRNaXRlckxpbWl0KG8pO2JyZWFrO2Nhc2UiRCI6dGhpcy5zZXREYXNoKG9bMF0sb1sxXSk7YnJlYWs7Y2FzZSJSSSI6dGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQobyk7YnJlYWs7Y2FzZSJGTCI6dGhpcy5zZXRGbGF0bmVzcyhvKTticmVhaztjYXNlIkZvbnQiOnRoaXMuc2V0Rm9udChvKTticmVhaztjYXNlIkNBIjp0aGlzLnNldFN0cm9rZUFscGhhKG8pO2JyZWFrO2Nhc2UiY2EiOnRoaXMuc2V0RmlsbEFscGhhKG8pO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIuY29uY2F0KGkpKX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX19LHtrZXk6ImZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O3QuZWxlbWVudCYmKHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0LmZpbGxDb2xvciksdC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsdC5maWxsQWxwaGEpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6InN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC5lbGVtZW50JiYodGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyh0LmVsZW1lbnQpLHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6Il9zZXRTdHJva2VBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPXRoaXMuY3VycmVudCxuPXIuZGFzaEFycmF5OzEhPT1lJiZuLmxlbmd0aD4wJiYobj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUqdH0pKSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLHIuc3Ryb2tlQ29sb3IpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW9wYWNpdHkiLHIuc3Ryb2tlQWxwaGEpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW1pdGVybGltaXQiLHkoci5taXRlckxpbWl0KSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbGluZWNhcCIsci5saW5lQ2FwKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lam9pbiIsci5saW5lSm9pbiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLHkoZSpyLmxpbmVXaWR0aCkrInB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaGFycmF5IixuLm1hcCh5KS5qb2luKCIgIikpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWRhc2hvZmZzZXQiLHkoZSpyLmRhc2hQaGFzZSkrInB4Iil9fSx7a2V5OiJlb0ZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3Ryb2tlKCksdGhpcy5maWxsKCl9fSx7a2V5OiJlb0ZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5lb0ZpbGxTdHJva2UoKX19LHtrZXk6InBhaW50U29saWRDb2xvckltYWdlTWFzayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IiwiMCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIxcHgiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjFweCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5jdXJyZW50LmZpbGxDb2xvciksdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQodCl9fSx7a2V5OiJwYWludEltYWdlWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodCk7ZT90aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUpOigwLGEud2FybikoIkRlcGVuZGVudCBpbWFnZSB3aXRoIG9iamVjdCBJRCAiLmNvbmNhdCh0LCIgaXMgbm90IHJlYWR5IHlldCIpKX19LHtrZXk6InBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPVModCx0aGlzLmZvcmNlRGF0YVNjaGVtYSwhIWUpLGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIseShuKSksdGhpcy5jdXJyZW50LmVsZW1lbnQ9YSx0aGlzLmNsaXAoIm5vbnplcm8iKTt2YXIgbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmltYWdlIik7by5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmhyZWYiLGkpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLW4pKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwic2NhbGUoIi5jb25jYXQoeSgxL3IpLCIgIikuY29uY2F0KHkoLTEvbiksIikiKSksZT9lLmFwcGVuZChvKTp0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChvKX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodC5kYXRhLHQpO2lmKGUuYml0bWFwKSgwLGEud2FybikoInBhaW50SW1hZ2VNYXNrWE9iamVjdDogSW1hZ2VCaXRtYXAgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQsIGVuc3VyZSB0aGF0IHRoZSBgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWRgIEFQSSBwYXJhbWV0ZXIgaXMgZGlzYWJsZWQuIik7ZWxzZXt2YXIgcj10aGlzLmN1cnJlbnQsbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1yLmZpbGxDb2xvcjtyLm1hc2tJZD0ibWFzayIuY29uY2F0KFArKyk7dmFyIHM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzptYXNrIik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsci5tYXNrSWQpO3ZhciBsPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxsLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIseShuKSksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHkoaSkpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJtYXNrIiwidXJsKCMiLmNvbmNhdChyLm1hc2tJZCwiKSIpKSx0aGlzLmRlZnMuYXBwZW5kKHMpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGwpLHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSxzKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSYmNj09PXQubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSksZSl7dmFyIHI9ZVsyXS1lWzBdLG49ZVszXS1lWzFdLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixlWzBdKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGVbMV0pLGkuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLHkocikpLGkuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKSx0aGlzLmN1cnJlbnQuZWxlbWVudD1pLHRoaXMuY2xpcCgibm9uemVybyIpLHRoaXMuZW5kUGF0aCgpfX19LHtrZXk6InBhaW50Rm9ybVhPYmplY3RFbmQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodC53aWR0aCx0LmhlaWdodCkscj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtlLmFwcGVuZChyKSx0aGlzLmRlZnM9cjt2YXIgbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLG0odC50cmFuc2Zvcm0pKSxlLmFwcGVuZChuKSx0aGlzLnN2Zz1uLGV9fSx7a2V5OiJfZW5zdXJlQ2xpcEdyb3VwIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsImNsaXAtcGF0aCIsdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmwpLHRoaXMuc3ZnLmFwcGVuZCh0KSx0aGlzLmN1cnJlbnQuY2xpcEdyb3VwPXR9cmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXB9fSx7a2V5OiJfZW5zdXJlVHJhbnNmb3JtR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGdycHx8KHRoaXMudGdycD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKSx0aGlzLnRncnAuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIixtKHRoaXMudHJhbnNmb3JtTWF0cml4KSksdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmw/dGhpcy5fZW5zdXJlQ2xpcEdyb3VwKCkuYXBwZW5kKHRoaXMudGdycCk6dGhpcy5zdmcuYXBwZW5kKHRoaXMudGdycCkpLHRoaXMudGdycH19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERk5vZGVTdHJlYW09dm9pZCAwO3ZhciBuPXIoMSksaT1yKDE2Mik7ZnVuY3Rpb24gYSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZvKHQsZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbyh0LGUpfWZ1bmN0aW9uIHModCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49bCh0KTtpZihlKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PWYoZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGwodCl9ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxhPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtsKHt9LCIiKX1jYXRjaCh0KXtsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9Yzt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtsKG0sYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsYSkmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2wodCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8scyl7dmFyIGw9aCh0W25dLHQsYSk7aWYoInRocm93IiE9PWwudHlwZSl7dmFyIHU9bC5hcmcsYz11LnZhbHVlO3JldHVybiBjJiYib2JqZWN0Ij09ZihjKSYmci5jYWxsKGMsIl9fYXdhaXQiKT9lLnJlc29sdmUoYy5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8scyl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxzKX0pKTplLnJlc29sdmUoYykudGhlbigoZnVuY3Rpb24odCl7dS52YWx1ZT10LG8odSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8scyl9KSl9cyhsLmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWgodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1oKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W2FdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWwoeSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksbCh0LHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksbChBLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShjKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksbChfLHMsIkdlbmVyYXRvciIpLGwoXyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIGYodCl7cmV0dXJuIGY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGYodCl9ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWYodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09ZihpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIG09cmVxdWlyZSgiZnMiKSxnPXJlcXVpcmUoImh0dHAiKSxiPXJlcXVpcmUoImh0dHBzIiksXz1yZXF1aXJlKCJ1cmwiKSx3PS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy8sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbjtwKHRoaXMsdCksdGhpcy5zb3VyY2U9ZSx0aGlzLnVybD0ocj1lLnVybCwiZmlsZToiPT09KG49Xy5wYXJzZShyKSkucHJvdG9jb2x8fG4uaG9zdD9uOi9eW2Etel06Wy9cXF0vaS50ZXN0KHIpP18ucGFyc2UoImZpbGU6Ly8vIi5jb25jYXQocikpOihuLmhvc3R8fChuLnByb3RvY29sPSJmaWxlOiIpLG4pKSx0aGlzLmlzSHR0cD0iaHR0cDoiPT09dGhpcy51cmwucHJvdG9jb2x8fCJodHRwczoiPT09dGhpcy51cmwucHJvdG9jb2wsdGhpcy5pc0ZzVXJsPSJmaWxlOiI9PT10aGlzLnVybC5wcm90b2NvbCx0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZlLmh0dHBIZWFkZXJzfHx7fSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIHkodCxbe2tleToiX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PSh0PW51bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUuX2xvYWRlZCkmJnZvaWQgMCE9PXQ/dDowfX0se2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZOb2RlU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9dGhpcy5pc0ZzVXJsP25ldyBUKHRoaXMpOm5ldyBFKHRoaXMpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfX0se2tleToiZ2V0UmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoZTw9dGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybiBudWxsO3ZhciByPXRoaXMuaXNGc1VybD9uZXcgQyh0aGlzLHQsZSk6bmV3IFAodGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZOb2RlU3RyZWFtPUE7dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3AodGhpcyx0KSx0aGlzLl91cmw9ZS51cmwsdGhpcy5fZG9uZT0hMSx0aGlzLl9zdG9yZWRFcnJvcj1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsO3ZhciByPWUuc291cmNlO3RoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fbG9hZGVkPTAsdGhpcy5fZmlsZW5hbWU9bnVsbCx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX3JhbmdlQ2h1bmtTaXplPXIucmFuZ2VDaHVua1NpemUsdGhpcy5fcmFuZ2VDaHVua1NpemV8fHRoaXMuX2Rpc2FibGVSYW5nZXx8KHRoaXMuX2Rpc2FibGVSYW5nZT0hMCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSFyLmRpc2FibGVSYW5nZSx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faGVhZGVyc0NhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodCk6dGhpcy5fZXJyb3IodCl9fSx7a2V5OiJfZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPXQsdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX3NldFJlYWRhYmxlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3JlYWRhYmxlU3RyZWFtPXQsdC5vbigicmVhZGFibGUiLChmdW5jdGlvbigpe2UuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlbmQiLChmdW5jdGlvbigpe3QuZGVzdHJveSgpLGUuX2RvbmU9ITAsZS5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24odCl7ZS5fZXJyb3IodCl9KSksIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9lcnJvcihuZXcgbi5BYm9ydEV4Y2VwdGlvbigic3RyZWFtaW5nIGlzIGRpc2FibGVkIikpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtwKHRoaXMsdCksdGhpcy5fdXJsPWUudXJsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dmFyIHI9ZS5zb3VyY2U7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLGk9bmV3IFVpbnQ4QXJyYXkocikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTppLGRvbmU6ITF9KTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZWFkYWJsZVN0cmVhbT90aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHQpOnRoaXMuX2Vycm9yKHQpfX0se2tleToiX2Vycm9yIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9zdG9yZWRFcnJvcj10LHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6Il9zZXRSZWFkYWJsZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkYWJsZVN0cmVhbT10LHQub24oInJlYWRhYmxlIiwoZnVuY3Rpb24oKXtlLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSksdC5vbigiZW5kIiwoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKSxlLl9kb25lPSEwLGUuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe2UuX2Vycm9yKHQpfSkpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKTtmdW5jdGlvbiB4KHQsZSl7cmV0dXJue3Byb3RvY29sOnQucHJvdG9jb2wsYXV0aDp0LmF1dGgsaG9zdDp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGg6dC5wYXRoLG1ldGhvZDoiR0VUIixoZWFkZXJzOmV9fXZhciBFPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGE7cCh0aGlzLHIpO3ZhciBvPWZ1bmN0aW9uKGUpe2lmKDQwND09PWUuc3RhdHVzQ29kZSl7dmFyIHI9bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicuY29uY2F0KGEuX3VybCwnIi4nKSk7cmV0dXJuIGEuX3N0b3JlZEVycm9yPXIsdm9pZCBhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3Qocil9YS5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpLGEuX3NldFJlYWRhYmxlU3RyZWFtKGUpO3ZhciBvPWZ1bmN0aW9uKHQpe3JldHVybiBhLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV19LHM9KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOm8saXNIdHRwOnQuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOmEuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTphLl9kaXNhYmxlUmFuZ2V9KSxsPXMuYWxsb3dSYW5nZVJlcXVlc3RzLHU9cy5zdWdnZXN0ZWRMZW5ndGg7YS5faXNSYW5nZVN1cHBvcnRlZD1sLGEuX2NvbnRlbnRMZW5ndGg9dXx8YS5fY29udGVudExlbmd0aCxhLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKG8pfTtyZXR1cm4oYT1lLmNhbGwodGhpcyx0KSkuX3JlcXVlc3Q9bnVsbCwiaHR0cDoiPT09YS5fdXJsLnByb3RvY29sP2EuX3JlcXVlc3Q9Zy5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pOmEuX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pLGEuX3JlcXVlc3Qub24oImVycm9yIiwoZnVuY3Rpb24odCl7YS5fc3RvcmVkRXJyb3I9dCxhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QodCl9KSksYS5fcmVxdWVzdC5lbmQoKSxhfXJldHVybiB5KHIpfShrKSxQPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxpLGEpe3ZhciBvO2Zvcih2YXIgcyBpbiBwKHRoaXMsciksKG89ZS5jYWxsKHRoaXMsdCkpLl9odHRwSGVhZGVycz17fSx0Lmh0dHBIZWFkZXJzKXt2YXIgbD10Lmh0dHBIZWFkZXJzW3NdO3ZvaWQgMCE9PWwmJihvLl9odHRwSGVhZGVyc1tzXT1sKX1vLl9odHRwSGVhZGVycy5SYW5nZT0iYnl0ZXM9Ii5jb25jYXQoaSwiLSIpLmNvbmNhdChhLTEpO3ZhciB1PWZ1bmN0aW9uKHQpe2lmKDQwNCE9PXQuc3RhdHVzQ29kZSlvLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTtlbHNle3ZhciBlPW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChvLl91cmwsJyIuJykpO28uX3N0b3JlZEVycm9yPWV9fTtyZXR1cm4gby5fcmVxdWVzdD1udWxsLCJodHRwOiI9PT1vLl91cmwucHJvdG9jb2w/by5fcmVxdWVzdD1nLnJlcXVlc3QoeChvLl91cmwsby5faHR0cEhlYWRlcnMpLHUpOm8uX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoby5fdXJsLG8uX2h0dHBIZWFkZXJzKSx1KSxvLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe28uX3N0b3JlZEVycm9yPXR9KSksby5fcmVxdWVzdC5lbmQoKSxvfXJldHVybiB5KHIpfShTKSxUPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGk7cCh0aGlzLHIpLGk9ZS5jYWxsKHRoaXMsdCk7dmFyIGE9ZGVjb2RlVVJJQ29tcG9uZW50KGkuX3VybC5wYXRoKTtyZXR1cm4gdy50ZXN0KGkuX3VybC5ocmVmKSYmKGE9YS5yZXBsYWNlKC9eXC8vLCIiKSksbS5sc3RhdChhLChmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIkVOT0VOVCI9PT10LmNvZGUmJih0PW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChhLCciLicpKSksaS5fc3RvcmVkRXJyb3I9dCx2b2lkIGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KTtpLl9jb250ZW50TGVuZ3RoPWUuc2l6ZSxpLl9zZXRSZWFkYWJsZVN0cmVhbShtLmNyZWF0ZVJlYWRTdHJlYW0oYSkpLGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxpfXJldHVybiB5KHIpfShrKSxDPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxuLGkpe3ZhciBhO3AodGhpcyxyKSxhPWUuY2FsbCh0aGlzLHQpO3ZhciBvPWRlY29kZVVSSUNvbXBvbmVudChhLl91cmwucGF0aCk7cmV0dXJuIHcudGVzdChhLl91cmwuaHJlZikmJihvPW8ucmVwbGFjZSgvXlwvLywiIikpLGEuX3NldFJlYWRhYmxlU3RyZWFtKG0uY3JlYXRlUmVhZFN0cmVhbShvLHtzdGFydDpuLGVuZDppLTF9KSksYX1yZXR1cm4geShyKX0oUyl9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQwND09PXR8fDA9PT10JiZlLnN0YXJ0c1dpdGgoImZpbGU6Iik/bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicrZSsnIi4nKTpuZXcgbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgiLmNvbmNhdCh0LCcpIHdoaWxlIHJldHJpZXZpbmcgUERGICInKS5jb25jYXQoZSwnIi4nKSx0KX0sZS5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTtpZihlKXt2YXIgcj0oMCxpLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoZSk7aWYoci5pbmNsdWRlcygiJSIpKXRyeXtyPWRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaCh0KXt9aWYoKDAsYS5pc1BkZkZpbGUpKHIpKXJldHVybiByfXJldHVybiBudWxsfSxlLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0UmVzcG9uc2VIZWFkZXIscj10LmlzSHR0cCxuPXQucmFuZ2VDaHVua1NpemUsaT10LmRpc2FibGVSYW5nZSxhPXthbGxvd1JhbmdlUmVxdWVzdHM6ITEsc3VnZ2VzdGVkTGVuZ3RoOnZvaWQgMH0sbz1wYXJzZUludChlKCJDb250ZW50LUxlbmd0aCIpLDEwKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihvKT8oYS5zdWdnZXN0ZWRMZW5ndGg9byxvPD0yKm58fGl8fCFyfHwiYnl0ZXMiIT09ZSgiQWNjZXB0LVJhbmdlcyIpfHwiaWRlbnRpdHkiIT09KGUoIkNvbnRlbnQtRW5jb2RpbmciKXx8ImlkZW50aXR5Iil8fChhLmFsbG93UmFuZ2VSZXF1ZXN0cz0hMCksYSk6YX0sZS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzPWZ1bmN0aW9uKHQpe3JldHVybiAyMDA9PT10fHwyMDY9PT10fTt2YXIgbj1yKDEpLGk9cigxNjMpLGE9cigxMzcpfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPSEwLHI9cygiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyh0KTtpZihyKXt2YXIgYT1jKHI9clsxXSk7cmV0dXJuIHUoYT1mKGE9aChhPXVuZXNjYXBlKGEpKSkpfWlmKHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbj1zKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtudWxsIT09KGU9bi5leGVjKHQpKTspe3ZhciBhPWkoZSw0KSxvPWFbMV0sbD1hWzJdLHU9YVszXTtpZigobz1wYXJzZUludChvLDEwKSlpbiByKXtpZigwPT09bylicmVha31lbHNlIHJbb109W2wsdV19Zm9yKHZhciBmPVtdLGQ9MDtkPHIubGVuZ3RoJiZkIGluIHI7KytkKXt2YXIgcD1pKHJbZF0sMiksdj1wWzBdLHk9cFsxXTt5PWMoeSksdiYmKHk9dW5lc2NhcGUoeSksMD09PWQmJih5PWgoeSkpKSxmLnB1c2goeSl9cmV0dXJuIGYuam9pbigiIil9KHQpKXJldHVybiB1KGYocikpO2lmKHI9cygiZmlsZW5hbWUiLCJpIikuZXhlYyh0KSl7dmFyIG89YyhyPXJbMV0pO3JldHVybiB1KG89ZihvKSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefDspXFxzKiIrdCsnXFxzKj1cXHMqKFteIjtcXHNdW147XFxzXSp8Iig/OlteIlxcXFxdfFxcXFwiPykrIj8pJyxlKX1mdW5jdGlvbiBsKHQscil7aWYodCl7aWYoIS9eW1x4MDAtXHhGRl0rJC8udGVzdChyKSlyZXR1cm4gcjt0cnl7dmFyIGk9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSksYT0oMCxuLnN0cmluZ1RvQnl0ZXMpKHIpO3I9aS5kZWNvZGUoYSksZT0hMX1jYXRjaCh0KXt9fXJldHVybiByfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGUmJi9bXHg4MC1ceGZmXS8udGVzdCh0KSYmKHQ9bCgidXRmLTgiLHQpLGUmJih0PWwoImlzby04ODU5LTEiLHQpKSksdH1mdW5jdGlvbiBjKHQpe2lmKHQuc3RhcnRzV2l0aCgnIicpKXtmb3IodmFyIGU9dC5zbGljZSgxKS5zcGxpdCgnXFwiJykscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLmluZGV4T2YoJyInKTstMSE9PW4mJihlW3JdPWVbcl0uc2xpY2UoMCxuKSxlLmxlbmd0aD1yKzEpLGVbcl09ZVtyXS5yZXBsYWNlKC9cXCguKS9nLCIkMSIpfXQ9ZS5qb2luKCciJyl9cmV0dXJuIHR9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIiciKTtyZXR1cm4tMT09PWU/dDpsKHQuc2xpY2UoMCxlKSx0LnNsaWNlKGUrMSkucmVwbGFjZSgvXlteJ10qJy8sIiIpKX1mdW5jdGlvbiBmKHQpe3JldHVybiF0LnN0YXJ0c1dpdGgoIj0/Iil8fC9bXHgwMC1ceDE5XHg4MC1ceGZmXS8udGVzdCh0KT90OnQucmVwbGFjZSgvPVw/KFtcdy1dKilcPyhbUXFCYl0pXD8oKD86W14/XXxcPyg/IT0pKSopXD89L2csKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJxIj09PXJ8fCJRIj09PXIpcmV0dXJuIGwoZSxuPShuPW4ucmVwbGFjZSgvXy9nLCIgIikpLnJlcGxhY2UoLz0oWzAtOWEtZkEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZSwxNikpfSkpKTt0cnl7bj1hdG9iKG4pfWNhdGNoKHQpe31yZXR1cm4gbChlLG4pfSkpfXJldHVybiIifTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGEodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9hKHQsZSk6dm9pZCAwfX0odCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZOZXR3b3JrU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGw9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUodCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7dSh7fSwiIil9Y2F0Y2godCl7dT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307dShtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXt1KHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciBsPWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT1sLnR5cGUpe3ZhciB1PWwuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxvKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXMobC5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT11KHksbCwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LHUodCxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLHUoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLHUoXyxsLCJHZW5lcmF0b3IiKSx1KF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx1KF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCl7cmV0dXJuIGM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGModCl9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09Yyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1jKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2godGhpcyx0KSx0aGlzLnVybD1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZSksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmci5odHRwSGVhZGVyc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLndpdGhDcmVkZW50aWFscz1yLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5nZXRYaHI9ci5nZXRYaHJ8fGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdGhpcy5jdXJyWGhySWQ9MCx0aGlzLnBlbmRpbmdSZXF1ZXN0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBkKHQsW3trZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtiZWdpbjp0LGVuZDplfTtmb3IodmFyIGkgaW4gciluW2ldPXJbaV07cmV0dXJuIHRoaXMucmVxdWVzdChuKX19LHtrZXk6InJlcXVlc3RGdWxsIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHQpfX0se2tleToicmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRYaHIoKSxyPXRoaXMuY3VyclhocklkKyssbj10aGlzLnBlbmRpbmdSZXF1ZXN0c1tyXT17eGhyOmV9O2Zvcih2YXIgaSBpbiBlLm9wZW4oIkdFVCIsdGhpcy51cmwsICEwKSxlLndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscyx0aGlzLmh0dHBIZWFkZXJzKXt2YXIgYT10aGlzLmh0dHBIZWFkZXJzW2ldO3ZvaWQgMCE9PWEmJmUuc2V0UmVxdWVzdEhlYWRlcihpLGEpfXJldHVybiB0aGlzLmlzSHR0cCYmImJlZ2luImluIHQmJiJlbmQiaW4gdD8oZS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIuY29uY2F0KHQuYmVnaW4sIi0iKS5jb25jYXQodC5lbmQtMSkpLG4uZXhwZWN0ZWRTdGF0dXM9MjA2KTpuLmV4cGVjdGVkU3RhdHVzPTIwMCxlLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHQub25FcnJvciYmKGUub25lcnJvcj1mdW5jdGlvbihyKXt0Lm9uRXJyb3IoZS5zdGF0dXMpfSksZS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxyKSxlLm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxyKSxuLm9uSGVhZGVyc1JlY2VpdmVkPXQub25IZWFkZXJzUmVjZWl2ZWQsbi5vbkRvbmU9dC5vbkRvbmUsbi5vbkVycm9yPXQub25FcnJvcixuLm9uUHJvZ3Jlc3M9dC5vblByb2dyZXNzLGUuc2VuZChudWxsKSxyfX0se2tleToib25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMucGVuZGluZ1JlcXVlc3RzW3RdO24mJihudWxsPT09KHI9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09cnx8ci5jYWxsKG4sZSkpfX0se2tleToib25TdGF0ZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtpZihyKXt2YXIgaT1yLnhocjtpZihpLnJlYWR5U3RhdGU+PTImJnIub25IZWFkZXJzUmVjZWl2ZWQmJihyLm9uSGVhZGVyc1JlY2VpdmVkKCksZGVsZXRlIHIub25IZWFkZXJzUmVjZWl2ZWQpLDQ9PT1pLnJlYWR5U3RhdGUmJnQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpaWYoZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdLDA9PT1pLnN0YXR1cyYmdGhpcy5pc0h0dHApe3ZhciBhO251bGw9PT0oYT1yLm9uRXJyb3IpfHx2b2lkIDA9PT1hfHxhLmNhbGwocixpLnN0YXR1cyl9ZWxzZXt2YXIgbz1pLnN0YXR1c3x8MjAwO2lmKDIwMD09PW8mJjIwNj09PXIuZXhwZWN0ZWRTdGF0dXN8fG89PT1yLmV4cGVjdGVkU3RhdHVzKXt2YXIgcz1mdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlO3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9lOigwLG4uc3RyaW5nVG9CeXRlcykoZSkuYnVmZmVyfShpKTtpZigyMDY9PT1vKXt2YXIgbD1pLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVJhbmdlIiksdT0vYnl0ZXMgKFxkKyktKFxkKylcLyhcZCspLy5leGVjKGwpO3Iub25Eb25lKHtiZWdpbjpwYXJzZUludCh1WzFdLDEwKSxjaHVuazpzfSl9ZWxzZSBpZihzKXIub25Eb25lKHtiZWdpbjowLGNodW5rOnN9KTtlbHNle3ZhciBjO251bGw9PT0oYz1yLm9uRXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwocixpLnN0YXR1cyl9fWVsc2V7dmFyIGg7bnVsbD09PShoPXIub25FcnJvcil8fHZvaWQgMD09PWh8fGguY2FsbChyLGkuc3RhdHVzKX19fX19LHtrZXk6ImdldFJlcXVlc3RYaHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XS54aHJ9fSx7a2V5OiJpc1BlbmRpbmdSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0c319LHtrZXk6ImFib3J0UmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZW5kaW5nUmVxdWVzdHNbdF0ueGhyO2RlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XSxlLmFib3J0KCl9fV0pLHR9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1lLHRoaXMuX21hbmFnZXI9bmV3IHAoZS51cmwse2h0dHBIZWFkZXJzOmUuaHR0cEhlYWRlcnMsd2l0aENyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzfSksdGhpcy5fcmFuZ2VDaHVua1NpemU9ZS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGQodCxbe2tleToiX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YodCk7ZT49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyB5KHRoaXMuX21hbmFnZXIsdGhpcy5fc291cmNlKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW5ldyBtKHRoaXMuX21hbmFnZXIsdCxlKTtyZXR1cm4gci5vbkNsb3NlZD10aGlzLl9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZC5iaW5kKHRoaXMpLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfX0se2tleToiY2FuY2VsQWxsUmVxdWVzdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpO3ZhciByLG49bCh0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5jYW5jZWwodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX1dKSx0fSgpO2UuUERGTmV0d29ya1N0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2godGhpcyx0KSx0aGlzLl9tYW5hZ2VyPWU7dmFyIGk9e29uSGVhZGVyc1JlY2VpdmVkOnRoaXMuX29uSGVhZGVyc1JlY2VpdmVkLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ci51cmwsdGhpcy5fZnVsbFJlcXVlc3RJZD1lLnJlcXVlc3RGdWxsKGkpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fcmFuZ2VDaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2NhY2hlZENodW5rcz1bXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPXZvaWQgMCx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9vbkhlYWRlcnNSZWNlaXZlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mdWxsUmVxdWVzdElkLGU9dGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0UmVzcG9uc2VIZWFkZXIodCl9LG49KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOnIsaXNIdHRwOnRoaXMuX21hbmFnZXIuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnRoaXMuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTp0aGlzLl9kaXNhYmxlUmFuZ2V9KSxhPW4uYWxsb3dSYW5nZVJlcXVlc3RzLG89bi5zdWdnZXN0ZWRMZW5ndGg7YSYmKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITApLHRoaXMuX2NvbnRlbnRMZW5ndGg9b3x8dGhpcy5fY29udGVudExlbmd0aCx0aGlzLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKHIpLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHQpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX29uRG9uZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodCYmKHRoaXMuX3JlcXVlc3RzLmxlbmd0aD4wP3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6dC5jaHVuayxkb25lOiExfSk6dGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2godC5jaHVuaykpLHRoaXMuX2RvbmU9ITAsISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9fX0se2tleToiX29uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPSgwLGkuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodCx0aGlzLl91cmwpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHRoaXMuX3N0b3JlZEVycm9yKTt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcil9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aD0wfX0se2tleToiX29uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnQubG9hZGVkLHRvdGFsOnQubGVuZ3RoQ29tcHV0YWJsZT90LnRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KX19LHtrZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImhlYWRlcnNSZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYoISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt0Lm5leHQ9NTticmVha31yZXR1cm4gZT10aGlzLl9jYWNoZWRDaHVua3Muc2hpZnQoKSx0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6ZSxkb25lOiExfSk7Y2FzZSA1OmlmKCF0aGlzLl9kb25lKXt0Lm5leHQ9NzticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiByPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSx0LmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITAsdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QodCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19XSksdH0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX21hbmFnZXI9ZTt2YXIgaT17b25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ZS51cmwsdGhpcy5fcmVxdWVzdElkPWUucmVxdWVzdFJhbmdlKHIsbixpKSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMub25DbG9zZWQ9bnVsbH12YXIgZTtyZXR1cm4gZCh0LFt7a2V5OiJfY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMub25DbG9zZWQpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyx0aGlzKX19LHtrZXk6Il9vbkRvbmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2h1bms7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTplLGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVuaz1lLHRoaXMuX2RvbmU9ITA7dmFyIHIsbj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX2Nsb3NlKCl9fSx7a2V5OiJfb25FcnJvciIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fc3RvcmVkRXJyb3I9KDAsaS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKSh0LHRoaXMuX3VybCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX3F1ZXVlZENodW5rPW51bGx9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8bnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dC5sb2FkZWR9KX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYobnVsbD09PXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NjticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDY6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD04O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDg6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fZG9uZT0hMDt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCksdGhpcy5fY2xvc2UoKX19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERkZldGNoU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxpPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1sKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWwoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIGYodCxlLHIpe3JldHVybiBlJiZoKHQucHJvdG90eXBlLGUpLHImJmgodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybnttZXRob2Q6IkdFVCIsaGVhZGVyczp0LHNpZ25hbDpyLnNpZ25hbCxtb2RlOiJjb3JzIixjcmVkZW50aWFsczplPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4iLHJlZGlyZWN0OiJmb2xsb3cifX1mdW5jdGlvbiBwKHQpe3ZhciBlPW5ldyBIZWFkZXJzO2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdO3ZvaWQgMCE9PW4mJmUuYXBwZW5kKHIsbil9cmV0dXJuIGV9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2ModGhpcyx0KSx0aGlzLnNvdXJjZT1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZS51cmwpLHRoaXMuaHR0cEhlYWRlcnM9dGhpcy5pc0h0dHAmJmUuaHR0cEhlYWRlcnN8fHt9LHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGwsdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1yZXR1cm4gZih0LFt7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJnZXRGdWxsUmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybigwLG4uYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IHkodGhpcyksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IG0odGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZGZXRjaFN0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9maWxlbmFtZT1udWxsO3ZhciBhPWUuc291cmNlO3RoaXMuX3dpdGhDcmVkZW50aWFscz1hLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5fY29udGVudExlbmd0aD1hLmxlbmd0aCx0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2Rpc2FibGVSYW5nZT1hLmRpc2FibGVSYW5nZXx8ITEsdGhpcy5fcmFuZ2VDaHVua1NpemU9YS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hYS5kaXNhYmxlU3RyZWFtLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9IWEuZGlzYWJsZVJhbmdlLHRoaXMuX2hlYWRlcnM9cCh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO3ZhciBvPWEudXJsO2ZldGNoKG8sZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLG8pO3IuX3JlYWRlcj10LmJvZHkuZ2V0UmVhZGVyKCksci5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiB0LmhlYWRlcnMuZ2V0KGUpfSxhPSgwLGkudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjplLGlzSHR0cDpyLl9zdHJlYW0uaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnIuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpyLl9kaXNhYmxlUmFuZ2V9KSxzPWEuYWxsb3dSYW5nZVJlcXVlc3RzLGw9YS5zdWdnZXN0ZWRMZW5ndGg7ci5faXNSYW5nZVN1cHBvcnRlZD1zLHIuX2NvbnRlbnRMZW5ndGg9bHx8ci5fY29udGVudExlbmd0aCxyLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGUpLCFyLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmci5faXNSYW5nZVN1cHBvcnRlZCYmci5jYW5jZWwobmV3IG4uQWJvcnRFeGNlcHRpb24oIlN0cmVhbWluZyBpcyBkaXNhYmxlZC4iKSl9KSkuY2F0Y2godGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KSx0aGlzLm9uUHJvZ3Jlc3M9bnVsbH12YXIgZTtyZXR1cm4gZih0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9cyhhKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsbixpLG87cmV0dXJuIGEoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6cmV0dXJuIHQubmV4dD00LHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSA0OmlmKHI9dC5zZW50LG49ci52YWx1ZSwhKGk9ci5kb25lKSl7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpuLGRvbmU6aX0pO2Nhc2UgOTpyZXR1cm4gdGhpcy5fbG9hZGVkKz1uLmJ5dGVMZW5ndGgsbnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dGhpcy5fbG9hZGVkLHRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KSxvPW5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcix0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6byxkb25lOiExfSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX3JlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpLHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX1dKSx0fSgpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixhKXt2YXIgbz10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MDt2YXIgcz1lLnNvdXJjZTt0aGlzLl93aXRoQ3JlZGVudGlhbHM9cy53aXRoQ3JlZGVudGlhbHN8fCExLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXMuZGlzYWJsZVN0cmVhbSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9oZWFkZXJzPXAodGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKSx0aGlzLl9oZWFkZXJzLmFwcGVuZCgiUmFuZ2UiLCJieXRlcz0iLmNvbmNhdChyLCItIikuY29uY2F0KGEtMSkpO3ZhciBsPXMudXJsO2ZldGNoKGwsZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLGwpO28uX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKSxvLl9yZWFkZXI9dC5ib2R5LmdldFJlYWRlcigpfSkpLmNhdGNoKHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIGYodCxbe2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxvO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgNDppZihyPXQuc2VudCxuPXIudmFsdWUsIShpPXIuZG9uZSkpe3QubmV4dD05O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6bixkb25lOml9KTtjYXNlIDk6cmV0dXJuIHRoaXMuX2xvYWRlZCs9bi5ieXRlTGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLG89bmV3IFVpbnQ4QXJyYXkobikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpvLGRvbmU6ITF9KTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fcmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCksdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCl9fV0pLHR9KCl9XSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyh0KXt2YXIgZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gZS5leHBvcnRzO3ZhciByPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t0XT17ZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdF0ocixyLmV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyksci5leHBvcnRzfXZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9Pnt2YXIgdD1fX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFib3J0RXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5BYm9ydEV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvckxheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvclR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25FZGl0b3JUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uTGF5ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkFubm90YXRpb25MYXllcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbk1vZGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25Nb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDTWFwQ29tcHJlc3Npb25UeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5DTWFwQ29tcHJlc3Npb25UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHbG9iYWxXb3JrZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5HbG9iYWxXb3JrZXJPcHRpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnZhbGlkUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5JbnZhbGlkUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNaXNzaW5nUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5NaXNzaW5nUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPUFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLk9QU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUERGRGF0YVJhbmdlVHJhbnNwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QREZEYXRhUmFuZ2VUcmFuc3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERkRhdGVTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlBERkRhdGVTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERldvcmtlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUERGV29ya2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYXNzd29yZFJlc3BvbnNlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuUGFzc3dvcmRSZXNwb25zZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBlcm1pc3Npb25GbGFnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5QZXJtaXNzaW9uRmxhZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGl4ZWxzUGVySW5jaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uUGl4ZWxzUGVySW5jaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNWR0dyYXBoaWNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5TVkdHcmFwaGljc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVU5TVVBQT1JURURfRkVBVFVSRVMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVXRpbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVXRpbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVmVyYm9zaXR5TGV2ZWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlZlcmJvc2l0eUxldmVsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJYZmFMYXllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguWGZhTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJ1aWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5idWlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVWYWxpZEFic29sdXRlVXJsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVWYWxpZEFic29sdXRlVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREb2N1bWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0RG9jdW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEZpbGVuYW1lRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0RmlsZW5hbWVGcm9tVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRQZGZGaWxlbmFtZUZyb21VcmwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFBkZkZpbGVuYW1lRnJvbVVybH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0WGZhUGFnZVZpZXdwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRYZmFQYWdlVmlld3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzRGF0YVNjaGVtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNEYXRhU2NoZW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1BkZkZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmlzUGRmRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9hZFNjcmlwdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZFNjcmlwdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVuZGVyVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5yZW5kZXJUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldExheWVyRGltZW5zaW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0TGF5ZXJEaW1lbnNpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFkb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLnNoYWRvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51cGRhdGVUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZlcnNpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnZlcnNpb259fSk7dmFyIGU9X193X3BkZmpzX3JlcXVpcmVfXygxKSxyPV9fd19wZGZqc19yZXF1aXJlX18oMTMzKSxuPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxpPV9fd19wZGZqc19yZXF1aXJlX18oMTUxKSxhPV9fd19wZGZqc19yZXF1aXJlX18oMTUyKSxvPV9fd19wZGZqc19yZXF1aXJlX18oMTM2KSxzPV9fd19wZGZqc19yZXF1aXJlX18oMTU3KSxsPV9fd19wZGZqc19yZXF1aXJlX18oMTQ0KSx1PV9fd19wZGZqc19yZXF1aXJlX18oMyksYz1fX3dfcGRmanNfcmVxdWlyZV9fKDE2MCksaD1fX3dfcGRmanNfcmVxdWlyZV9fKDE1OSk7aWYodS5pc05vZGVKUyl7dmFyIGY9X193X3BkZmpzX3JlcXVpcmVfXygxNjEpLlBERk5vZGVTdHJlYW07KDAsci5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0KX0pKX1lbHNle3ZhciBkPV9fd19wZGZqc19yZXF1aXJlX18oMTY0KS5QREZOZXR3b3JrU3RyZWFtLHA9X193X3BkZmpzX3JlcXVpcmVfXygxNjUpLlBERkZldGNoU3RyZWFtOygwLHIuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkpKChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLmlzVmFsaWRGZXRjaFVybCkodC51cmwpP25ldyBwKHQpOm5ldyBkKHQpfSkpfX0pKCksX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZmFjdG9yeSgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJwZGZqcy1kaXN0L2J1aWxkL3BkZiIsW10sZmFjdG9yeSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09ZmFjdG9yeSgpOnJvb3RbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09cm9vdC5wZGZqc0xpYj1mYWN0b3J5KCk7",T=`data:text/javascript;base64,${a}`,C=`data:text/javascript;base64,${M}`;let L=!1,y=!1;class H{constructor(Z,l={},d={}){i(this,"container",null);i(this,"wrapper",null);i(this,"wrapperMain",null);i(this,"options",{});i(this,"requestOptions",{});i(this,"pdfDocument",null);i(this,"loopCheckTimer",null);i(this,"totalItems",0);i(this,"pageWidth",0);i(this,"pageHeight",0);i(this,"containerHeight",0);i(this,"visibleItems",6);i(this,"canvasWidth",0);i(this,"canvasHeight",0);i(this,"onScroll",J.debounce(Z=>{const{scrollTop:l}=Z.target;let d=parseInt(getComputedStyle(this.wrapperMain).paddingTop);const m=this.options.gap||10,X=Math.max(Math.floor(Math.max(l-d,0)/(this.pageHeight+m))-1,1),G=Math.min(X+this.visibleItems-1,this.totalItems);this.renderList(X,G)},60));this.container=Z,this.options={staticFileUrl:"https://unpkg.com/pdfjs-dist@3.1.81/",...l},this.requestOptions=d,this.createWrapper(),this.createWrapperMain()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-pdf",this.wrapper.setAttribute("style","text-align: center;overflow-y: auto;position: relative;height:100%"),this.container.appendChild(this.wrapper),this.wrapper.addEventListener("scroll",this.onScroll)}createWrapperMain(){this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-pdf-wrapper",this.wrapperMain.setAttribute("style","background: gray; padding: 30px 0;position: relative;box-sizing: content-box"),this.wrapper.appendChild(this.wrapperMain)}installPdfScript(){return s(T).then(()=>{if(window.pdfjsLib&&!y)y=!0,window.pdfjsLib.GlobalWorkerOptions.workerSrc=C;else return Promise.reject("window.pdfjsLib未找到")})}waitPdfjsLoad(){return new Promise(Z=>{const l=()=>{window.pdfjsLib?Z():this.loopCheckTimer=setTimeout(l,10)};l()})}checkPdfLib(){return window.pdfjsLib?Promise.resolve():L?this.waitPdfjsLoad():(L=!0,this.installPdfScript())}getDocument(Z){return window.pdfjsLib.getDocument({url:u(Z),httpHeaders:this.requestOptions&&this.requestOptions.headers,withCredentials:this.requestOptions&&this.requestOptions.withCredentials,cMapUrl:`${this.options.staticFileUrl.endsWith("/")?this.options.staticFileUrl:this.options.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...S(this.options,["width","staticFileUrl"])}).promise}renderSinglePage(Z,l){return this.pdfDocument.getPage(Z).then(d=>{const m=d.getViewport({scale:2}),X=window.devicePixelRatio>2?1.5:2,G=l.getContext("2d"),c=X!==1?[X,0,0,X,0,0]:null;return d.render({canvasContext:G,transform:c,viewport:m}).promise})}getPageSize(Z){return Z.getPage(1).then(l=>{const d=l.getViewport({scale:2}),m=window.devicePixelRatio>2?1.5:2;let X=Math.floor(d.width*m),G=Math.floor(d.height*m),c=Math.floor(d.width),b=Math.floor(d.height);if(this.options.width){let I=this.options.width/c;c=Math.floor(this.options.width),b=Math.floor(b*I)}let W=this.wrapper.getBoundingClientRect().width-20;if(c>W){let I=W/c;c=Math.floor(W),b=Math.floor(b*I)}return{width:c,height:b,canvasWidth:X,canvasHeight:G}})}createCanvas(Z){let l=parseInt(getComputedStyle(this.wrapperMain).paddingTop),d=this.options.gap||10;const m=document.createElement("canvas");return m.style.position="absolute",m.style.top=(Z-1)*(this.pageHeight+d)+l+"px",m.style.left="50%",m.style.transform="translate(-50%)",m.style.backgroundColor="#fff",m.setAttribute("data-id",Z),m.width=this.canvasWidth,m.height=this.canvasHeight,m.style.width=`${this.pageWidth}px`,m.style.height=`${this.pageHeight}px`,m}clearAllCanvas(){this.wrapperMain&&(this.wrapperMain.innerHTML="")}setOptions(Z){this.options=Z}setRequestOptions(Z){this.requestOptions=Z}preview(Z){if(!Z){this.clearAllCanvas(),this.options.onError&&this.options.onError(new Error("预览地址不能为空"));return}this.checkPdfLib().then(l=>{this.getDocument(Z).then(d=>{this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=d,this.getPageSize(d).then(m=>{this.totalItems=d.numPages,this.containerHeight=this.wrapper.getBoundingClientRect().height,this.pageWidth=m.width,this.pageHeight=m.height,this.canvasWidth=m.canvasWidth,this.canvasHeight=m.canvasHeight;let X=this.options.gap||10;this.visibleItems=Math.ceil(this.containerHeight/(this.pageHeight+X))+4;let G=(this.pageHeight+X)*this.totalItems-X;this.wrapperMain.style.height=G+"px",this.clearAllCanvas(),this.renderList(1,Math.min(this.totalItems,this.visibleItems))}).catch(m=>{this.clearAllCanvas(),this.options.onError&&this.options.onError(m)})}).catch(d=>{this.clearAllCanvas(),this.options.onError&&this.options.onError(d)})}).catch(l=>{this.clearAllCanvas(),this.options.onError&&this.options.onError(l)})}renderList(Z,l){let d=this.wrapperMain,m=[...d.childNodes],X=[];if(d.childNodes.length===0)for(let G=Z;G<=l;G++){let c=this.createCanvas(G);d.appendChild(c),X.push(this.renderSinglePage(G,c))}else{let G=+m[0].getAttribute("data-id"),c=+m[m.length-1].getAttribute("data-id");if(l<G||Z>c)for(let b=Z;b<=l;b++){let W=this.createCanvas(b);d.appendChild(W),X.push(this.renderSinglePage(b,W))}if(Z<G&&l>=G){let b=m[0];for(let W=G-1;W>=Z;W--){let I=this.createCanvas(W);d.insertBefore(I,b),b=I,X.push(this.renderSinglePage(W,I))}}for(let b=0;b<=c-G;b++){let W=+m[b].getAttribute("data-id");(W<Z||W>l)&&d.removeChild(m[b])}if(l>c&&Z<=c)for(let b=c+1;b<=l;b++){let W=this.createCanvas(b);d.appendChild(W),X.push(this.renderSinglePage(b,W))}}Promise.all(X).then(G=>{this.options.onRendered&&this.options.onRendered()}).catch(G=>{this.options.onError&&this.options.onError(G)})}rerender(){this.renderList(1,Math.min(this.totalItems,this.visibleItems))}save(Z){this.pdfDocument&&this.pdfDocument._transport&&this.pdfDocument._transport.getData().then(l=>{p(Z||`js-preview-pdf-${new Date().getTime()}.pdf`,l.buffer)})}destroy(){this.wrapper.removeEventListener("scroll",this.onScroll),this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options={},this.requestOptions={},this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=null,this.loopCheckTimer&&clearTimeout(this.loopCheckTimer)}}function w(Y,Z,l){return new H(Y,Z,l)}const F={init:w},j={__name:"JsPdfDemo",setup(Y){const Z=R(null);return N(()=>{window.myPdfPreview=F.init(Z.value,{onError:l=>{console.log("发生错误",l)},onRendered:()=>{console.log("渲染完成")}}),window.myPdfPreview.preview("http://127.0.0.1:3000/long.pdf")}),(l,d)=>(x(),K("div",{ref_key:"dom",ref:Z,style:{height:"calc(100vh - 50px)"}},null,512))}};export{j as default};
|