@curless/hotel-storefront 0.15.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/tool-descriptions.test.js +1 -1
- package/dist/__tests__/tool-descriptions.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +32 -15
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/card.generated.d.ts +1 -1
- package/dist/card.generated.js +2 -2
- package/dist/card.generated.js.map +1 -1
- package/dist/server.d.ts +8 -8
- package/dist/server.js +2 -2
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +6 -1
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +43 -24
- package/dist/tools.js.map +1 -1
- package/package.json +1 -1
package/dist/card.generated.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// The hotel booking MCP App card - a single self-contained HTML (Vite +
|
|
3
3
|
// vite-plugin-singlefile, with the MCP Apps SDK bundled), base64-embedded so it
|
|
4
4
|
// is bundler-safe. Regenerate after changing the widget UI.
|
|
5
|
-
export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgY2g9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLHVoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxPYz17fSxsaD1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKGY9PlByb21pc2UucmVzb2x2ZShmKS50aGVuKHY9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnZ9KSx2PT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp2fSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9dWgobCxvKSxsIGluIE9jKXJldHVybjtPY1tsXT0hMDtjb25zdCBmPWwuZW5kc1dpdGgoIi5jc3MiKSx2PWY/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgJD1hLmxlbmd0aC0xOyQ+PTA7JC0tKXtjb25zdCBUPWFbJF07aWYoVC5ocmVmPT09bCYmKCFmfHxULnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke3Z9YCkpcmV0dXJuO2NvbnN0IHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKHkucmVsPWY/InN0eWxlc2hlZXQiOmNoLGZ8fCh5LmFzPSJzY3JpcHQiKSx5LmNyb3NzT3JpZ2luPSIiLHkuaHJlZj1sLHUmJnkuc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5KSxmKXJldHVybiBuZXcgUHJvbWlzZSgoJCxUKT0+e3kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsJCkseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PlQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBkaChlKXtyZXR1cm4gZX1mdW5jdGlvbiBwaChlKXtyZXR1cm4gZX1mdW5jdGlvbiBibygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIGZoKGUpe31mdW5jdGlvbiBoaChlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIG1oKGUpe31mdW5jdGlvbiBXcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBHcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+bXMobikpLmpvaW4odCl9ZnVuY3Rpb24gcm8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIGdoe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIG5ldyBnaChlKX1mdW5jdGlvbiBmcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBSZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gd3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgQWM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gJHUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1BYylyZXR1cm4gbz09PXZvaWQgMCYmKG89QWMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHZoKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gV2UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB5byhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBUZShlKXtyZXR1cm4geW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gU3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBXZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB6dShlLHQsbil7dCBpbiBlP1dlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gRmUoZSx0LG4sbyl7Y29uc3Qgcj1UZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9TdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTp6dShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBiaChlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/U3UoZSxuLCgpPT50W25dKTp6dShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBuZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiB5aChlKXtyZXR1cm4gbmUoZS5fem9kLmRlZil9ZnVuY3Rpb24gX2goZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24ga2goZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIHdoKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gVHUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIEl1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgaHM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IFB1PVV0KCgpPT57aWYocmUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gTmUoZSl7aWYobnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKG50KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gX28oZSl7cmV0dXJuIE5lKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gJGgoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgU2g9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LHNvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSkseHU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBCKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiBfKGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiB6aChlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBtcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBFdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEN1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxPdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gQXUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gRmUocyxlLGtvKGUsdCkpLEIoZSxuZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBrbyhlLHQpe2NvbnN0IG49VGUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBSdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoa28oZSx0KSksaT17fTtyZXR1cm4gRmUoaSxlLFJlZmxlY3Qub3duS2V5cyhUZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEIoZSxuZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBadShlLHQpe2lmKCFOZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1UZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gQihlLG5lKGUuX3pvZC5kZWYse3NoYXBlOk51KGUsdCl9KSl9ZnVuY3Rpb24gTnUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksYmgobix0KSxufWZ1bmN0aW9uIGp1KGUsdCl7aWYoIU5lKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBCKGUsbmUoZS5fem9kLmRlZix7c2hhcGU6TnUoZSx0KX0pKX1mdW5jdGlvbiBNdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksRmUobix0LFJlZmxlY3Qub3duS2V5cyhUZSh0KSkpO2NvbnN0IG89bmUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBCKGUsbyl9ZnVuY3Rpb24gUXIoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KGtvKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBGZShjLHQsUmVmbGVjdC5vd25LZXlzKFRlKHQpKSxlJiYoKHUsbCk9PmEmJiFhLmhhcyhsKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLEIodCxuZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBxdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoa28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIEZlKHIsdCxSZWZsZWN0Lm93bktleXMoVGUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEIodCxuZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGllKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRHUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBtZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIFllKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIFlyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBiZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOlllKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9ZZShzPy4oZSkpPz9ZZSh0Py5lcnJvcj8uKGUpKT8/WWUobi5jdXN0b21FcnJvcj8uKGUpKT8/WWUobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gd28oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IFRoPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uICRvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIVRoLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gU28oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIEx1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gb3QoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBJaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gVXUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIEh1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gUGgoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gVXUodCtuKX1mdW5jdGlvbiB4aChlKXtyZXR1cm4gSHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIEVoKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBDaChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBPaHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIEZ1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6QWgoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBQZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiB6byhlLHQsbil7cmV0dXJuIFBlKGUsdCxuLCExKX1mdW5jdGlvbiBIdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gUGUodGhpcyxuLG8odGhpcykpfSxzZXQocil7UGUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIEFoKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpQZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe1BlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBSaChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IFVyLEFlPSExO2NvbnN0IFpoPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7QWU9ITB9fTtmdW5jdGlvbiBDKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmVXIhPT1lLl96b2Qpe1VyPXZvaWQgMDtyZXR1cm59VXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LFpoKTtjb25zdCByPUFlO0FlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIEFlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksQWU9QWV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxBZT1BZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gQnUoZSx0LG4sbyl7Y29uc3Qgcj1SaChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IFZ1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gZ3MoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtWdV09ITAsdH1jb25zdCB2cz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6T3UsQ09OU1RBTlRfQ0FUQ0g6VnUsQ2xhc3M6T2gsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6Q3UsYWJvcnRlZDppZSxhbGxvd3NFdmFsOlB1LGFzc2VydDptaCxhc3NlcnRFcXVhbDpkaCxhc3NlcnRJczpmaCxhc3NlcnROZXZlcjpoaCxhc3NlcnROb3RFcXVhbDpwaCxhc3NpZ25Qcm9wOldlLGF0dGFjaFNjaGVtYTpZcixiYXNlNjRUb1VpbnQ4QXJyYXk6VXUsYmFzZTY0dXJsVG9VaW50OEFycmF5OlBoLGNhY2hlZDpVdCxjYXB0dXJlU3RhY2tUcmFjZTpocyxjbGVhbkVudW06SWgsY2xlYW5SZWdleDpSZSxjbG9uZTpCLGNsb25lRGVmOnloLGNvZGVQb2ludExlbmd0aDokbyxjb25zdGFudENhdGNoOmdzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6emgsZGVmaW5lTGF6eTokdSxkZWZpbmVMYXp5SW50ZXJuYWw6QyxkZXJpdmVkOkh0LGVzYzpUdSxlc2NhcGVSZWdleDpJZSxleHBsaWNpdGx5QWJvcnRlZDpEdSxleHRlbmQ6WnUsZmluYWxpemVJc3N1ZTpiZSxmbG9hdFNhZmVSZW1haW5kZXI6d3UsZ2V0RWxlbWVudEF0UGF0aDpfaCxnZXRFbnVtVmFsdWVzOldyLGdldExlbmd0aGFibGVPcmlnaW46U28sZ2V0UGFyc2VkVHlwZTpTaCxnZXRTaXphYmxlT3JpZ2luOndvLGhleFRvVWludDhBcnJheTpFaCxoaWRlOnpvLGluc3RhbGxMYXp5UHJvcDpCdSxpc09iamVjdDpudCxpc1BsYWluT2JqZWN0Ok5lLGlzc3VlOm90LGpvaW5WYWx1ZXM6R3IsanNvblN0cmluZ2lmeVJlcGxhY2VyOnJvLG1lbWJlcnM6RnUsbWVyZ2U6TXUsbWVyZ2VEZWZzOm5lLG5vcm1hbGl6ZVBhcmFtczpfLG51bGxpc2g6ZnMsbnVtS2V5czokaCxvYmplY3RDbG9uZTp2aCxvbWl0OlJ1LG9wdGlvbmFsS2V5czpFdSxvd246UGUscGFyc2VkVHlwZTpMdSxwYXJ0aWFsOlFyLHBpY2s6QXUscHJlZml4SXNzdWVzOm1lLHByaW1pdGl2ZVR5cGVzOnh1LHByb21pc2VBbGxPYmplY3Q6a2gscHJvcGVydHlLZXlUeXBlczpzbyxyYW5kb21TdHJpbmc6d2gscmF3U2hhcGU6eW8scmVxdWlyZWQ6cXUsc2FmZUV4dGVuZDpqdSxzaGFsbG93Q2xvbmU6X28sc2x1Z2lmeTpJdSxzdHJpbmdpZnlQcmltaXRpdmU6bXMsdG9ab2Q6Ym8sdWludDhBcnJheVRvQmFzZTY0Okh1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDp4aCx1aW50OEFycmF5VG9IZXg6Q2gsdW53cmFwTWVzc2FnZTpZZX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgUmM7Y29uc3QgYnM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLEhyPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFpjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIE5oKGUpe2NvbnN0IHQ9WmM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBaYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKHYpe3RoaXMuZGVmPXYsdGhpcy5jb25zdHI9Zix0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyh2LGIpe2lmKHYuX3pvZCl7aWYodi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7SHIudmFsdWU9bmV3IHMoYik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LCJfem9kIixIcil9ZmluYWxseXtIci52YWx1ZT12b2lkIDB9fWlmKHYuX3pvZC50cmFpdHMuYWRkKGUpLHQodixiKSxhKXtjb25zdCAkPU9iamVjdC5nZXRQcm90b3R5cGVPZih2KSxUPXYuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBrPSQ7Zm9yKDtrJiZrIT09VDspaz1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoayk7Y29uc3QgUz1rPz8kO2EuaGFzKFMpfHwoYS5hZGQoUyksRnUoUyxpKSl9Y29uc3QgeT1mLnByb3RvdHlwZTtmb3IoY29uc3QgJCBpbiB5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LCQpJiYoJCBpbiB2fHwodlskXT15WyRdLmJpbmQodikpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGwgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkobCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBmKHYpe2NvbnN0IGI9bz8uUGFyZW50P05oKGwpOnRoaXM7YyhiLHYpO2NvbnN0IHk9Yi5fem9kLmRlZmVycmVkO2lmKHkpe2Zvcihjb25zdCBUIG9mIHkpVCgpO2IuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3QgJD1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gJCYmJChiKSxifXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOnY9Pm8/LlBhcmVudCYmdiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOnY/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIm5hbWUiLHt2YWx1ZTplfSksZn1jb25zdCB5cz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFplIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFRvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShSYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhSYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IHJlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIEcoZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24ocmUsZSkscmV9ZnVuY3Rpb24gamgoKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLHJvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gTWgoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBxaD17Z2V0OmpoLHNldDpNaCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sRnI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxOYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxKdT0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixGci52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLEZyKSxGci52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLHFoKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtOYy5oYXMobil8fChOYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0sS3U9cCgiJFpvZEVycm9yIixKdSksZGU9cCgiJFpvZEVycm9yIixKdSx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIERoKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gSW8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9EaChuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gUG8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgYz1uLHU9MDtmb3IoO3U8YS5sZW5ndGg7KXtjb25zdCBsPWFbdV0sZj11PT09YS5sZW5ndGgtMTtpZihsPT09Il9lcnJvcnMiKXtmJiZjLl9lcnJvcnMucHVzaCh0KGkpKSx1Kys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IHY9Y1tsXTtmJiZ2Ll9lcnJvcnMucHVzaCh0KGkpKSxjPXYsdSsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIF9zKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcChjPT5vKHtpc3N1ZXM6Y30sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IGM9Wy4uLnMsLi4uYS5wYXRoXTtpZihjLmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IHU9bixsPTA7Zm9yKDtsPGMubGVuZ3RoOyl7Y29uc3QgZj1jW2xdLHY9bD09PWMubGVuZ3RoLTE7dHlwZW9mIGY9PSJzdHJpbmciPyh1LnByb3BlcnRpZXM/Pyh1LnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LnByb3BlcnRpZXMsZil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3BlcnRpZXMsZix7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx1PXUucHJvcGVydGllc1tmXSk6KHUuaXRlbXM/Pyh1Lml0ZW1zPVtdKSwoaT11Lml0ZW1zKVtmXT8/KGlbZl09e2Vycm9yczpbXX0pLHU9dS5pdGVtc1tmXSksdiYmdS5lcnJvcnMucHVzaCh0KGEpKSxsKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBXdShlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24ga3MoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7V3Uoby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24geG8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBGdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+YmUodSxpLEcoKSkpKTt0aHJvdyBocyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LFhyPUZ0KGRlKSxCdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+YmUodSxpLEcoKSkpKTt0aHJvdyBocyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LGVzPUJ0KGRlKSxWdD1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP1F1KGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sR3U9VnQoZGUpO2Z1bmN0aW9uIFF1KGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+YmUocixuLEcoKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IEp0PWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/UXUoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxMaD1KdChkZSksVWg9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLEhoPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksRW89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1VaClyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIEZoKGUsdCxuKX0pO2Z1bmN0aW9uIEZoKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW0hoXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IENvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sd3M9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEseG8obixpKSl9O3JldHVybiBufSxCaD13cyhkZSksJHM9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMseG8obixpKSk7cmV0dXJuIG59LFZoPSRzKGRlKSxTcz1lPT57Y29uc3QgdD1CdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLHhvKG4saSkpfTtyZXR1cm4gbn0sSmg9U3MoZGUpLHpzPWU9Pntjb25zdCB0PUJ0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMseG8obixpKSk7cmV0dXJuIG59LEtoPXpzKGRlKSxUcz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBWdChlKSh0LG4scil9LFdoPVRzKGRlKSxJcz1lPT4odCxuLG8pPT5WdChlKSh0LG4sbyksR2g9SXMoZGUpLFBzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gSnQoZSkodCxuLHIpfSxRaD1QcyhkZSkseHM9ZT0+YXN5bmModCxuLG8pPT5KdChlKSh0LG4sbyksWWg9eHMoZGUpLFl1PS9eW2NDXVswLTlhLXpdezYsfSQvLFh1PS9eWzAtOWEtel0rJC8sZWw9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sdGw9L15bMC05YS12QS1WXXsyMH0kLyxubD0vXltBLVphLXowLTldezI3fSQvLG9sPS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBybChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3Qgc2w9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sWGg9L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxpbD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8scnQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLGVtPXJ0KDQpLHRtPXJ0KDYpLG5tPXJ0KDcpLGFsPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLG9tPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLHJtPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLGNsPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LHNtPWNsLGltPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGFtPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24gdWwoKXtyZXR1cm4gbmV3IFJlZ0V4cChhbSwidSIpfWNvbnN0IGxsPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxkbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLHBsPWU9Pntjb25zdCB0PUllKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LGZsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxobD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyxjbT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyx1bT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8sbWw9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLGdsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxFcz0vXmh0dHBzPyQvLHZsPS9eXCtbMS05XVxkezYsMTR9JC8sQ3M9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLGJsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLE9zPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLHlsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiBsbShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgX2w9bG0oeWwpO2Z1bmN0aW9uIHRzKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24ga2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke3RzKGUpfSRgKX1mdW5jdGlvbiB3bChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7dHMoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHt0cyh7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHt5bH1UKD86JHtvfSkkYCl9Y29uc3QgJGw9L15bXHNcU117MCx9JC8sU2w9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0semw9L14tP1xkK24/JC8sVGw9L14tP1xkKyQvLE9vPS9eLT9cZCsoPzpcLlxkKyk/JC8sSWw9L14oPzp0cnVlfGZhbHNlKSQvaSxQbD0vXm51bGwkL2kseGw9L151bmRlZmluZWQkL2ksRWw9L15bXkEtWl0qJC8sQ2w9L15bXmEtel0qJC8sT2w9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBLdChlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IGRtPS9eWzAtOWEtZkEtRl17MzJ9JC8scG09S3QoMjIsIj09IiksZm09V3QoMjIpLGhtPS9eWzAtOWEtZkEtRl17NDB9JC8sbW09S3QoMjcsIj0iKSxnbT1XdCgyNyksdm09L15bMC05YS1mQS1GXXs2NH0kLyxibT1LdCg0MywiPSIpLHltPVd0KDQzKSxfbT0vXlswLTlhLWZBLUZdezk2fSQvLGttPUt0KDY0LCIiKSx3bT1XdCg2NCksJG09L15bMC05YS1mQS1GXXsxMjh9JC8sU209S3QoODYsIj09Iiksem09V3QoODYpLEFvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6JGwsYmFzZTY0OmNtLGJhc2U2NHVybDp1bSxiaWdpbnQ6emwsYm9vbGVhbjpJbCxicm93c2VyRW1haWw6aW0sY2lkcnY0OmZsLGNpZHJ2NjpobCxjcmVkaXRDYXJkOkNzLGN1aWQ6WXUsY3VpZDI6WHUsY3VycmVuY3lDb2RlOmJsLGRhdGU6X2wsZGF0ZXRpbWU6d2wsZG9tYWluOmdsLGR1cmF0aW9uOnNsLGUxNjQ6dmwsZW1haWw6YWwsZW1vamk6dWwsZXh0ZW5kZWREdXJhdGlvbjpYaCxndWlkOmlsLGhleDpPbCxob3N0bmFtZTptbCxodG1sNUVtYWlsOm9tLGh0dHBQcm90b2NvbDpFcyxpYmFuOk9zLGlkbkVtYWlsOnNtLGludGVnZXI6VGwsaXB2NDpsbCxpcHY2OmRsLGtzdWlkOm5sLGxvd2VyY2FzZTpFbCxtYWM6cGwsbWQ1X2Jhc2U2NDpwbSxtZDVfYmFzZTY0dXJsOmZtLG1kNV9oZXg6ZG0sbmFub2lkOm9sLG5hbm9pZE9mTGVuZ3RoOnJsLG51bGw6UGwsbnVtYmVyOk9vLHJmYzUzMjJFbWFpbDpybSxzaGExX2Jhc2U2NDptbSxzaGExX2Jhc2U2NHVybDpnbSxzaGExX2hleDpobSxzaGEyNTZfYmFzZTY0OmJtLHNoYTI1Nl9iYXNlNjR1cmw6eW0sc2hhMjU2X2hleDp2bSxzaGEzODRfYmFzZTY0OmttLHNoYTM4NF9iYXNlNjR1cmw6d20sc2hhMzg0X2hleDpfbSxzaGE1MTJfYmFzZTY0OlNtLHNoYTUxMl9iYXNlNjR1cmw6em0sc2hhNTEyX2hleDokbSxzdHJpbmc6U2wsdGltZTprbCx1bGlkOmVsLHVuZGVmaW5lZDp4bCx1bmljb2RlRW1haWw6Y2wsdXBwZXJjYXNlOkNsLHV1aWQ6cnQsdXVpZDQ6ZW0sdXVpZDY6dG0sdXVpZDc6bm0seGlkOnRsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEY9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLEFzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWZzKHQpJiZ0LnNpemUhPT12b2lkIDB9LFJzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWZzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0saW89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sWnM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57Ri5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTnM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57Ri5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxBbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTp3dShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFJsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntGLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109Q3VbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWmw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0YuaW5pdChlLHQpO2NvbnN0W24sb109T3VbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxObD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO0YuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49QXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46d28ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksamw9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtGLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUFzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOndvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTWw9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtGLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUFzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjp3byhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHFsPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtGLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtPyRvKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9U28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRGw9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO0YuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49UnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyPyRvKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9U28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxMbD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47Ri5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1ScyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/JG8ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9U28ociksYz1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLmM/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEd0PXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO0YuaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLFVsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e0d0LmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEhsPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RWwpLEd0LmluaXQoZSx0KX0pLEZsPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Q2wpLEd0LmluaXQoZSx0KX0pLEJsPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e0YuaW5pdChlLHQpO2NvbnN0IG49SWUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFZsPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57Ri5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtJZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEpsPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e0YuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke0llKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGFvKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ubWUobixlLmlzc3VlcykpfWNvbnN0IEtsPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PmFvKHIsbix0LnByb3BlcnR5KSk7YW8obyxuLHQucHJvcGVydHkpfX0pLFdsPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57Ri5pbml0KGUsdCksem8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKGMudGhlbih1PT5hbyh1LG8saSkpKSk6YW8oYyxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxHbD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntGLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFFsPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBZbHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IFhsPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0sST1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249WGw7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsYyx1KT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgbD1pZShhKSxmO2Zvcihjb25zdCB2IG9mIGMpe2lmKHYuX3pvZC5kZWYud2hlbil7aWYoRHUoYSl8fCF2Ll96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihsKWNvbnRpbnVlO2NvbnN0IGI9YS5pc3N1ZXMubGVuZ3RoLHk9di5fem9kLmNoZWNrKGEpO2lmKHkgaW5zdGFuY2VvZiBQcm9taXNlJiZ1Py5hc3luYz09PSExKXRocm93IG5ldyBaZTtpZihmfHx5IGluc3RhbmNlb2YgUHJvbWlzZSlmPShmPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgeSxhLmlzc3Vlcy5sZW5ndGghPT1iJiYoWXIoYS5pc3N1ZXMsYixlKSxsfHwobD1pZShhLGIpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PWIpY29udGludWU7WXIoYS5pc3N1ZXMsYixlKSxsfHwobD1pZShhLGIpKX19cmV0dXJuIGY/Zi50aGVuKCgpPT5hKTphfSxpPShhLGMsdSk9PntpZihpZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgbD1zKGMscix1KTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gbC50aGVuKGY9PmUuX3pvZC5wYXJzZShmLHUpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGwsdSl9O2UuX3pvZC5ydW49KGEsYyk9PntpZihjLnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLGMpO2lmKGMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgbD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4uYyxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGwgaW5zdGFuY2VvZiBQcm9taXNlP2wudGhlbihmPT5pKGYsYSxjKSk6aShsLGEsYyl9Y29uc3QgdT1lLl96b2QucGFyc2UoYSxjKTtpZih1IGluc3RhbmNlb2YgUHJvbWlzZSl7aWYoYy5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gdS50aGVuKGw9PnMobCxyLGMpKX1yZXR1cm4gcyh1LHIsYyl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIHpvKHRoaXMsIn5zdGFuZGFyZCIsanModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtQZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLGVkPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+YmUobix0LEcoKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gVG0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIGVkKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBqcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIGVkKG8sbil9Y2F0Y2h7fXJldHVybiBUbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBRdD1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/JGwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxEPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57R3QuaW5pdChlLHQpLFF0LmluaXQoZSx0KX0pLHRkPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1pbCksRC5pbml0KGUsdCl9KSxuZD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJ0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1ydCgpKTtELmluaXQoZSx0KX0pLG9kPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YWwpLEQuaW5pdChlLHQpfSksTXM9MSxOdD0yO2Z1bmN0aW9uIHFzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gcmQoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9xcyhlKXx8TnQ6c2QoZSx0KX1mdW5jdGlvbiBzZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09RXMuc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIE1zO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P050fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBOdH19Y29uc3QgSW09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gbnMoZSl7cmV0dXJuIGUucmVwbGFjZShJbSwiIil9ZnVuY3Rpb24gaWQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gYWQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgY2Q9cCgiJFpvZFVSTCIsKGUsdCk9PntELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9cmQobyx0KTtpZihyPT09TXMpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09TnQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPW5zKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhaWQocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIWFkKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOm5zKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLHVkPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dWwoKSksRC5pbml0KGUsdCl9KSxsZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/b2w6cmwodC5sZW5ndGgpKSxELmluaXQoZSx0KX0pLGRkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ZdSksRC5pbml0KGUsdCl9KSxwZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVh1KSxELmluaXQoZSx0KX0pLGZkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1lbCksRC5pbml0KGUsdCl9KSxoZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj10bCksRC5pbml0KGUsdCl9KSxtZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW5sKSxELmluaXQoZSx0KX0pLGdkPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49d2wodCkpLEQuaW5pdChlLHQpfSksdmQ9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPV9sKSxELmluaXQoZSx0KX0pLGJkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1rbCh0KSksRC5pbml0KGUsdCl9KSx5ZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXNsKSxELmluaXQoZSx0KX0pLF9kPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1sbCksRC5pbml0KGUsdCl9KSxQbT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gRHMoZSl7cmV0dXJuIFBtLnRlc3QoZSk/cXMoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBrZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZGwpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RHMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksd2Q9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cGwodC5kZWxpbWl0ZXIpKSxELmluaXQoZSx0KX0pLCRkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWZsKSxELmluaXQoZSx0KX0pO2Z1bmN0aW9uIFNkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpEcyhuKX1jb25zdCB6ZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1obCksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntTZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIExzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgVGQ9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLElkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVRkKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0xzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVXM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIFBkKGUpe2lmKCFVcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIExzKG4pfWNvbnN0IHhkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVzKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1BkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRWQ9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXZsKSxELmluaXQoZSx0KX0pLHhtPS9bLSBdL2c7ZnVuY3Rpb24gRW0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gQ2QoZSl7cmV0dXJuIENzLnRlc3QoZSk/RW0oZS5yZXBsYWNlKHhtLCIiKSk6ITF9Y29uc3QgT2Q9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUNzKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0NkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBDbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBBZChlKXtyZXR1cm4gT3MudGVzdChlKT9DbShlKTohMX1jb25zdCBSZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49T3MpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57QWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gWmQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBOZD1wKCIkWm9kSldUIiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57WmQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxqZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEhzPXAoIiRab2ROdW1iZXIiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49T28sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksTWQ9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntSbC5pbml0KGUsdCksSHMuaW5pdChlLHQpfSksRnM9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49SWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxCcz1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXpsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSkscWQ9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntabC5pbml0KGUsdCksQnMuaW5pdChlLHQpfSksRGQ9cCgiJFpvZFN5bWJvbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksTGQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj14bCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxVZD1wKCIkWm9kTnVsbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1QbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksSGQ9cCgiJFpvZEFueSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLEZkPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksQmQ9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksVmQ9cCgiJFpvZFZvaWQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxKZD1wKCIkWm9kRGF0ZSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIGpjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ubWUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBLZD1wKCIkWm9kQXJyYXkiLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1yZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7YysrKXtjb25zdCB1PXNbY10sbD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2gobC50aGVuKGY9PmpjKGYsbyxjKSkpO2Vsc2UgaWYoamMobCxvLGMpLGEmJmwuaXNzdWVzLmxlbmd0aCE9PTAmJmllKGwpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGNvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi5tZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IE9tPVtdO2Z1bmN0aW9uIFdkKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpPbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9RXUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBHZChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLGM9ci5rZXlTZXQsdT1yLmNhdGNoYWxsLl96b2QsbD11LmRlZi50eXBlLGY9dS5vcHRpbix2PXUub3B0b3V0O2xldCBiPTA7Zm9yKGNvbnN0IHkgaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09Yil7aWYoaWUobixiKSlicmVhaztiPW4uaXNzdWVzLmxlbmd0aH1pZihjLmhhcyh5KSljb250aW51ZTtpZih5PT09Il9fcHJvdG9fXyIpe2w9PT0ibmV2ZXIiJiZhLnB1c2goeSk7Y29udGludWV9aWYobD09PSJuZXZlciIpe2EucHVzaCh5KTtjb250aW51ZX1jb25zdCAkPXUucnVuKHt2YWx1ZTp0W3ldLGlzc3VlczpbXX0sbyk7JCBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKCQudGhlbihUPT5jbyhULG4seSx0LGYsdikpKTpjbygkLG4seSx0LGYsdil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBRZD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCB1PSgpPT57Y29uc3QgbD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmx9KSx1LnJhdz1sLGx9O3UucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0OnV9KX1jb25zdCByPVV0KCgpPT5XZCh0KSk7QyhlLCJwcm9wVmFsdWVzIix1PT57Y29uc3QgbD11LmRlZi5zaGFwZSxmPXt9O2Zvcihjb25zdCB2IGluIGwpe2NvbnN0IGI9bFt2XS5fem9kO2lmKGIudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZix2KXx8V2UoZix2LG5ldyBTZXQpO2Zvcihjb25zdCB5IG9mIGIudmFsdWVzKWZbdl0uYWRkKHkpO2Iub3B0aW4hPT12b2lkIDAmJmZbdl0uYWRkKHZvaWQgMCl9fXJldHVybiBmfSk7Y29uc3Qgcz1udCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgYz1yZS5tZW1vaXplcjtjPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPSh1LGwpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgZj11LnZhbHVlO2lmKCFzKGYpKXJldHVybiB1Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OmYsaW5zdDplfSksdTt1LnZhbHVlPWM/Yy5hbGxvYyhlLHUse30sbCk6e307Y29uc3Qgdj1bXSxiPWEuc2hhcGUseT1sPy5hYm9ydEVhcmx5O2xldCAkPXUuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgVCBvZiBhLmFsbEtleXMpe2lmKHkmJnUuaXNzdWVzLmxlbmd0aCE9PSQpe2lmKGllKHUsJCkpYnJlYWs7JD11Lmlzc3Vlcy5sZW5ndGh9aWYoVD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGs9YltUXSxTPWsuX3pvZC5vcHRpbixOPWsuX3pvZC5vcHRvdXQsSz1rLl96b2QucnVuKHt2YWx1ZTpmW1RdLGlzc3VlczpbXX0sbCk7SyBpbnN0YW5jZW9mIFByb21pc2U/di5wdXNoKEsudGhlbihIPT5jbyhILHUsVCxmLFMsTikpKTpjbyhLLHUsVCxmLFMsTil9cmV0dXJuIGk/R2QodixmLHUsbCxyLnZhbHVlLGUseT09PSEwKTp2Lmxlbmd0aD9Qcm9taXNlLmFsbCh2KS50aGVuKCgpPT51KTp1fX0pLFlkPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57UWQuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89VXQoKCk9PldkKHQpKSxyPXJlLm1lbW9pemVyLHM9Yj0+e2NvbnN0IHk9by52YWx1ZSwkPXkuc3ltYm9sS2V5cyxUPW5ldyBZbChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6YixpbnN0OmUsbWVtbzpyLHN5bXM6JH0pLGs9SD0+YHNoYXBlWyR7SH1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7SH1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFM9KEgsTCk9PmAKICAgICAgICAgIGxldCAke0h9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7SH0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7SH0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7TH0sIC4uLmlzcy5wYXRoXSA6IFske0x9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0h9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0h9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gO1Qud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBOPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IEs9MDtmb3IoY29uc3QgSCBvZiB5LmFsbEtleXMpTltIXT1ga2V5XyR7SysrfWA7VC53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBIIG9mIHkuYWxsS2V5cyl7aWYoSD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IEw9TltIXSxmZT10eXBlb2YgSD09InN5bWJvbCI/YHN5bXNbJHskLmluZGV4T2YoSCl9XWA6VHUoSCksRHI9YCR7ZmV9IGluIGlucHV0YCxFYz1iW0hdLExyPUVjPy5fem9kPy5vcHRpbixDYz1MciE9PXZvaWQgMCxpaD1FYz8uX3pvZD8ub3B0b3V0PT09Im9wdGlvbmFsIjtpZihULndyaXRlKGBjb25zdCAke0x9ID0gJHtrKGZlKX07YCksQ2MmJmloKXtjb25zdCBhaD1Mcj09PSJvcHRpb25hbCI/YCR7TH1fcHJlc2VudGA6YCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0x9X3ByZXNlbnRgO1Qud3JpdGUoYAogICAgICAgIGNvbnN0ICR7TH1fcHJlc2VudCA9ICR7RHJ9OwogICAgICAgIGlmICghJHtMfS5pc3N1ZXMubGVuZ3RoIHx8ICR7TH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7UyhMLGZlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHthaH0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBDYz8oVC53cml0ZShgCiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7UyhMLGZlKX0KICAgICAgICB9CiAgICAgIGApLExyPT09ImRlZmF1bHRlZCI/VC53cml0ZShgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7YCk6VC53cml0ZShgCiAgICAgICAgaWYgKCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0RyfSkgewogICAgICAgICAgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6VC53cml0ZShgCiAgICAgICAgY29uc3QgJHtMfV9wcmVzZW50ID0gJHtEcn07CiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7UyhMLGZlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0x9X3ByZXNlbnQgJiYgISR7TH0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7ZmV9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7TH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuIFQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksVC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksVC5jb21waWxlKCl9O2xldCBpO2NvbnN0IGE9bnQsYz0hcmUuaml0bGVzcyxsPWMmJlB1LnZhbHVlLGY9dC5jYXRjaGFsbDtsZXQgdjtlLl96b2QucGFyc2U9KGIseSk9Pnt2Pz8odj1vLnZhbHVlKTtjb25zdCAkPWIudmFsdWU7cmV0dXJuIGEoJCk/YyYmbCYmeT8uYXN5bmM9PT0hMSYmeS5qaXRsZXNzIT09ITA/KGl8fChpPXModC5zaGFwZSkpLGI9aShiLHkpLGY/R2QoW10sJCxiLHksdixlLHk/LmFib3J0RWFybHk9PT0hMCk6Yik6bihiLHkpOihiLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OiQsaW5zdDplfSksYil9fSk7ZnVuY3Rpb24gTWMoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFpZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmJlKGksbyxHKCkpKSl9KSx0KX1jb25zdCBSbz1wKCIkWm9kVW5pb24iLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksQyhlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEMoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksQyhlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+UmUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2kucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5NYyhhLG8sZSxyKSk6TWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gcWMoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT5iZShpLG8sRygpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBYZD1wKCIkWm9kWG9yIiwoZSx0KT0+e1JvLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7YyBpbnN0YW5jZW9mIFByb21pc2U/KGkucHVzaChjKSxzPSEwKTppLnB1c2goYyl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5xYyhhLG8sZSxyKSk6cWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gVnMoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPWVwKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIGVwKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgdHA9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxSby5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7QyhlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgaT0wO2Zvcihjb25zdCBhIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGM9YS5fem9kLnByb3BWYWx1ZXM7aWYoIWN8fE9iamVjdC5rZXlzKGMpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihhKX0iYCk7Y1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmkrKztmb3IoY29uc3RbdSxsXW9mIE9iamVjdC5lbnRyaWVzKGMpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8V2Uocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBmIG9mIGwpc1t1XS5hZGQoZil9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZpPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGk9eW8oci5fem9kLmRlZik7aWYoaSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1VdCgoKT0+ZXAodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighbnQoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6aSxpbnN0OmV9KSxyO2NvbnN0IGE9aT8uW3QuZGlzY3JpbWluYXRvcl0sYz1vLnZhbHVlLmdldChhKTtyZXR1cm4gYyYmKGEhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/Yy5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6aSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLG5wPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksaT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxpIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxpXSkudGhlbigoW2MsdV0pPT5EYyhuLGMsdSkpOkRjKG4scyxpKX19KTtmdW5jdGlvbiB1byhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKE5lKGUpJiZOZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaT11byhlW3NdLHRbc10pO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5pLm1lcmdlRXJyb3JQYXRoXX07cltzXT1pLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10saT11byhyLHMpO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5pLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGkuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBEYyhlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxpPSh1LGwpPT57bGV0IGY7aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLGY9dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCB2PVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKHYpfHxzLnNldCh2LHUpLGY9W3ZdfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IHYgb2YgZilvLmhhcyh2KXx8by5zZXQodix7fSksby5nZXQodilbbF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWkodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWkodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGE9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGEubGVuZ3RoKXtjb25zdCB1PXI/YS5maWx0ZXIobD0+ci5rZXlzLmluY2x1ZGVzKGwpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgbCBvZiBhKSF1LmluY2x1ZGVzKGwpJiZzLmhhcyhsKSYmZS5pc3N1ZXMucHVzaChzLmdldChsKSl9Y29uc3QgYz11byh0LnZhbHVlLG4udmFsdWUpO2lmKCFjLnZhbGlkKXtpZihpZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGMubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWMuZGF0YSxlfWNvbnN0IEpzPXAoIiRab2RUdXBsZSIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1yZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBhPVtdLGM9TGMobiwib3B0aW4iKSx1PUxjKG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGkubGVuZ3RoPGMpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpjLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7aS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgbD1uZXcgQXJyYXkobi5sZW5ndGgpLGY9dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCB2PSExO2ZvcihsZXQgYj0wO2I8bi5sZW5ndGg7YisrKXtjb25zdCB5PW5bYl0uX3pvZC5ydW4oe3ZhbHVlOmlbYl0saXNzdWVzOltdfSxzKTt5IGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goeS50aGVuKCQ9PntsW2JdPSR9KSk6KGxbYl09eSxmJiYhdiYmeS5pc3N1ZXMubGVuZ3RoJiYodj1pZSh5KSkpfWlmKHQucmVzdCYmIXYpe2xldCBiPW4ubGVuZ3RoLTE7Y29uc3QgeT1pLnNsaWNlKG4ubGVuZ3RoKTtsZXQgJD1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IFQgb2YgeSl7aWYoZiYmci5pc3N1ZXMubGVuZ3RoIT09JCl7aWYoaWUociwkKSlicmVhazskPXIuaXNzdWVzLmxlbmd0aH1iKys7Y29uc3Qgaz10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOlQsaXNzdWVzOltdfSxzKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goay50aGVuKFM9PlVjKFMscixiKSkpOlVjKGsscixiKX19cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PkhjKGwscixuLGksdSkpOkhjKGwscixuLGksdSl9fSk7ZnVuY3Rpb24gTGMoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiBVYyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLm1lKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gSGMoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgaT1lW3NdLGE9czxvLmxlbmd0aDtpZighYSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihpLmlzc3Vlcy5sZW5ndGgpe2lmKCFhJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4ubWUocyxpLmlzc3VlcykpfXQudmFsdWVbc109aS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBvcD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49cmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighTmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W10sYT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoYSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGM9bmV3IFNldDtmb3IoY29uc3QgbCBvZiBhKWlmKHR5cGVvZiBsPT0ic3RyaW5nInx8dHlwZW9mIGw9PSJudW1iZXIifHx0eXBlb2YgbD09InN5bWJvbCIpe2lmKGMuYWRkKHR5cGVvZiBsPT0ibnVtYmVyIj9sLnRvU3RyaW5nKCk6bCksbD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGY9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZiBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYoZi5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpmLmlzc3Vlcy5tYXAoeT0+YmUoeSxyLEcoKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1mLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbih5PT57eS5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLm1lKGwseS5pc3N1ZXMpKSxvLnZhbHVlW3ZdPXkudmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5tZShsLGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1sZXQgdTtmb3IoY29uc3QgbCBpbiBzKWlmKCFjLmhhcyhsKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihsPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtsXT1zW2xdfWVsc2UgdT11Pz9bXSx1LnB1c2gobCk7dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCBjO2Zvcihjb25zdCB1IG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYodT09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsdSkpY29udGludWU7bGV0IGw9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7aWYobCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIHU9PSJzdHJpbmciJiZPby50ZXN0KHUpJiZsLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHk9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIodSksaXNzdWVzOltdfSxyKTtpZih5IGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTt5Lmlzc3Vlcy5sZW5ndGg9PT0wJiYobD15KX1pZihsLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVt1XT1zW3VdOmE/KGM9Yz8/W10sYy5wdXNoKHUpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpsLmlzc3Vlcy5tYXAoeT0+YmUoeSxyLEcoKSkpLGlucHV0OnUscGF0aDpbdV0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1sLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW3VdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbih5PT57eS5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLm1lKHUseS5pc3N1ZXMpKSxvLnZhbHVlW3ZdPXkudmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5tZSh1LGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSkscnA9cCgiJFpvZE1hcCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXJlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W3UsbF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihpZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGY9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0sciksdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2YgaW5zdGFuY2VvZiBQcm9taXNlfHx2IGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW2Ysdl0pLnRoZW4oKFtiLHldKT0+e0ZjKGIseSxvLHUscyxlLHIpfSkpOkZjKGYsdixvLHUscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIEZjKGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKHNvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5tZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PmJlKGEsaSxHKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihzby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ubWUobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoYT0+YmUoYSxpLEcoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3Qgc3A9cCgiJFpvZFNldCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXJlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IHUgb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09Yyl7aWYoaWUobyxjKSlicmVhaztjPW8uaXNzdWVzLmxlbmd0aH1jb25zdCBsPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7bCBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGwudGhlbihmPT5CYyhmLG8pKSk6QmMobCxvKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBCYyhlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgaXA9cCgiJFpvZEVudW0iLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1Xcih0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sQyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1XcihyLmRlZi5lbnRyaWVzKS5maWx0ZXIoaT0+c28uaGFzKHR5cGVvZiBpKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChpPT5JZShpLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO3JldHVybiBvLmhhcyhpKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6aSxpbnN0OmV9KSxyfX0pLGFwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLEMoZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP0llKHMpOnM/SWUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLGNwPXAoIiRab2RGaWxlIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx1cD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLHJlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFRvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGk9PihuLnZhbHVlPWksbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gVmMoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBLcz1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsQyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLEMoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7UmUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5WYyhuLHMpKTpWYyhuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLGxwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e0tzLmluaXQoZSx0KSxDKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxDKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGRwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9PntJLmluaXQoZSx0KSxDKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksQyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksQyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtSZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSkscHA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+SmMocyx0KSk6SmMocix0KX19KTtmdW5jdGlvbiBKYyhlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBmcD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksaHA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpLEMoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5LYyhzLGUpKTpLYyhyLGUpfX0pO2Z1bmN0aW9uIEtjKGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBtcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFRvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBXYyhlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PmJlKHIsbyxHKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBncD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxDKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxDKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+V2MobixzLHQsbykpOldjKG4scix0LG8pfX0pLHZwPXAoIiRab2ROYU4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLFdzPXAoIiRab2RQaXBlIiwoZSx0KT0+e0kuaW5pdChlLHQpLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+V24oaSx0LmluLG8pKTpXbihzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5XbihzLHQub3V0LG8pKTpXbihyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIFduKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBHcz1wKCIkWm9kQ29kZWMiLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxDKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxDKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxDKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PkduKGksdCxvKSk6R24ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+R24oaSx0LG8pKTpHbihzLHQsbyl9fX0pO2Z1bmN0aW9uIEduKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQub3V0LG4pKTpRbihlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQuaW4sbikpOlFuKGUscix0LmluLG4pfX1mdW5jdGlvbiBRbihlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IGJwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e1dzLmluaXQoZSx0KX0pLHlwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9PntJLmluaXQoZSx0KSxDKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEMoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEMoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKEdjKTpHYyhyKX19KTtmdW5jdGlvbiBHYyhlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIEFtKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1hLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IHU9Yy5taW5pbXVtPz9jLmxlbmd0aCxsPWMubWF4aW11bT8/Yy5sZW5ndGg7dSE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fHU+cikmJihyPXUpLGwhPT12b2lkIDAmJihzPT09dm9pZCAwfHxsPHMpJiYocz1sKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIFNsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1Pbz9UbDppKT8uc291cmNlfWZ1bmN0aW9uIG9zKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz1vcyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKFJlKHIpLCgpPT5SZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcChvcyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PlJlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBBbShlKX1jb25zdCBfcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPW9zKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKFJlKHIpKX1lbHNlIGlmKG89PT1udWxsfHx4dS5oYXModHlwZW9mIG8pKW4ucHVzaChJZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLGtwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9PihJLmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9YcihlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P1hyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBlcyhlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IGVzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IEpzKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksd3A9cCgiJFpvZFByb21pc2UiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLFFzPXAoIiRab2RMYXp5IiwoZSx0KT0+e0kuaW5pdChlLHQpLCR1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEMoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEMoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEMoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxDKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLCRwPXAoIiRab2RDdXN0b20iLChlLHQpPT57Ri5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PlFjKHMsbixvLGUpKTtRYyhyLG4sbyxlKX19KTtmdW5jdGlvbiBRYyhlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChvdChyKSl9fWNsYXNzIFNwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgcnM9In5tZW1vIixZYz1bXTtmdW5jdGlvbiB6cChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBCcihlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgVHA9bmV3IFdlYWtNYXAsWGU9MCxubz0xLEN0PTI7ZnVuY3Rpb24gT3QoZSx0LG4pe2NvbnN0IG89VHAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/Q3Q6WGU7aWYodC5oYXMoZSkpcmV0dXJuIEN0O3QuYWRkKGUpO2xldCByPVhlO2NvbnN0IHM9bD0+e2lmKHIhPT1DdCYmbD8uX3pvZCl7Y29uc3QgZj1PdChsLHQsbik7Zj5yJiYocj1mKX19LGk9KGwsZik9PntsZXQgdj1YZTtmb3IoY29uc3QgYiBvZiBSZWZsZWN0Lm93bktleXMobCkpe2NvbnN0IHk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGIpO2lmKCF5LmVudW1lcmFibGUpY29udGludWU7Y29uc3QgJD15LmdldD9ubzp5LnZhbHVlPy5fem9kP090KHkudmFsdWUsdCxuKTpYZTskPnYmJih2PSQpfXJldHVybiB2fSxhPWw9PntsPnImJihyPWwpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPXlvKGMpO2EobD9pKGwpOm5vKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgbCBvZiBjLml0ZW1zKXMobCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgbCBvZiBjLm9wdGlvbnMpcyhsKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgbD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EobD9PdChsLHQsITEpOm5vKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgbCBpbiBjKXtjb25zdCBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxsKTtpZighZnx8Zi5nZXQpY29udGludWU7Y29uc3Qgdj1mLnZhbHVlO2lmKCEoIXZ8fHR5cGVvZiB2IT0ib2JqZWN0Iikpe2lmKHYuX3pvZClzKHYpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh2KSlmb3IoY29uc3QgYiBvZiB2KXMoYil9fX1yZXR1cm4gdC5kZWxldGUoZSksUm0oZSxyKX1mdW5jdGlvbiBSbShlLHQpe3JldHVybiB0IT09bm8mJlRwLnNldChlLHQ9PT1DdCksdH1mdW5jdGlvbiBabShlKXtyZXR1cm4gT3QoZSxuZXcgU2V0LCEwKSE9PVhlfWZ1bmN0aW9uIE5tKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBZbjtjb25zdCBYbj1bXSxqbT17YWxsb2MoZSx0LG4pe2NvbnN0IG89WW47aWYoIW8pcmV0dXJuIG47WW49dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLFhuLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmSXAocyxyLnZhbHVlKSl0aHJvdyBuZXcgU3A7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShjLHUpPT57aWYobj09PXZvaWQgMCl7Y29uc3Qgaz1PdChlLG5ldyBTZXQsITEpO2lmKGs9PT1YZSlyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkoYyx1KTtrPT09Q3R8fG8/bj0hMDpvPSEwfWNvbnN0IGw9Yy52YWx1ZTtpZighenAobCkpcmV0dXJuIGkoYyx1KTtsZXQgZj11W3JzXTtmfHwoZj17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSx1W3JzXT1mKTtsZXQgdjtyPT09dT92PXM6KHY9Tm0oZixlKSxyPXUscz12KTtjb25zdCBiPXYuZ2V0KGwpO2lmKGIpcmV0dXJuIGMudmFsdWU9Yi52YWx1ZSxiLmlzc3Vlcz9iLmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uQnIoYi5pc3N1ZXMpKTooYy5tZW1vPSEwLGYuYmFja0VkZ2VzPz8oZi5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLGYuYmFja0VkZ2VzLmFkZChiLnZhbHVlKSksYztZbj12O2NvbnN0IHk9WG4ubGVuZ3RoLCQ9aShjLHUpO1luPXZvaWQgMDtjb25zdCBUPVhuLmxlbmd0aD55P1huLnBvcCgpOnZvaWQgMDtyZXR1cm4gJCBpbnN0YW5jZW9mIFByb21pc2U/JC50aGVuKGs9PihUJiYoVC5pc3N1ZXM9ay5pc3N1ZXMubGVuZ3RoP0JyKGsuaXNzdWVzKTpZYyksaykpOihUJiYoVC5pc3N1ZXM9JC5pc3N1ZXMubGVuZ3RoP0JyKCQuaXNzdWVzKTpZYyksJCl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gWm8oKXtyZXR1cm4gam19ZnVuY3Rpb24gSXAoZSx0KXtjb25zdCBuPWVbcnNdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJnpwKHQpJiZuLmhhcyh0KX1jb25zdCBNbT0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9THUocy5pbnB1dCksYz1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7bXMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtHcihzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtHcihzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIFBwKCl7cmV0dXJue2xvY2FsZUVycm9yOk1tKCl9fWNvbnN0IFlzPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpQcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWGM7Y29uc3QgWHM9U3ltYm9sKCJab2RPdXRwdXQiKSxlaT1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgeHB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gTm8oKXtyZXR1cm4gbmV3IHhwfShYYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KFhjLl9fem9kX2dsb2JhbFJlZ2lzdHJ5PU5vKCkpO2NvbnN0IGdlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksdGk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIG5pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIG9pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIHJpIGV4dGVuZHMgRXJyb3J7fWNvbnN0IHNpPXRpLGlpPXRpLHFtPXRpO2Z1bmN0aW9uIGpvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gRXAoZSx0KXtyZXR1cm4gbmV3IGUoam8oe3R5cGU6InN0cmluZyIsLi4uXyh0KX0pKX1mdW5jdGlvbiBDcChlLHQpe3JldHVybiBuZXcgZShqbyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4uXyh0KX0pKX1mdW5jdGlvbiBhaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiB1aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLl8odCl9KX1mdW5jdGlvbiBkaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4uXyh0KX0pfWZ1bmN0aW9uIHBpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi5fKHQpfSl9ZnVuY3Rpb24gTW8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gZmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBoaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBtaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gZ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiB2aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gYmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24geWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBfaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24ga2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIE9wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uICRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBBcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBJaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1jb25zdCBQaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi5fKHQpfSl9ZnVuY3Rpb24gRWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4uXyh0KX0pfWZ1bmN0aW9uIENpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLl8odCl9KX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFpwKGUsdCl7cmV0dXJuIG5ldyBlKGpvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi5fKHQpfSkpfWZ1bmN0aW9uIE5wKGUsdCl7cmV0dXJuIG5ldyBlKGpvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4uXyh0KX0pKX1mdW5jdGlvbiBqcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi5fKHQpfSl9ZnVuY3Rpb24gTXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIHFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBEcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIExwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIFVwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi5fKHQpfSl9ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gRnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4uXyh0KX0pfWZ1bmN0aW9uIEJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gVnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBKcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBLcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi5fKHQpfSl9ZnVuY3Rpb24gV3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4uXyh0KX0pfWZ1bmN0aW9uIEdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi5fKHQpfSl9ZnVuY3Rpb24gUXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gWXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4uXyh0KX0pfWZ1bmN0aW9uIGVmKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi5fKHQpfSl9ZnVuY3Rpb24gdGYoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLl8odCl9KX1mdW5jdGlvbiBuZihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiBvZihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi5fKHQpfSl9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gbmV3IFpzKHtjaGVjazoibGVzc190aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4gbmV3IFpzKHtjaGVjazoibGVzc190aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gRWUoZSx0KXtyZXR1cm4gbmV3IE5zKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4gbmV3IE5zKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIEVlKDAsZSl9ZnVuY3Rpb24gRG8oZSl7cmV0dXJuIHhlKDAsZSl9ZnVuY3Rpb24gTG8oZSl7cmV0dXJuIHVlKDAsZSl9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGxlKDAsZSl9ZnVuY3Rpb24gQmUoZSx0KXtyZXR1cm4gbmV3IEFsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLl8odCksdmFsdWU6ZX0pfWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIG5ldyBObCh7Y2hlY2s6Im1heF9zaXplIiwuLi5fKHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIENlKGUsdCl7cmV0dXJuIG5ldyBqbCh7Y2hlY2s6Im1pbl9zaXplIiwuLi5fKHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGx0KGUsdCl7cmV0dXJuIG5ldyBNbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi5fKHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIG5ldyBxbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLl8odCksbWF4aW11bTplfSl9ZnVuY3Rpb24gamUoZSx0KXtyZXR1cm4gbmV3IERsKHtjaGVjazoibWluX2xlbmd0aCIsLi4uXyh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBwdChlLHQpe3JldHVybiBuZXcgTGwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi5fKHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gbmV3IFVsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4uXyh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBYdChlKXtyZXR1cm4gbmV3IEhsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLl8oZSl9KX1mdW5jdGlvbiBlbihlKXtyZXR1cm4gbmV3IEZsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLl8oZSl9KX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBuZXcgQmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi5fKHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBubihlLHQpe3JldHVybiBuZXcgVmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi5fKHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gb24oZSx0KXtyZXR1cm4gbmV3IEpsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLl8odCksc3VmZml4OmV9KX1mdW5jdGlvbiBIbyhlLHQsbil7cmV0dXJuIG5ldyBLbCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLl8obil9KX1mdW5jdGlvbiBybihlLHQpe3JldHVybiBuZXcgV2woe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLl8odCl9KX1mdW5jdGlvbiBzbihlLHQpe3JldHVybiBuZXcgR2woe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi5fKHQpfSl9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIG5ldyBRbCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIGFuKGUpe3JldHVybiAkZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gY24oKXtyZXR1cm4gJGUoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIHVuKCl7cmV0dXJuICRlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gJGUoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBkbigpe3JldHVybiAkZShlPT5JdShlKSl9ZnVuY3Rpb24gcmYoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gRG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gTG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4uXyhuKX0pfWZ1bmN0aW9uIFVtKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4uXyhvKX0pfWZ1bmN0aW9uIEhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBGbShlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiBJLHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi5fKHMpfSl9ZnVuY3Rpb24gQm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi5fKG8pfSl9ZnVuY3Rpb24gVm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi5fKG8pfSl9ZnVuY3Rpb24gSm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gS20oZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLl8obil9KX1mdW5jdGlvbiBXbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIEdtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLl8obil9KX1mdW5jdGlvbiBzZihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4uXyh0KX0pfWZ1bmN0aW9uIFFtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gWW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFhtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBlZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTpfbyhuKX19KX1mdW5jdGlvbiB0ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIG5nKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIG9nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246Z3Mobil9KX1mdW5jdGlvbiByZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gc2coZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGlnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIGNnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGFmKGUsdCxuKXtjb25zdCBvPV8obik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBjZihlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIHVmKGUsdCl7Y29uc3Qgbj1sZihvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2gob3QocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKG90KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gbGYoZSx0KXtjb25zdCBuPW5ldyBGKHtjaGVjazoiY3VzdG9tIiwuLi5fKHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gZGYoZSl7Y29uc3QgdD1uZXcgRih7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWdlLmdldChuKT8/e307Z2UuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIHBmKGUpe2NvbnN0IHQ9bmV3IEYoe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWdlLmdldChuKT8/e307Z2UuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIGZmKGUsdCl7Y29uc3Qgbj1fKHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpLHI9ci5tYXAoYj0+dHlwZW9mIGI9PSJzdHJpbmciP2IudG9Mb3dlckNhc2UoKTpiKSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P0dzLGM9ZS5Cb29sZWFuPz9Gcyx1PWUuU3RyaW5nPz9RdCxsPW5ldyB1KHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxmPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksdj1uZXcgYSh7dHlwZToicGlwZSIsaW46bCxvdXQ6Zix0cmFuc2Zvcm06KChiLHkpPT57bGV0ICQ9YjtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJigkPSQudG9Mb3dlckNhc2UoKSkscy5oYXMoJCk/ITA6aS5oYXMoJCk/ITE6KHkuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6eS52YWx1ZSxpbnN0OnYsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigoYix5KT0+Yj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIHYuX3pvZC5iYWcudHJ1dGh5PW8sdi5fem9kLmJhZy5mYWxzeT1yLHYuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsdn1mdW5jdGlvbiBmdChlLHQsbixvPXt9KXtjb25zdCByPV8obykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgdWc9KCk9Pih7fSksbGc9KCk9Pih7fSksZGc9KCk9Pih7fSkscGc9KCk9Pih7fSksZmc9KCk9Pih7fSksaGY9KCk9PigpPT4oe30pLHNzPSgpPT4oKT0+KHt9KSxoZz0oKT0+KHt9KSx2ZT0oKT0+KHt9KSxtZz0oKT0+KHt9KSxnZz0oKT0+KHt9KSx2Zz0oKT0+KHt9KSxiZz0oKT0+KHt9KSx5Zz0oKT0+KHt9KSxfZz0oKT0+KHt9KSxrZz0oKT0+KHt9KSx3Zz0oKT0+KHt9KSwkZz0oKT0+KHt9KSxTZz0oKT0+KHt9KSx6Zz0oKT0+KHt9KSxUZz0oKT0+KHt9KSxJZz0oKT0+KHt9KSxQZz0oKT0+KHt9KSx4Zz0oKT0+KHt9KSxFZz0oKT0+KHt9KSxDZz0oKT0+KHt9KSxPZz0oKT0+KHt9KSxBZz0oKT0+KHt9KSxSZz0oKT0+KHt9KSxaZz0oKT0+KHt9KSxOZz0oKT0+KHt9KSxqZz0oKT0+KHt9KSxNZz0oKT0+KHt9KSxxZz0oKT0+KHt9KSxtZj0oKT0+KHt9KSxEZz0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxHZz0oKT0+KHt9KSxnZj0oKT0+KHt9KSxRZz0oKT0+KHt9KSxBaT0oKT0+KHt9KTtjbGFzcyBZZ3t9Y29uc3QgWGc9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHZmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OkhkLCRab2RBcnJheTpLZCwkWm9kQXN5bmNFcnJvcjpaZSwkWm9kQmFzZTY0OklkLCRab2RCYXNlNjRVUkw6eGQsJFpvZEJpZ0ludDpCcywkWm9kQmlnSW50Rm9ybWF0OnFkLCRab2RCb29sZWFuOkZzLCRab2RDSURSdjQ6JGQsJFpvZENJRFJ2Njp6ZCwkWm9kQ1VJRDpkZCwkWm9kQ1VJRDI6cGQsJFpvZENhdGNoOmdwLCRab2RDaGVjazpGLCRab2RDaGVja0JpZ0ludEZvcm1hdDpabCwkWm9kQ2hlY2tFbmRzV2l0aDpKbCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpOcywkWm9kQ2hlY2tJbmNsdWRlczpCbCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6TGwsJFpvZENoZWNrTGVzc1RoYW46WnMsJFpvZENoZWNrTG93ZXJDYXNlOkhsLCRab2RDaGVja01heExlbmd0aDpxbCwkWm9kQ2hlY2tNYXhTaXplOk5sLCRab2RDaGVja01pbWVUeXBlOkdsLCRab2RDaGVja01pbkxlbmd0aDpEbCwkWm9kQ2hlY2tNaW5TaXplOmpsLCRab2RDaGVja011bHRpcGxlT2Y6QWwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OlJsLCRab2RDaGVja092ZXJ3cml0ZTpRbCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOldsLCRab2RDaGVja1Byb3BlcnR5OktsLCRab2RDaGVja1JlZ2V4OlVsLCRab2RDaGVja1NpemVFcXVhbHM6TWwsJFpvZENoZWNrU3RhcnRzV2l0aDpWbCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6R3QsJFpvZENoZWNrVXBwZXJDYXNlOkZsLCRab2RDb2RlYzpHcywkWm9kQ3JlZGl0Q2FyZDpPZCwkWm9kQ3VzdG9tOiRwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6amQsJFpvZEN5Y2xpY0Vycm9yOlNwLCRab2REYXRlOkpkLCRab2REZWZhdWx0OnBwLCRab2REaXNjcmltaW5hdGVkVW5pb246dHAsJFpvZEUxNjQ6RWQsJFpvZEVtYWlsOm9kLCRab2RFbW9qaTp1ZCwkWm9kRW5jb2RlRXJyb3I6VG8sJFpvZEVudW06aXAsJFpvZEVycm9yOkt1LCRab2RFeGFjdE9wdGlvbmFsOmxwLCRab2RGaWxlOmNwLCRab2RGdW5jdGlvbjprcCwkWm9kR1VJRDp0ZCwkWm9kSUJBTjpSZCwkWm9kSVB2NDpfZCwkWm9kSVB2NjprZCwkWm9kSVNPRGF0ZTp2ZCwkWm9kSVNPRGF0ZVRpbWU6Z2QsJFpvZElTT0R1cmF0aW9uOnlkLCRab2RJU09UaW1lOmJkLCRab2RJbnRlcnNlY3Rpb246bnAsJFpvZEpXVDpOZCwkWm9kS1NVSUQ6bWQsJFpvZExhenk6UXMsJFpvZExpdGVyYWw6YXAsJFpvZE1BQzp3ZCwkWm9kTWFwOnJwLCRab2ROYU46dnAsJFpvZE5hbm9JRDpsZCwkWm9kTmV2ZXI6QmQsJFpvZE5vbk9wdGlvbmFsOmhwLCRab2ROdWxsOlVkLCRab2ROdWxsYWJsZTpkcCwkWm9kTnVtYmVyOkhzLCRab2ROdW1iZXJGb3JtYXQ6TWQsJFpvZE9iamVjdDpRZCwkWm9kT2JqZWN0SklUOllkLCRab2RPcHRpb25hbDpLcywkWm9kUGlwZTpXcywkWm9kUHJlZmF1bHQ6ZnAsJFpvZFByZXByb2Nlc3M6YnAsJFpvZFByb21pc2U6d3AsJFpvZFJlYWRvbmx5OnlwLCRab2RSZWFsRXJyb3I6ZGUsJFpvZFJlY29yZDpvcCwkWm9kUmVnaXN0cnk6eHAsJFpvZFNldDpzcCwkWm9kU3RyaW5nOlF0LCRab2RTdHJpbmdGb3JtYXQ6RCwkWm9kU3VjY2VzczptcCwkWm9kU3ltYm9sOkRkLCRab2RUZW1wbGF0ZUxpdGVyYWw6X3AsJFpvZFRyYW5zZm9ybTp1cCwkWm9kVHVwbGU6SnMsJFpvZFR5cGU6SSwkWm9kVUxJRDpmZCwkWm9kVVJMOmNkLCRab2RVVUlEOm5kLCRab2RVbmRlZmluZWQ6TGQsJFpvZFVuaW9uOlJvLCRab2RVbmtub3duOkZkLCRab2RWb2lkOlZkLCRab2RYSUQ6aGQsJFpvZFhvcjpYZCwkYnJhbmQ6eXMsJGNvbnN0cnVjdG9yOnAsJGlucHV0OmVpLCRvdXRwdXQ6WHMsRG9jOllsLElOVkFMSUQ6bmksSlNPTlNjaGVtYTpYZyxKU09OU2NoZW1hR2VuZXJhdG9yOllnLE5FVkVSOmJzLFRpbWVQcmVjaXNpb246UGksVVJMX0JBRF9GT1JNQVQ6TXMsVVJMX1VOUEFSU0VBQkxFOk50LFpvZENvbXBpbGVBc3luY0Vycm9yOm9pLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnJpLF9hbnk6UXAsX2FycmF5OnJmLF9iYXNlNjQ6U2ksX2Jhc2U2NHVybDp6aSxfYmlnaW50OkZwLF9ib29sZWFuOlVwLF9jYXRjaDpvZyxfY2hlY2s6bGYsX2NpZHJ2NDp3aSxfY2lkcnY2OiRpLF9jb2VyY2VkQmlnaW50OkJwLF9jb2VyY2VkQm9vbGVhbjpIcCxfY29lcmNlZERhdGU6bmYsX2NvZXJjZWROdW1iZXI6TnAsX2NvZXJjZWRTdHJpbmc6Q3AsX2NyZWRpdENhcmQ6QXAsX2N1aWQ6bWksX2N1aWQyOmdpLF9jdXN0b206YWYsX2RhdGU6dGYsX2RlY29kZTokcyxfZGVjb2RlQXN5bmM6enMsX2RlZmF1bHQ6ZWcsX2Rpc2NyaW1pbmF0ZWRVbmlvbjpVbSxfZTE2NDpUaSxfZW1haWw6YWksX2Vtb2ppOmZpLF9lbmNvZGU6d3MsX2VuY29kZUFzeW5jOlNzLF9lbmRzV2l0aDpvbixfZW51bTpLbSxfZmlsZTpzZixfZmxvYXQzMjpNcCxfZmxvYXQ2NDpxcCxfZ3Q6RWUsX2d0ZTpsZSxfZ3VpZDpjaSxfaWJhbjpScCxfaW5jbHVkZXM6dG4sX2ludDpqcCxfaW50MzI6RHAsX2ludDY0OlZwLF9pbnRlcnNlY3Rpb246SG0sX2lwdjQ6X2ksX2lwdjY6a2ksX2lzb0RhdGU6RWksX2lzb0RhdGVUaW1lOnhpLF9pc29EdXJhdGlvbjpPaSxfaXNvVGltZTpDaSxfand0OklpLF9rc3VpZDp5aSxfbGF6eTphZyxfbGVuZ3RoOnB0LF9saXRlcmFsOkdtLF9sb3dlcmNhc2U6WHQsX2x0OnhlLF9sdGU6dWUsX21hYzpPcCxfbWFwOlZtLF9tYXg6dWUsX21heExlbmd0aDpkdCxfbWF4U2l6ZTpHZSxfbWltZTpzbixfbWluOmxlLF9taW5MZW5ndGg6amUsX21pblNpemU6Q2UsX211bHRpcGxlT2Y6QmUsX25hbjpvZixfbmFub2lkOmhpLF9uYXRpdmVFbnVtOldtLF9uZWdhdGl2ZTpEbyxfbmV2ZXI6WHAsX25vbm5lZ2F0aXZlOlVvLF9ub25vcHRpb25hbDp0Zyxfbm9ucG9zaXRpdmU6TG8sX25vcm1hbGl6ZTphbixfbnVsbDpHcCxfbnVsbGFibGU6WG0sX251bWJlcjpacCxfb3B0aW9uYWw6WW0sX292ZXJ3cml0ZTokZSxfcGFyc2U6RnQsX3BhcnNlQXN5bmM6QnQsX3BpcGU6cmcsX3Bvc2l0aXZlOnFvLF9wcm9taXNlOmNnLF9wcm9wZXJ0aWVzOnJuLF9wcm9wZXJ0eTpIbyxfcmVhZG9ubHk6c2csX3JlY29yZDpCbSxfcmVmaW5lOmNmLF9yZWdleDpZdCxfc2FmZURlY29kZTpJcyxfc2FmZURlY29kZUFzeW5jOnhzLF9zYWZlRW5jb2RlOlRzLF9zYWZlRW5jb2RlQXN5bmM6UHMsX3NhZmVQYXJzZTpWdCxfc2FmZVBhcnNlQXN5bmM6SnQsX3NldDpKbSxfc2l6ZTpsdCxfc2x1Z2lmeTpkbixfc3RhcnRzV2l0aDpubixfc3RyaW5nOkVwLF9zdHJpbmdGb3JtYXQ6ZnQsX3N0cmluZ2Jvb2w6ZmYsX3N1Y2Nlc3M6bmcsX3N1cGVyUmVmaW5lOnVmLF9zeW1ib2w6S3AsX3RlbXBsYXRlTGl0ZXJhbDppZyxfdG9Mb3dlckNhc2U6dW4sX3RvVXBwZXJDYXNlOmxuLF90cmFuc2Zvcm06UW0sX3RyaW06Y24sX3R1cGxlOkZtLF91aW50MzI6THAsX3VpbnQ2NDpKcCxfdWxpZDp2aSxfdW5kZWZpbmVkOldwLF91bmlvbjpEbSxfdW5rbm93bjpZcCxfdXBwZXJjYXNlOmVuLF91cmw6TW8sX3V1aWQ6dWksX3V1aWR2NDpsaSxfdXVpZHY2OmRpLF91dWlkdjc6cGksX3ZvaWQ6ZWYsX3hpZDpiaSxfeG9yOkxtLGJhc2U2NENoYXJzZXQ6VGQsYmFzZTY0dXJsQ2hhcnNldDpVcyxjYW5QYXJzZVVSTDpxcyxjbG9uZTpCLGNvbXBpbGU6c2ksY29tcGlsZUZuOnFtLGNvbmZpZzpHLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDpzcyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6aGYsZGVjb2RlOlZoLGRlY29kZUFzeW5jOktoLGRlc2NyaWJlOmRmLGVuY29kZTpCaCxlbmNvZGVBc3luYzpKaCxleHRyYWN0RGVmczpwZyxmaW5hbGl6ZTpmZyxmbGF0dGVuRXJyb3I6SW8sZm9ybWF0RXJyb3I6UG8sZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpWcyxnbG9iYWxDb25maWc6cmUsZ2xvYmFsUmVnaXN0cnk6Z2UsaGFuZGxlVW5yZXByZXNlbnRhYmxlOmxnLGluaXRpYWxpemVDb250ZXh0OnVnLGlzQmFja0VkZ2U6SXAsaXNSZWN1cnNpdmVTY2hlbWE6Wm0saXNWYWxpZEJhc2U2NDpMcyxpc1ZhbGlkQmFzZTY0VVJMOlBkLGlzVmFsaWRDSURSdjY6U2QsaXNWYWxpZENyZWRpdENhcmQ6Q2QsaXNWYWxpZElCQU46QWQsaXNWYWxpZElQdjY6RHMsaXNWYWxpZEpXVDpaZCxsb2NhbGVzOllzLG1lbW9pemVyOlpvLG1lcmdlVmFsdWVzOnVvLG1ldGE6cGYscGFyc2U6WHIscGFyc2VBc3luYzplcyxwYXJzZVVSTE9iamVjdDpzZCxwcmV0dGlmeUVycm9yOmtzLHByb2Nlc3M6aGcscHJvY2Vzc1NjaGVtYTpkZyxyZWdleGVzOkFvLHJlZ2lzdHJ5Ok5vLHNhZmVEZWNvZGU6R2gsc2FmZURlY29kZUFzeW5jOlloLHNhZmVFbmNvZGU6V2gsc2FmZUVuY29kZUFzeW5jOlFoLHNhZmVQYXJzZTpHdSxzYWZlUGFyc2VBc3luYzpMaCxzdGFuZGFyZFByb3BzOmpzLHN0cmlwVGFiQW5kTmV3bGluZTpucyx0b0RvdFBhdGg6V3UsdG9KU09OU2NoZW1hOkFpLHRvWm9kOmJvLHRyZWVpZnlFcnJvcjpfcyx1cmxIb3N0bmFtZU9rOmlkLHVybFByb3RvY29sT2s6YWQsdXRpbDp2cyx2YWxpZGF0ZTpFbyx2YWxpZGF0ZUFzeW5jOkNvLHZhbGlkYXRlVVJMOnJkLHZlcnNpb246WGwsd2l0aFBhcnNlcjppaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxldT1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gUmkoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGksYSk9Pntjb25zdCBjPXRbaS5fem9kLmRlZi50eXBlXTtyZXR1cm4gYz9jKGksYSk6aX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoaSl7Y29uc3QgYT1vLmdldChpKTtpZihhPT09ZXUpcmV0dXJuIG5ldyBRcyh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChpKX0pO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7by5zZXQoaSxldSk7Y29uc3QgYz1zKGkpLHU9bihjLGMhPT1pKTtyZXR1cm4gby5zZXQoaSx1KSx1fWZ1bmN0aW9uIHMoaSl7Y29uc3QgYT1pLl96b2QuZGVmO3N3aXRjaChhLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1hLnNoYXBlLGw9T2JqZWN0LmtleXModSk7bGV0IGY9ITE7Y29uc3Qgdj17fTtmb3IoY29uc3QgeSBvZiBsKXtjb25zdCAkPXIodVt5XSk7JCE9PXVbeV0mJihmPSEwKSx2W3ldPSR9bGV0IGI9YS5jYXRjaGFsbDtyZXR1cm4gYS5jYXRjaGFsbCYmKGI9cihhLmNhdGNoYWxsKSxiIT09YS5jYXRjaGFsbCYmKGY9ITApKSxmP0IoaSx7Li4uYSxzaGFwZTp2LGNhdGNoYWxsOmJ9KTppfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoYS5lbGVtZW50KTtyZXR1cm4gdT09PWEuZWxlbWVudD9pOkIoaSx7Li4uYSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1hLml0ZW1zO2xldCBsPSExO2NvbnN0IGY9W107Zm9yKGNvbnN0IGIgb2YgdSl7Y29uc3QgeT1yKGIpO3khPT1iJiYobD0hMCksZi5wdXNoKHkpfWxldCB2PWEucmVzdDtyZXR1cm4gYS5yZXN0JiYodj1yKGEucmVzdCksdiE9PWEucmVzdCYmKGw9ITApKSxsP0IoaSx7Li4uYSxpdGVtczpmLHJlc3Q6dn0pOml9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGEua2V5VHlwZSksbD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEua2V5VHlwZSYmbD09PWEudmFsdWVUeXBlP2k6QihpLHsuLi5hLGtleVR5cGU6dSx2YWx1ZVR5cGU6bH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEudmFsdWVUeXBlP2k6QihpLHsuLi5hLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9YS5vcHRpb25zO2xldCBsPSExO2NvbnN0IGY9W107Zm9yKGNvbnN0IHYgb2YgdSl7Y29uc3QgYj1yKHYpO2IhPT12JiYobD0hMCksZi5wdXNoKGIpfXJldHVybiBsP0IoaSx7Li4uYSxvcHRpb25zOmZ9KTppfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGEubGVmdCksbD1yKGEucmlnaHQpO3JldHVybiB1PT09YS5sZWZ0JiZsPT09YS5yaWdodD9pOkIoaSx7Li4uYSxsZWZ0OnUscmlnaHQ6bH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoYS5pbm5lclR5cGUpO3JldHVybiB1PT09YS5pbm5lclR5cGU/aTpCKGksey4uLmEsaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoYS5pbiksbD1yKGEub3V0KTtyZXR1cm4gdT09PWEuaW4mJmw9PT1hLm91dD9pOkIoaSx7Li4uYSxpbjp1LG91dDpsfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihhLmlucHV0KSxsPXIoYS5vdXRwdXQpO3JldHVybiB1PT09YS5pbnB1dCYmbD09PWEub3V0cHV0P2k6QihpLHsuLi5hLGlucHV0OnUsb3V0cHV0Omx9KX1jYXNlImxhenkiOntjb25zdCB1PWEuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6bCwuLi5mfT1hO3JldHVybiBCKGksey4uLmYsZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gWmkoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gYmYoZSx0KXtyZXR1cm4gWmkoZSk/R3UoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiBldihlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYoWmkoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiB0dihlKXtpZihaaShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCBudj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6b24sZ3Q6RWUsZ3RlOmxlLGluY2x1ZGVzOnRuLGxlbmd0aDpwdCxsb3dlcmNhc2U6WHQsbHQ6eGUsbHRlOnVlLG1heExlbmd0aDpkdCxtYXhTaXplOkdlLG1pbWU6c24sbWluTGVuZ3RoOmplLG1pblNpemU6Q2UsbXVsdGlwbGVPZjpCZSxuZWdhdGl2ZTpEbyxub25uZWdhdGl2ZTpVbyxub25wb3NpdGl2ZTpMbyxub3JtYWxpemU6YW4sb3ZlcndyaXRlOiRlLHBvc2l0aXZlOnFvLHByb3BlcnRpZXM6cm4scHJvcGVydHk6SG8scmVnZXg6WXQsc2l6ZTpsdCxzbHVnaWZ5OmRuLHN0YXJ0c1dpdGg6bm4sdG9Mb3dlckNhc2U6dW4sdG9VcHBlckNhc2U6bG4sdHJpbTpjbix1cHBlcmNhc2U6ZW59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksdHU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gZW8oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCB5Zj0oZSx0KT0+e0t1LmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTt0dS5oYXMobil8fCh0dS5hZGQobiksZW8obiwiZm9ybWF0IixvPT5yPT5QbyhvLHIpKSxlbyhuLCJmbGF0dGVuIixvPT5yPT5JbyhvLHIpKSxlbyhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLHJvLDIpfSksZW8obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMscm8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0sX2Y9cCgiWm9kRXJyb3IiLHlmKSxhZT1wKCJab2RFcnJvciIseWYsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxOaT1GdChhZSksamk9QnQoYWUpLE1pPVZ0KGFlKSxxaT1KdChhZSksRGk9d3MoYWUpLExpPSRzKGFlKSxVaT1TcyhhZSksSGk9enMoYWUpLEZpPVRzKGFlKSxCaT1JcyhhZSksVmk9UHMoYWUpLEppPXhzKGFlKTtmdW5jdGlvbiBvdigpe3JlLmxvY2FsZUVycm9yfHxHKFBwKCkpfWZ1bmN0aW9uIFFlKCl7cmUubWVtb2l6ZXJ8fEcoe21lbW9pemVyOlpvKCl9KX1jb25zdCB4PXAoIlpvZFR5cGUiLChlLHQpPT4ob3YoKSxJLmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUobmUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEIodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKENyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKE9yKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGUoZSkpfSxvcHRpb25hbCgpe3JldHVybiBVKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIGRyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBpdCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBVKGl0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIHZyKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIHoodGhpcyl9LG9yKGUpe3JldHVybiBFKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiB6dCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIE10KHRoaXMsWm4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBocih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gZ3IodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIF9yKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIE10KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIFNyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gZ2UuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gZ2UuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBnZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIHpvKHRoaXMsIn5zdGFuZGFyZCIsey4uLmpzKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OnNzKCksb3V0cHV0OnNzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe1BlKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gTmkodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBqaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIE1pKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gcWkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe1BlKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIEVvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBDbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIERpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBMaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBVaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBIaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBGaSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gQmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gVmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gSmkodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIGhmKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBnZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHBuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57UXQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tZygpfSxIdCh7Zm9ybWF0OmU9PnZlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PnZlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFl0KC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sodG4oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKG5uKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sob24oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soamUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soZHQoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2socHQoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhqZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKFh0KGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGVuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKGNuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soYW4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKHVuKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKGxuKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soZG4oKSl9fSkpLGh0PXAoIlpvZFN0cmluZyIsKGUsdCk9PntRdC5pbml0KGUsdCkscG4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWkoZm4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soTW8oeXQsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soSWkoeG4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhmaShtbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2koaG4sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHVpKGtlLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKGxpKGtlLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKGRpKGtlLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKHBpKGtlLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKGhpKGduLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhtaSh2bixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKGdpKGJuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh2aSh5bixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhTaShUbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayh6aShJbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhiaShfbixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHlpKGtuLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhfaSh3bixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soa2koJG4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2koU24sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGkoem4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKFRpKFBuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGkobXQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEVpKGd0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhDaSh2dCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKE9pKGJ0LGUpKX19KTtmdW5jdGlvbiBoKGUpe3JldHVybiBFcChodCxlKX1jb25zdCBNPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntELmluaXQoZSx0KSxwbi5pbml0KGUsdCl9KSxtdD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PntnZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KSxndD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e3ZkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pLHZ0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57YmQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSksYnQ9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57eWQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSksZm49cCgiWm9kRW1haWwiLChlLHQpPT57b2QuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIGFpKGZuLGUpfWNvbnN0IGhuPXAoIlpvZEdVSUQiLChlLHQpPT57dGQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2koZSl7cmV0dXJuIGNpKGhuLGUpfWNvbnN0IGtlPXAoIlpvZFVVSUQiLChlLHQpPT57bmQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gR2koZSl7cmV0dXJuIHVpKGtlLGUpfWZ1bmN0aW9uIFFpKGUpe3JldHVybiBsaShrZSxlKX1mdW5jdGlvbiBZaShlKXtyZXR1cm4gZGkoa2UsZSl9ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIHBpKGtlLGUpfWNvbnN0IHl0PXAoIlpvZFVSTCIsKGUsdCk9PntjZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBlYShlKXtyZXR1cm4gTW8oeXQsZSl9ZnVuY3Rpb24gdGEoZSl7cmV0dXJuIE1vKHl0LHtwcm90b2NvbDpFcyxob3N0bmFtZTpnbCwuLi5fKGUpfSl9Y29uc3QgbW49cCgiWm9kRW1vamkiLChlLHQpPT57dWQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIGZpKG1uLGUpfWNvbnN0IGduPXAoIlpvZE5hbm9JRCIsKGUsdCk9PntsZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBvYShlKXtyZXR1cm4gaGkoZ24sZSl9Y29uc3Qgdm49cCgiWm9kQ1VJRCIsKGUsdCk9PntkZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiByYShlKXtyZXR1cm4gbWkodm4sZSl9Y29uc3QgYm49cCgiWm9kQ1VJRDIiLChlLHQpPT57cGQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGdpKGJuLGUpfWNvbnN0IHluPXAoIlpvZFVMSUQiLChlLHQpPT57ZmQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIHZpKHluLGUpfWNvbnN0IF9uPXAoIlpvZFhJRCIsKGUsdCk9PntoZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBhYShlKXtyZXR1cm4gYmkoX24sZSl9Y29uc3Qga249cCgiWm9kS1NVSUQiLChlLHQpPT57bWQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gY2EoZSl7cmV0dXJuIHlpKGtuLGUpfWNvbnN0IHduPXAoIlpvZElQdjQiLChlLHQpPT57X2QuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIF9pKHduLGUpfWNvbnN0IEZvPXAoIlpvZE1BQyIsKGUsdCk9Pnt3ZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBsYShlKXtyZXR1cm4gT3AoRm8sZSl9Y29uc3QgJG49cCgiWm9kSVB2NiIsKGUsdCk9PntrZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBkYShlKXtyZXR1cm4ga2koJG4sZSl9Y29uc3QgU249cCgiWm9kQ0lEUnY0IiwoZSx0KT0+eyRkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHBhKGUpe3JldHVybiB3aShTbixlKX1jb25zdCB6bj1wKCJab2RDSURSdjYiLChlLHQpPT57emQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gZmEoZSl7cmV0dXJuICRpKHpuLGUpfWNvbnN0IFRuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntJZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBoYShlKXtyZXR1cm4gU2koVG4sZSl9Y29uc3QgSW49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG1hKGUpe3JldHVybiB6aShJbixlKX1jb25zdCBQbj1wKCJab2RFMTY0IiwoZSx0KT0+e0VkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGdhKGUpe3JldHVybiBUaShQbixlKX1jb25zdCBCbz1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e09kLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHZhKGUpe3JldHVybiBBcChCbyxlKX1jb25zdCBWbz1wKCJab2RJQkFOIiwoZSx0KT0+e1JkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBScChWbyxlKX1jb25zdCB4bj1wKCJab2RKV1QiLChlLHQpPT57TmQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24geWEoZSl7cmV0dXJuIElpKHhuLGUpfWNvbnN0IE1lPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntqZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBfYShlLHQsbj17fSl7cmV0dXJuIGZ0KE1lLGUsdCxuKX1mdW5jdGlvbiBrYShlKXtyZXR1cm4gZnQoTWUsImhvc3RuYW1lIixtbCxlKX1mdW5jdGlvbiB3YShlKXtyZXR1cm4gZnQoTWUsImhleCIsT2wsZSl9ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIGZ0KE1lLCJjdXJyZW5jeV9jb2RlIixibCxlKX1mdW5jdGlvbiBTYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9QW9bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gZnQoTWUsbyxyLHQpfWNvbnN0IF90PXAoIlpvZE51bWJlciIsKGUsdCk9PntIcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdnKCksZS5pc0Zpbml0ZT0hMH0sSHQoe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT12ZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PXZlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PXZlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+dmUoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKEVlKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhsZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHVlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh1ZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKGp0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhqdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKEVlKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHVlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhCZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIFAoZSl7cmV0dXJuIFpwKF90LGUpfWNvbnN0IHFlPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntNZC5pbml0KGUsdCksX3QuaW5pdChlLHQpfSk7ZnVuY3Rpb24ganQoZSl7cmV0dXJuIGpwKHFlLGUpfWZ1bmN0aW9uIHphKGUpe3JldHVybiBNcChxZSxlKX1mdW5jdGlvbiBUYShlKXtyZXR1cm4gcXAocWUsZSl9ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIERwKHFlLGUpfWZ1bmN0aW9uIFBhKGUpe3JldHVybiBMcChxZSxlKX1jb25zdCBrdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e0ZzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmcoKX0pO2Z1bmN0aW9uIGooZSl7cmV0dXJuIFVwKGt0LGUpfWNvbnN0IHd0PXAoIlpvZEJpZ0ludCIsKGUsdCk9PntCcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmJnKCl9LEh0KHttaW5WYWx1ZTplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+dmUoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT52ZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGxlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhsZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhFZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4ZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodWUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHVlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhFZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh4ZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh1ZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9fSkpO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBGcCh3dCxlKX1jb25zdCBFbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57cWQuaW5pdChlLHQpLHd0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBWcChFbixlKX1mdW5jdGlvbiBDYShlKXtyZXR1cm4gSnAoRW4sZSl9Y29uc3QgSm89cCgiWm9kU3ltYm9sIiwoZSx0KT0+e0RkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eWcoKX0pO2Z1bmN0aW9uIE9hKGUpe3JldHVybiBLcChKbyxlKX1jb25zdCBLbz1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57TGQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5rZygpfSk7ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIFdwKEtvLGUpfWNvbnN0IFdvPXAoIlpvZE51bGwiLChlLHQpPT57VWQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5fZygpfSk7ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIEdwKFdvLGUpfWNvbnN0IEdvPXAoIlpvZEFueSIsKGUsdCk9PntIZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNnKCl9KTtmdW5jdGlvbiBPbigpe3JldHVybiBRcChHbyl9Y29uc3QgUW89cCgiWm9kVW5rbm93biIsKGUsdCk9PntGZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpnKCl9KTtmdW5jdGlvbiBaKCl7cmV0dXJuIFlwKFFvKX1jb25zdCBZbz1wKCJab2ROZXZlciIsKGUsdCk9PntCZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRnKCl9KTtmdW5jdGlvbiBWZShlKXtyZXR1cm4gWHAoWW8sZSl9Y29uc3QgWG89cCgiWm9kVm9pZCIsKGUsdCk9PntWZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndnKCl9KTtmdW5jdGlvbiBBYShlKXtyZXR1cm4gZWYoWG8sZSl9Y29uc3QgQW49cCgiWm9kRGF0ZSIsKGUsdCk9PntKZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRnKCksZS5taW49KG4sbyk9PmUuY2hlY2sobGUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2sodWUobixvKSl9LEh0KHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PXZlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT12ZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIFJhKGUpe3JldHVybiB0ZihBbixlKX1jb25zdCBlcj1wKCJab2RBcnJheSIsKGUsdCk9PntRZSgpLEtkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TWcoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhkdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socHQoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiByZihlcixlLHQpfWZ1bmN0aW9uIFphKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gWChPYmplY3Qua2V5cyh0KSl9Y29uc3QgJHQ9cCgiWm9kT2JqZWN0IiwoZSx0KT0+e1FlKCksWWQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5xZygpLEJ1KGUsInNoYXBlIixuPT5uLl96b2QuZGVmLnNoYXBlLCExKX0se2tleW9mKCl7cmV0dXJuIFgoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZShuZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKG5lKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlooKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZShuZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpaKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKG5lKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlZlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUobmUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIFp1KHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIGp1KHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBNdSh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBBdSh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBSdSh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBRcihUdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIFFyKE5uLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBxdShqbix0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLl8odCl9O3JldHVybiBuZXcgJHQobil9ZnVuY3Rpb24gTmEoZSx0KXtyZXR1cm4gbmV3ICR0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6VmUoKSwuLi5fKHQpfSl9ZnVuY3Rpb24gWShlLHQpe3JldHVybiBuZXcgJHQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpaKCksLi4uXyh0KX0pfWNvbnN0IFN0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e1JvLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWYoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gRShlLHQpe3JldHVybiBuZXcgU3Qoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4uXyh0KX0pfWNvbnN0IHRyPXAoIlpvZFhvciIsKGUsdCk9PntTdC5pbml0KGUsdCksWGQuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tZigpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBqYShlLHQpe3JldHVybiBuZXcgdHIoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLl8odCl9KX1jb25zdCBucj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57U3QuaW5pdChlLHQpLHRwLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJuKGUsdCxuKXtyZXR1cm4gbmV3IG5yKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi5fKG4pfSl9Y29uc3Qgb3I9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e25wLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RGcoKX0pO2Z1bmN0aW9uIHp0KGUsdCl7cmV0dXJuIG5ldyBvcih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IHJyPXAoIlpvZFR1cGxlIiwoZSx0KT0+e1FlKCksSnMuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5MZygpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgVHQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIHNyKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiBJLHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IHJyKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4uXyhyKX0pfWNvbnN0IEplPXAoIlpvZFJlY29yZCIsKGUsdCk9PntRZSgpLG9wLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWcoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gTyhlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IEplKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6aCgpLHZhbHVlVHlwZTplLC4uLl8odCl9KTpuZXcgSmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiBNYShlLHQsbil7cmV0dXJuIG5ldyBKZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gcWEoZSx0LG4pe3JldHVybiBuZXcgSmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi5fKG4pfSl9Y29uc3QgaXI9cCgiWm9kTWFwIiwoZSx0KT0+e1FlKCkscnAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKENlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soQ2UoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKEdlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKGx0KC4uLm4pKX0pO2Z1bmN0aW9uIERhKGUsdCxuKXtyZXR1cm4gbmV3IGlyKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9Y29uc3QgYXI9cCgiWm9kU2V0IiwoZSx0KT0+e1FlKCksc3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpLGUubWluPSguLi5uKT0+ZS5jaGVjayhDZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKENlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhHZSguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhsdCguLi5uKSl9KTtmdW5jdGlvbiBMYShlLHQpe3JldHVybiBuZXcgYXIoe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4uXyh0KX0pfWNvbnN0IEtlPXAoIlpvZEVudW0iLChlLHQpPT57aXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5JZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgS2Uoey4uLnQsY2hlY2tzOltdLC4uLl8ociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IEtlKHsuLi50LGNoZWNrczpbXSwuLi5fKHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIFgoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IEtlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4uXyh0KX0pfWZ1bmN0aW9uIFVhKGUsdCl7cmV0dXJuIG5ldyBLZSh7dHlwZToiZW51bSIsZW50cmllczplLC4uLl8odCl9KX1jb25zdCBjcj1wKCJab2RMaXRlcmFsIiwoZSx0KT0+e2FwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGcoKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gbShlLHQpe3JldHVybiBuZXcgY3Ioe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLl8odCl9KX1jb25zdCB1cj1wKCJab2RGaWxlIiwoZSx0KT0+e2NwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Q2coKSxlLm1pbj0obixvKT0+ZS5jaGVjayhDZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhHZShuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soc24oQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiBIYShlKXtyZXR1cm4gc2YodXIsZSl9Y29uc3QgbHI9cCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e1FlKCksdXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aZygpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgVG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaChvdChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgaT1zO2kuZmF0YWwmJihpLmNvbnRpbnVlPSExKSxpLmNvZGU/PyhpLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBpfHwoaS5pbnB1dD1uLnZhbHVlKSxpLmluc3Q/PyhpLmluc3Q9ZSksbi5pc3N1ZXMucHVzaChvdChpKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIFpuKGUpe3JldHVybiBuZXcgbHIoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBUdD1wKCJab2RPcHRpb25hbCIsKGUsdCk9PntLcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdmKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gVShlKXtyZXR1cm4gbmV3IFR0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBObj1wKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e2xwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2YoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBkcihlKXtyZXR1cm4gbmV3IE5uKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBwcj1wKCJab2ROdWxsYWJsZSIsKGUsdCk9PntkcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkhnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gaXQoZSl7cmV0dXJuIG5ldyBwcih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24gRmEoZSl7cmV0dXJuIFUoaXQoZSkpfWNvbnN0IGZyPXAoIlpvZERlZmF1bHQiLChlLHQpPT57cHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiBocihlLHQpe3JldHVybiBuZXcgZnIoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOl9vKHQpfX0pfWNvbnN0IG1yPXAoIlpvZFByZWZhdWx0IiwoZSx0KT0+e2ZwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VmcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBncihlLHQpe3JldHVybiBuZXcgbXIoe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpfbyh0KX19KX1jb25zdCBqbj1wKCJab2ROb25PcHRpb25hbCIsKGUsdCk9PntocC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkZnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gdnIoZSx0KXtyZXR1cm4gbmV3IGpuKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4uXyh0KX0pfWNvbnN0IGJyPXAoIlpvZFN1Y2Nlc3MiLChlLHQpPT57bXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEJhKGUpe3JldHVybiBuZXcgYnIoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3QgeXI9cCgiWm9kQ2F0Y2giLChlLHQpPT57Z3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5KZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gX3IoZSx0KXtyZXR1cm4gbmV3IHlyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OmdzKHQpfSl9Y29uc3Qga3I9cCgiWm9kTmFOIiwoZSx0KT0+e3ZwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eGcoKX0pO2Z1bmN0aW9uIFZhKGUpe3JldHVybiBvZihrcixlKX1jb25zdCBJdD1wKCJab2RQaXBlIiwoZSx0KT0+e1dzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+S2coKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBNdChlLHQpe3JldHVybiBuZXcgSXQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCBQdD1wKCJab2RDb2RlYyIsKGUsdCk9PntJdC5pbml0KGUsdCksR3MuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSmEoZSx0LG4pe3JldHVybiBuZXcgUHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiBLYShlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyBQdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3Qgd3I9cCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntJdC5pbml0KGUsdCksYnAuaW5pdChlLHQpfSksJHI9cCgiWm9kUmVhZG9ubHkiLChlLHQpPT57eXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5XZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFNyKGUpe3JldHVybiBuZXcgJHIoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0IHpyPXAoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PntfcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCl9KTtmdW5jdGlvbiBXYShlLHQpe3JldHVybiBuZXcgenIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4uXyh0KX0pfWNvbnN0IFRyPXAoIlpvZExhenkiLChlLHQpPT57UXMuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24gSXIoZSl7cmV0dXJuIG5ldyBUcih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCBQcj1wKCJab2RQcm9taXNlIiwoZSx0KT0+e3dwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+R2coKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBHYShlKXtyZXR1cm4gbmV3IFByKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IHhyPXAoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e2twLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UmcoKX0pO2Z1bmN0aW9uIGF0KGUpe3JldHVybiBuZXcgeHIoe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9zcihlPy5pbnB1dCk6ZT8uaW5wdXQ/P3ooWigpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9aKCl9KX1jb25zdCB4dD1wKCJab2RDdXN0b20iLChlLHQpPT57JHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5BZygpfSk7ZnVuY3Rpb24gUWEoZSl7Y29uc3QgdD1uZXcgRih7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBFcihlLHQpe3JldHVybiBhZih4dCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiBDcihlLHQ9e30pe3JldHVybiBjZih4dCxlLHQpfWZ1bmN0aW9uIE9yKGUsdCl7cmV0dXJuIHVmKGUsdCl9Y29uc3QgWWE9ZGYsWGE9cGYsQXI9cCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9Pnt4dC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socm4oZSx0KSl9fSk7ZnVuY3Rpb24gZWMoZSx0PXt9KXtjb25zdCBuPW5ldyBBcih7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi5fKHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IHRjPSguLi5lKT0+ZmYoe0NvZGVjOlB0LEJvb2xlYW46a3QsU3RyaW5nOmh0fSwuLi5lKTtmdW5jdGlvbiBuYyhlKXtjb25zdCB0PUlyKCgpPT5FKFtoKGUpLFAoKSxqKCksQ24oKSx6KHQpLE8oaCgpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIE1uKGUsdCl7cmV0dXJuIG5ldyB3cih7dHlwZToicGlwZSIsaW46Wm4oZSksb3V0OnR9KX1jb25zdCBydj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55OkdvLFpvZEFycmF5OmVyLFpvZEJhc2U2NDpUbixab2RCYXNlNjRVUkw6SW4sWm9kQmlnSW50Ond0LFpvZEJpZ0ludEZvcm1hdDpFbixab2RCb29sZWFuOmt0LFpvZENJRFJ2NDpTbixab2RDSURSdjY6em4sWm9kQ1VJRDp2bixab2RDVUlEMjpibixab2RDYXRjaDp5cixab2RDb2RlYzpQdCxab2RDcmVkaXRDYXJkOkJvLFpvZEN1c3RvbTp4dCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6TWUsWm9kRGF0ZTpBbixab2REZWZhdWx0OmZyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpucixab2RFMTY0OlBuLFpvZEVtYWlsOmZuLFpvZEVtb2ppOm1uLFpvZEVudW06S2UsWm9kRXhhY3RPcHRpb25hbDpObixab2RGaWxlOnVyLFpvZEZ1bmN0aW9uOnhyLFpvZEdVSUQ6aG4sWm9kSUJBTjpWbyxab2RJUHY0OnduLFpvZElQdjY6JG4sWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LFpvZEluc3RhbmNlT2Y6QXIsWm9kSW50ZXJzZWN0aW9uOm9yLFpvZEpXVDp4bixab2RLU1VJRDprbixab2RMYXp5OlRyLFpvZExpdGVyYWw6Y3IsWm9kTUFDOkZvLFpvZE1hcDppcixab2ROYU46a3IsWm9kTmFub0lEOmduLFpvZE5ldmVyOllvLFpvZE5vbk9wdGlvbmFsOmpuLFpvZE51bGw6V28sWm9kTnVsbGFibGU6cHIsWm9kTnVtYmVyOl90LFpvZE51bWJlckZvcm1hdDpxZSxab2RPYmplY3Q6JHQsWm9kT3B0aW9uYWw6VHQsWm9kUGlwZTpJdCxab2RQcmVmYXVsdDptcixab2RQcmVwcm9jZXNzOndyLFpvZFByb21pc2U6UHIsWm9kUmVhZG9ubHk6JHIsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6aHQsWm9kU3RyaW5nRm9ybWF0Ok0sWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDprZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpocixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmhhLGJhc2U2NHVybDptYSxiaWdpbnQ6eGEsYm9vbGVhbjpqLGNhdGNoOl9yLGNoZWNrOlFhLGNpZHJ2NDpwYSxjaWRydjY6ZmEsY29kZWM6SmEsY3JlZGl0Q2FyZDp2YSxjdWlkOnJhLGN1aWQyOnNhLGN1cnJlbmN5Q29kZTokYSxjdXN0b206RXIsZGF0ZTpSYSxkZXNjcmliZTpZYSxkaXNjcmltaW5hdGVkVW5pb246Um4sZTE2NDpnYSxlbWFpbDpLaSxlbW9qaTpuYSxlbnVtOlgsZXhhY3RPcHRpb25hbDpkcixmaWxlOkhhLGZsb2F0MzI6emEsZmxvYXQ2NDpUYSxmdW5jdGlvbjphdCxndWlkOldpLGhhc2g6U2EsaGV4OndhLGhvc3RuYW1lOmthLGh0dHBVcmw6dGEsaWJhbjpiYSxpbnN0YW5jZW9mOmVjLGludDpqdCxpbnQzMjpJYSxpbnQ2NDpFYSxpbnRlcnNlY3Rpb246enQsaW52ZXJ0Q29kZWM6S2EsaXB2NDp1YSxpcHY2OmRhLGpzb246bmMsand0OnlhLGtleW9mOlphLGtzdWlkOmNhLGxhenk6SXIsbGl0ZXJhbDptLGxvb3NlT2JqZWN0OlksbG9vc2VSZWNvcmQ6cWEsbWFjOmxhLG1hcDpEYSxtZXRhOlhhLG5hbjpWYSxuYW5vaWQ6b2EsbmF0aXZlRW51bTpVYSxuZXZlcjpWZSxub25vcHRpb25hbDp2cixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6RmEsbnVtYmVyOlAsb2JqZWN0Omcsb3B0aW9uYWw6VSxwYXJ0aWFsUmVjb3JkOk1hLHBpcGU6TXQscHJlZmF1bHQ6Z3IscHJlcHJvY2VzczpNbixwcm9taXNlOkdhLHJlYWRvbmx5OlNyLHJlY29yZDpPLHJlZmluZTpDcixzZXQ6TGEsc3RyaWN0T2JqZWN0Ok5hLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpfYSxzdHJpbmdib29sOnRjLHN1Y2Nlc3M6QmEsc3VwZXJSZWZpbmU6T3Isc3ltYm9sOk9hLHRlbXBsYXRlTGl0ZXJhbDpXYSx0cmFuc2Zvcm06Wm4sdHVwbGU6c3IsdWludDMyOlBhLHVpbnQ2NDpDYSx1bGlkOmlhLHVuZGVmaW5lZDpzdCx1bmlvbjpFLHVua25vd246Wix1cmw6ZWEsdXVpZDpHaSx1dWlkdjQ6UWksdXVpZHY2OllpLHV1aWR2NzpYaSx2b2lkOkFhLHhpZDphYSx4b3I6amF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksa2Y9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIHdmKGUpe0coe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiAkZigpe3JldHVybiBHKCkuY3VzdG9tRXJyb3J9dmFyIGxvO2xvfHwobG89e30pO2Z1bmN0aW9uIFNmKGUpe3JldHVybiB4aShtdCxlKX1mdW5jdGlvbiBzdihlKXtyZXR1cm4gRWkoZ3QsZSl9ZnVuY3Rpb24gaXYoZSl7cmV0dXJuIENpKHZ0LGUpfWZ1bmN0aW9uIGF2KGUpe3JldHVybiBPaShidCxlKX1jb25zdCBvYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LGRhdGU6c3YsZGF0ZXRpbWU6U2YsZHVyYXRpb246YXYsdGltZTppdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx3PXsuLi5ydiwuLi5udixpc286b2N9LGN2PW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIHV2KGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIG51KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIGx2KGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gZHYoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpsdihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIHB2KGUsdCl7cmV0dXJuIHcudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBpIG9mIHMpe2NvbnN0IGE9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGkpO2Euc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6YS5lcnJvci5pc3N1ZXMsaW5wdXQ6aSxwYXRoOltpXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gaXMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgYT1pcyhpLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChhKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgaT1pcyhlW3NdLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2l9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBmdj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLGh2PW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBBdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShBdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5mdi5oYXModCk/QXQobik6IWh2Lmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoQXQpKX1mdW5jdGlvbiBvdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gbXYoZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7Y29uc3QgYT1pcyhyW2ldLG5ldyBTZXQpO2lmKGE9PT1udWxsKWNvbnRpbnVlO2NvbnN0IGM9cy5nZXQoYSk7aWYoYz09PXZvaWQgMCl7cy5zZXQoYSxpKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7aX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7Y31gLGlucHV0OnIscGF0aDpbaV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGk9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBhPTA7Zm9yKGNvbnN0IGMgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZShjKS5zdWNjZXNzJiYrK2E+PWkpYnJlYWs7YTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7b3Uocyl9OyBmb3VuZCAke2F9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmYT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtvdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiBydShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP3cuYW55KCk6b2UoZSx0KX1jb25zdCBndj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIHpmKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiB3Lm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIHcubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPWR2KHIsdCksaT1vZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsaSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxpfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiB3Lm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIHcubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIHcuZW51bShyKTtjb25zdCBzPXIubWFwKGk9PncubGl0ZXJhbChpKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTp3LnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIHcubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBpPXsuLi5lLHR5cGU6c307cmV0dXJuIHpmKGksdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP3cubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTp3LnVuaW9uKHIpfWlmKCFuKXJldHVybiB3LmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPXcuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKHcuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayh3LnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayh3LnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayh3Lmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2sody5yZWdleChndikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayh3Lmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2sody5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayh3LmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2sody5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2sody5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2sody5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2sody5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayh3LmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKHcuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKHcuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2sody5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKHcuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKHcuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayh3LmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2sody5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2sody5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayh3LmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKHcudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKHcueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKHcua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP3cubnVtYmVyKCkuaW50KCk6dy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPXcuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289dy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxpPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGE9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP29lKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFtmLHZdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IGI9b2Uodix0KTtXZShyLGYsaS5oYXMoZik/YjpiLm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IGY9ZS5wYXR0ZXJuUHJvcGVydGllcyx2PU9iamVjdC5rZXlzKGYpLGI9W107Zm9yKGNvbnN0ICQgb2Ygdil7Y29uc3QgVD1vZShmWyRdLHQpLGs9dy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKCQpKTtiLnB1c2gody5sb29zZVJlY29yZChrLFQpKX1jb25zdCB5PVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ5LnB1c2gody5vYmplY3QocikucGFzc3Rocm91Z2goKSkseS5wdXNoKC4uLmIpLHkubGVuZ3RoPT09MClvPXcub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoeS5sZW5ndGg9PT0xKW89eVswXTtlbHNle2xldCAkPXcuaW50ZXJzZWN0aW9uKHlbMF0seVsxXSk7Zm9yKGxldCBUPTI7VDx5Lmxlbmd0aDtUKyspJD13LmludGVyc2VjdGlvbigkLHlbVF0pO289JH1pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0ICQ9T2JqZWN0LmtleXMociksVD12Lm1hcChTPT5uZXcgUmVnRXhwKFMpKSxrPW87bz1vLmNoZWNrKFM9PntpZighTmUoUy52YWx1ZSkpcmV0dXJuO2NvbnN0IE49W107Zm9yKGNvbnN0IEsgb2YgT2JqZWN0LmtleXMoUy52YWx1ZSkpJC5pbmNsdWRlcyhLKXx8VC5zb21lKEg9PkgudGVzdChLKSl8fE4ucHVzaChLKTtOLmxlbmd0aCYmUy5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6TixpbnB1dDpTLnZhbHVlLGluc3Q6a30pfSl9fWVsc2V7Y29uc3QgZj13Lm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1mLnN0cmljdCgpOmE/bz1mLmNhdGNoYWxsKGEpOm89Zi5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCx1PXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsbD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fHUhPT12b2lkIDB8fGwhPT12b2lkIDApe2xldCBmO2lmKGMpe2NvbnN0IHY9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO2Y9b2Uodix0KX1vPXB2KG8se2tleVNjaGVtYTpmLG1pblByb3BlcnRpZXM6dSxtYXhQcm9wZXJ0aWVzOmx9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChmPT5vZShmLHQpKSxjPW51KGEsaSksdT1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpydShzLHQpLGw9dy50dXBsZShjKTtvPXU/bC5yZXN0KHUpOmwsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChmPT5vZShmLHQpKSxjPW51KGEsaSksdT1ydShlLmFkZGl0aW9uYWxJdGVtcyx0KSxsPXcudHVwbGUoYyk7bz11P2wucmVzdCh1KTpsLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT1vZShzLHQpO2xldCBhPXcuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz13LmFycmF5KHcuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1tdihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9vZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gb2UoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP3cuYW55KCk6dy5uZXZlcigpO2xldCBuPXpmKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKHU9Pm9lKHUsdCkpLGM9dy51bmlvbihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAodT0+b2UodSx0KSksYz13LnhvcihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOncuYW55KCk7ZWxzZXtsZXQgYT1vP246b2UoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgdT1jO3U8ZS5hbGxPZi5sZW5ndGg7dSsrKWE9dy5pbnRlcnNlY3Rpb24oYSxvZShlLmFsbE9mW3VdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj13Lm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPXcucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFBdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhQXQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSljdi5oYXMoYSl8fFdlKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBUZihlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/dy5hbnkoKTp3Lm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz11dihuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/Z2V9O3JldHVybiBvZShuLHMpfWZ1bmN0aW9uIElmKGUpe3JldHVybiBSaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6RShuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIHZ2KGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEIoZSxuZShuLHtjaGVja3M6Wy4uLm4uY2hlY2tzPz9bXSwuLi50XX0pLHtwYXJlbnQ6ITB9KX1mdW5jdGlvbiBQZihlKXtyZXR1cm4gdnYoZS5vdXQsZS5jaGVja3MpfWZ1bmN0aW9uIGJ2KGUpe3JldHVybiBlLmluLl96b2QudHJhaXRzLmhhcygiJFpvZFRyYW5zZm9ybSIpP1BmKGUpOmUuaW59ZnVuY3Rpb24geGYoZSl7cmV0dXJuIFJpKGUse3BpcGU6dD0+YnYodC5fem9kLmRlZiksZGVmYXVsdDoodCxuKT0+bj9VKHQuX3pvZC5kZWYuaW5uZXJUeXBlKTp0LGNhdGNoOih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gUmkoZSx7cGlwZTp0PT5QZih0Ll96b2QuZGVmKSxwcmVmYXVsdDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24geXYoZSl7cmV0dXJuIENwKGh0LGUpfWZ1bmN0aW9uIF92KGUpe3JldHVybiBOcChfdCxlKX1mdW5jdGlvbiBrdihlKXtyZXR1cm4gSHAoa3QsZSl9ZnVuY3Rpb24gd3YoZSl7cmV0dXJuIEJwKHd0LGUpfWZ1bmN0aW9uICR2KGUpe3JldHVybiBuZihBbixlKX1jb25zdCBDZj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmlnaW50Ond2LGJvb2xlYW46a3YsZGF0ZTokdixudW1iZXI6X3Ysc3RyaW5nOnl2fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHN1PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6eXMsJGlucHV0OmVpLCRvdXRwdXQ6WHMsSU5WQUxJRDpuaSxORVZFUjpicyxUaW1lUHJlY2lzaW9uOlBpLFpvZEFueTpHbyxab2RBcnJheTplcixab2RCYXNlNjQ6VG4sWm9kQmFzZTY0VVJMOkluLFpvZEJpZ0ludDp3dCxab2RCaWdJbnRGb3JtYXQ6RW4sWm9kQm9vbGVhbjprdCxab2RDSURSdjQ6U24sWm9kQ0lEUnY2OnpuLFpvZENVSUQ6dm4sWm9kQ1VJRDI6Ym4sWm9kQ2F0Y2g6eXIsWm9kQ29kZWM6UHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6b2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6cmksWm9kQ3JlZGl0Q2FyZDpCbyxab2RDdXN0b206eHQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0Ok1lLFpvZERhdGU6QW4sWm9kRGVmYXVsdDpmcixab2REaXNjcmltaW5hdGVkVW5pb246bnIsWm9kRTE2NDpQbixab2RFbWFpbDpmbixab2RFbW9qaTptbixab2RFbnVtOktlLFpvZEVycm9yOl9mLFpvZEV4YWN0T3B0aW9uYWw6Tm4sWm9kRmlsZTp1cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIGxvfSxab2RGdW5jdGlvbjp4cixab2RHVUlEOmhuLFpvZElCQU46Vm8sWm9kSVB2NDp3bixab2RJUHY2OiRuLFpvZElTT0RhdGU6Z3QsWm9kSVNPRGF0ZVRpbWU6bXQsWm9kSVNPRHVyYXRpb246YnQsWm9kSVNPVGltZTp2dCxab2RJbnN0YW5jZU9mOkFyLFpvZEludGVyc2VjdGlvbjpvcixab2RJc3N1ZUNvZGU6a2YsWm9kSldUOnhuLFpvZEtTVUlEOmtuLFpvZExhenk6VHIsWm9kTGl0ZXJhbDpjcixab2RNQUM6Rm8sWm9kTWFwOmlyLFpvZE5hTjprcixab2ROYW5vSUQ6Z24sWm9kTmV2ZXI6WW8sWm9kTm9uT3B0aW9uYWw6am4sWm9kTnVsbDpXbyxab2ROdWxsYWJsZTpwcixab2ROdW1iZXI6X3QsWm9kTnVtYmVyRm9ybWF0OnFlLFpvZE9iamVjdDokdCxab2RPcHRpb25hbDpUdCxab2RQaXBlOkl0LFpvZFByZWZhdWx0Om1yLFpvZFByZXByb2Nlc3M6d3IsWm9kUHJvbWlzZTpQcixab2RSZWFkb25seTokcixab2RSZWFsRXJyb3I6YWUsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6aHQsWm9kU3RyaW5nRm9ybWF0Ok0sWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDprZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpocixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmhhLGJhc2U2NHVybDptYSxiaWdpbnQ6eGEsYm9vbGVhbjpqLGNhdGNoOl9yLGNoZWNrOlFhLGNpZHJ2NDpwYSxjaWRydjY6ZmEsY2xvbmU6Qixjb2RlYzpKYSxjb2VyY2U6Q2YsY29tcGlsZTpzaSxjb25maWc6Ryxjb3JlOnZmLGNyZWRpdENhcmQ6dmEsY3VpZDpyYSxjdWlkMjpzYSxjdXJyZW5jeUNvZGU6JGEsY3VzdG9tOkVyLGRhdGU6UmEsZGVjb2RlOkxpLGRlY29kZUFzeW5jOkhpLGRlZXBQYXJ0aWFsOklmLGRlc2NyaWJlOllhLGRpc2NyaW1pbmF0ZWRVbmlvbjpSbixlMTY0OmdhLGVtYWlsOktpLGVtb2ppOm5hLGVuY29kZTpEaSxlbmNvZGVBc3luYzpVaSxlbmRzV2l0aDpvbixlbnVtOlgsZXhhY3RPcHRpb25hbDpkcixmaWxlOkhhLGZsYXR0ZW5FcnJvcjpJbyxmbG9hdDMyOnphLGZsb2F0NjQ6VGEsZm9ybWF0RXJyb3I6UG8sZnJvbUpTT05TY2hlbWE6VGYsZnVuY3Rpb246YXQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpWcyxnZXRFcnJvck1hcDokZixnbG9iYWxSZWdpc3RyeTpnZSxndDpFZSxndGU6bGUsZ3VpZDpXaSxoYXNoOlNhLGhleDp3YSxob3N0bmFtZTprYSxodHRwVXJsOnRhLGliYW46YmEsaW5jbHVkZXM6dG4saW5wdXQ6eGYsaW5zdGFuY2VvZjplYyxpbnQ6anQsaW50MzI6SWEsaW50NjQ6RWEsaW50ZXJzZWN0aW9uOnp0LGludmVydENvZGVjOkthLGlwdjQ6dWEsaXB2NjpkYSxpc286b2MsanNvbjpuYyxqd3Q6eWEsa2V5b2Y6WmEsa3N1aWQ6Y2EsbGF6eTpJcixsZW5ndGg6cHQsbGl0ZXJhbDptLGxvY2FsZXM6WXMsbG9vc2VPYmplY3Q6WSxsb29zZVJlY29yZDpxYSxsb3dlcmNhc2U6WHQsbHQ6eGUsbHRlOnVlLG1hYzpsYSxtYXA6RGEsbWF4TGVuZ3RoOmR0LG1heFNpemU6R2UsbWVtb2l6ZXI6Wm8sbWV0YTpYYSxtaW1lOnNuLG1pbkxlbmd0aDpqZSxtaW5TaXplOkNlLG11bHRpcGxlT2Y6QmUsbmFuOlZhLG5hbm9pZDpvYSxuYXRpdmVFbnVtOlVhLG5lZ2F0aXZlOkRvLG5ldmVyOlZlLG5vbm5lZ2F0aXZlOlVvLG5vbm9wdGlvbmFsOnZyLG5vbnBvc2l0aXZlOkxvLG5vcm1hbGl6ZTphbixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6RmEsbnVtYmVyOlAsb2JqZWN0Omcsb3B0aW9uYWw6VSxvdXRwdXQ6RWYsb3ZlcndyaXRlOiRlLHBhcnNlOk5pLHBhcnNlQXN5bmM6amkscGFydGlhbFJlY29yZDpNYSxwaXBlOk10LHBvc2l0aXZlOnFvLHByZWZhdWx0OmdyLHByZXByb2Nlc3M6TW4scHJldHRpZnlFcnJvcjprcyxwcm9taXNlOkdhLHByb3BlcnRpZXM6cm4scHJvcGVydHk6SG8scmVhZG9ubHk6U3IscmVjb3JkOk8scmVmaW5lOkNyLHJlZ2V4Oll0LHJlZ2V4ZXM6QW8scmVnaXN0cnk6Tm8sc2FmZURlY29kZTpCaSxzYWZlRGVjb2RlQXN5bmM6Smksc2FmZUVuY29kZTpGaSxzYWZlRW5jb2RlQXN5bmM6Vmksc2FmZVBhcnNlOk1pLHNhZmVQYXJzZUFzeW5jOnFpLHNldDpMYSxzZXRFcnJvck1hcDp3ZixzaXplOmx0LHNsdWdpZnk6ZG4sc3RhcnRzV2l0aDpubixzdHJpY3RPYmplY3Q6TmEsc3RyaW5nOmgsc3RyaW5nRm9ybWF0Ol9hLHN0cmluZ2Jvb2w6dGMsc3VjY2VzczpCYSxzdXBlclJlZmluZTpPcixzeW1ib2w6T2EsdGVtcGxhdGVMaXRlcmFsOldhLHRvSlNPTlNjaGVtYTpBaSx0b0xvd2VyQ2FzZTp1bix0b1VwcGVyQ2FzZTpsbix0b1pvZDpibyx0cmFuc2Zvcm06Wm4sdHJlZWlmeUVycm9yOl9zLHRyaW06Y24sdHVwbGU6c3IsdWludDMyOlBhLHVpbnQ2NDpDYSx1bGlkOmlhLHVuZGVmaW5lZDpzdCx1bmlvbjpFLHVua25vd246Wix1cHBlcmNhc2U6ZW4sdXJsOmVhLHV0aWw6dnMsdXVpZDpHaSx1dWlkdjQ6UWksdXVpZHY2OllpLHV1aWR2NzpYaSx2YWxpZGF0ZTpFbyx2YWxpZGF0ZUFzeW5jOkNvLHZvaWQ6QWEsd2l0aFBhcnNlcjppaSx4aWQ6YWEseG9yOmphfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFN2PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6eXMsJGlucHV0OmVpLCRvdXRwdXQ6WHMsSU5WQUxJRDpuaSxORVZFUjpicyxUaW1lUHJlY2lzaW9uOlBpLFpvZEFueTpHbyxab2RBcnJheTplcixab2RCYXNlNjQ6VG4sWm9kQmFzZTY0VVJMOkluLFpvZEJpZ0ludDp3dCxab2RCaWdJbnRGb3JtYXQ6RW4sWm9kQm9vbGVhbjprdCxab2RDSURSdjQ6U24sWm9kQ0lEUnY2OnpuLFpvZENVSUQ6dm4sWm9kQ1VJRDI6Ym4sWm9kQ2F0Y2g6eXIsWm9kQ29kZWM6UHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6b2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6cmksWm9kQ3JlZGl0Q2FyZDpCbyxab2RDdXN0b206eHQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0Ok1lLFpvZERhdGU6QW4sWm9kRGVmYXVsdDpmcixab2REaXNjcmltaW5hdGVkVW5pb246bnIsWm9kRTE2NDpQbixab2RFbWFpbDpmbixab2RFbW9qaTptbixab2RFbnVtOktlLFpvZEVycm9yOl9mLFpvZEV4YWN0T3B0aW9uYWw6Tm4sWm9kRmlsZTp1cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIGxvfSxab2RGdW5jdGlvbjp4cixab2RHVUlEOmhuLFpvZElCQU46Vm8sWm9kSVB2NDp3bixab2RJUHY2OiRuLFpvZElTT0RhdGU6Z3QsWm9kSVNPRGF0ZVRpbWU6bXQsWm9kSVNPRHVyYXRpb246YnQsWm9kSVNPVGltZTp2dCxab2RJbnN0YW5jZU9mOkFyLFpvZEludGVyc2VjdGlvbjpvcixab2RJc3N1ZUNvZGU6a2YsWm9kSldUOnhuLFpvZEtTVUlEOmtuLFpvZExhenk6VHIsWm9kTGl0ZXJhbDpjcixab2RNQUM6Rm8sWm9kTWFwOmlyLFpvZE5hTjprcixab2ROYW5vSUQ6Z24sWm9kTmV2ZXI6WW8sWm9kTm9uT3B0aW9uYWw6am4sWm9kTnVsbDpXbyxab2ROdWxsYWJsZTpwcixab2ROdW1iZXI6X3QsWm9kTnVtYmVyRm9ybWF0OnFlLFpvZE9iamVjdDokdCxab2RPcHRpb25hbDpUdCxab2RQaXBlOkl0LFpvZFByZWZhdWx0Om1yLFpvZFByZXByb2Nlc3M6d3IsWm9kUHJvbWlzZTpQcixab2RSZWFkb25seTokcixab2RSZWFsRXJyb3I6YWUsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6aHQsWm9kU3RyaW5nRm9ybWF0Ok0sWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDprZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpocixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmhhLGJhc2U2NHVybDptYSxiaWdpbnQ6eGEsYm9vbGVhbjpqLGNhdGNoOl9yLGNoZWNrOlFhLGNpZHJ2NDpwYSxjaWRydjY6ZmEsY2xvbmU6Qixjb2RlYzpKYSxjb2VyY2U6Q2YsY29tcGlsZTpzaSxjb25maWc6Ryxjb3JlOnZmLGNyZWRpdENhcmQ6dmEsY3VpZDpyYSxjdWlkMjpzYSxjdXJyZW5jeUNvZGU6JGEsY3VzdG9tOkVyLGRhdGU6UmEsZGVjb2RlOkxpLGRlY29kZUFzeW5jOkhpLGRlZXBQYXJ0aWFsOklmLGRlZmF1bHQ6c3UsZGVzY3JpYmU6WWEsZGlzY3JpbWluYXRlZFVuaW9uOlJuLGUxNjQ6Z2EsZW1haWw6S2ksZW1vamk6bmEsZW5jb2RlOkRpLGVuY29kZUFzeW5jOlVpLGVuZHNXaXRoOm9uLGVudW06WCxleGFjdE9wdGlvbmFsOmRyLGZpbGU6SGEsZmxhdHRlbkVycm9yOklvLGZsb2F0MzI6emEsZmxvYXQ2NDpUYSxmb3JtYXRFcnJvcjpQbyxmcm9tSlNPTlNjaGVtYTpUZixmdW5jdGlvbjphdCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOlZzLGdldEVycm9yTWFwOiRmLGdsb2JhbFJlZ2lzdHJ5OmdlLGd0OkVlLGd0ZTpsZSxndWlkOldpLGhhc2g6U2EsaGV4OndhLGhvc3RuYW1lOmthLGh0dHBVcmw6dGEsaWJhbjpiYSxpbmNsdWRlczp0bixpbnB1dDp4ZixpbnN0YW5jZW9mOmVjLGludDpqdCxpbnQzMjpJYSxpbnQ2NDpFYSxpbnRlcnNlY3Rpb246enQsaW52ZXJ0Q29kZWM6S2EsaXB2NDp1YSxpcHY2OmRhLGlzbzpvYyxqc29uOm5jLGp3dDp5YSxrZXlvZjpaYSxrc3VpZDpjYSxsYXp5OklyLGxlbmd0aDpwdCxsaXRlcmFsOm0sbG9jYWxlczpZcyxsb29zZU9iamVjdDpZLGxvb3NlUmVjb3JkOnFhLGxvd2VyY2FzZTpYdCxsdDp4ZSxsdGU6dWUsbWFjOmxhLG1hcDpEYSxtYXhMZW5ndGg6ZHQsbWF4U2l6ZTpHZSxtZW1vaXplcjpabyxtZXRhOlhhLG1pbWU6c24sbWluTGVuZ3RoOmplLG1pblNpemU6Q2UsbXVsdGlwbGVPZjpCZSxuYW46VmEsbmFub2lkOm9hLG5hdGl2ZUVudW06VWEsbmVnYXRpdmU6RG8sbmV2ZXI6VmUsbm9ubmVnYXRpdmU6VW8sbm9ub3B0aW9uYWw6dnIsbm9ucG9zaXRpdmU6TG8sbm9ybWFsaXplOmFuLG51bGw6Q24sbnVsbGFibGU6aXQsbnVsbGlzaDpGYSxudW1iZXI6UCxvYmplY3Q6ZyxvcHRpb25hbDpVLG91dHB1dDpFZixvdmVyd3JpdGU6JGUscGFyc2U6TmkscGFyc2VBc3luYzpqaSxwYXJ0aWFsUmVjb3JkOk1hLHBpcGU6TXQscG9zaXRpdmU6cW8scHJlZmF1bHQ6Z3IscHJlcHJvY2VzczpNbixwcmV0dGlmeUVycm9yOmtzLHByb21pc2U6R2EscHJvcGVydGllczpybixwcm9wZXJ0eTpIbyxyZWFkb25seTpTcixyZWNvcmQ6TyxyZWZpbmU6Q3IscmVnZXg6WXQscmVnZXhlczpBbyxyZWdpc3RyeTpObyxzYWZlRGVjb2RlOkJpLHNhZmVEZWNvZGVBc3luYzpKaSxzYWZlRW5jb2RlOkZpLHNhZmVFbmNvZGVBc3luYzpWaSxzYWZlUGFyc2U6TWksc2FmZVBhcnNlQXN5bmM6cWksc2V0OkxhLHNldEVycm9yTWFwOndmLHNpemU6bHQsc2x1Z2lmeTpkbixzdGFydHNXaXRoOm5uLHN0cmljdE9iamVjdDpOYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6X2Esc3RyaW5nYm9vbDp0YyxzdWNjZXNzOkJhLHN1cGVyUmVmaW5lOk9yLHN5bWJvbDpPYSx0ZW1wbGF0ZUxpdGVyYWw6V2EsdG9KU09OU2NoZW1hOkFpLHRvTG93ZXJDYXNlOnVuLHRvVXBwZXJDYXNlOmxuLHRvWm9kOmJvLHRyYW5zZm9ybTpabix0cmVlaWZ5RXJyb3I6X3MsdHJpbTpjbix0dXBsZTpzcix1aW50MzI6UGEsdWludDY0OkNhLHVsaWQ6aWEsdW5kZWZpbmVkOnN0LHVuaW9uOkUsdW5rbm93bjpaLHVwcGVyY2FzZTplbix1cmw6ZWEsdXRpbDp2cyx1dWlkOkdpLHV1aWR2NDpRaSx1dWlkdjY6WWksdXVpZHY3OlhpLHZhbGlkYXRlOkVvLHZhbGlkYXRlQXN5bmM6Q28sdm9pZDpBYSx3aXRoUGFyc2VyOmlpLHhpZDphYSx4b3I6amEsejpzdX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxVZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixScj0iMi4wIixXPUVyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLE9mPUUoW2goKSxQKCkuaW50KCldKSxBZj1oKCk7WSh7dHRsOlAoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpQKCkub3B0aW9uYWwoKX0pO2NvbnN0IHp2PWcoe3R0bDpQKCkub3B0aW9uYWwoKX0pLFR2PWcoe3Rhc2tJZDpoKCl9KSxyYz1ZKHtwcm9ncmVzc1Rva2VuOk9mLm9wdGlvbmFsKCksW1VlXTpUdi5vcHRpb25hbCgpfSkscGU9Zyh7X21ldGE6cmMub3B0aW9uYWwoKX0pLHFuPXBlLmV4dGVuZCh7dGFzazp6di5vcHRpb25hbCgpfSksSXY9ZT0+cW4uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsZWU9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6cGUubG9vc2UoKS5vcHRpb25hbCgpfSkseWU9Zyh7X21ldGE6cmMub3B0aW9uYWwoKX0pLF9lPWcoe21ldGhvZDpoKCkscGFyYW1zOnllLmxvb3NlKCkub3B0aW9uYWwoKX0pLHRlPVkoe19tZXRhOnJjLm9wdGlvbmFsKCl9KSxEbj1FKFtoKCksUCgpLmludCgpXSksUmY9Zyh7anNvbnJwYzptKFJyKSxpZDpEbiwuLi5lZS5zaGFwZX0pLnN0cmljdCgpLGl1PWU9PlJmLnNhZmVQYXJzZShlKS5zdWNjZXNzLFpmPWcoe2pzb25ycGM6bShSciksLi4uX2Uuc2hhcGV9KS5zdHJpY3QoKSxQdj1lPT5aZi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxzYz1nKHtqc29ucnBjOm0oUnIpLGlkOkRuLHJlc3VsdDp0ZX0pLnN0cmljdCgpLHRvPWU9PnNjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBxOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkocXx8KHE9e30pKTtjb25zdCBpYz1nKHtqc29ucnBjOm0oUnIpLGlkOkRuLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpQKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpaKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCkseHY9ZT0+aWMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsRXY9RShbUmYsWmYsc2MsaWNdKTtFKFtzYyxpY10pO2NvbnN0IGFjPXRlLnN0cmljdCgpLEN2PXllLmV4dGVuZCh7cmVxdWVzdElkOkRuLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSksY2M9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6Q3Z9KSxPdj1nKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOnooaCgpKS5vcHRpb25hbCgpLHRoZW1lOlgoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLExuPWcoe2ljb25zOnooT3YpLm9wdGlvbmFsKCl9KSxjdD1nKHtuYW1lOmgoKSx0aXRsZTpoKCkub3B0aW9uYWwoKX0pLFpyPWN0LmV4dGVuZCh7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsdmVyc2lvbjpoKCksd2Vic2l0ZVVybDpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKX0pLEF2PXp0KGcoe2FwcGx5RGVmYXVsdHM6aigpLm9wdGlvbmFsKCl9KSxPKGgoKSxaKCkpKSxSdj1NbihlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLHp0KGcoe2Zvcm06QXYub3B0aW9uYWwoKSx1cmw6Vy5vcHRpb25hbCgpfSksTyhoKCksWigpKS5vcHRpb25hbCgpKSksWnY9WSh7bGlzdDpXLm9wdGlvbmFsKCksY2FuY2VsOlcub3B0aW9uYWwoKSxyZXF1ZXN0czpZKHtzYW1wbGluZzpZKHtjcmVhdGVNZXNzYWdlOlcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246WSh7Y3JlYXRlOlcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksTnY9WSh7bGlzdDpXLm9wdGlvbmFsKCksY2FuY2VsOlcub3B0aW9uYWwoKSxyZXF1ZXN0czpZKHt0b29sczpZKHtjYWxsOlcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksanY9Zyh7ZXhwZXJpbWVudGFsOk8oaCgpLFcpLm9wdGlvbmFsKCksc2FtcGxpbmc6Zyh7Y29udGV4dDpXLm9wdGlvbmFsKCksdG9vbHM6Vy5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpSdi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOmooKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpadi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6TyhoKCksVykub3B0aW9uYWwoKX0pLE12PXBlLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmgoKSxjYXBhYmlsaXRpZXM6anYsY2xpZW50SW5mbzpacn0pLHF2PWVlLmV4dGVuZCh7bWV0aG9kOm0oImluaXRpYWxpemUiKSxwYXJhbXM6TXZ9KSxEdj1nKHtleHBlcmltZW50YWw6TyhoKCksVykub3B0aW9uYWwoKSxsb2dnaW5nOlcub3B0aW9uYWwoKSxjb21wbGV0aW9uczpXLm9wdGlvbmFsKCkscHJvbXB0czpnKHtsaXN0Q2hhbmdlZDpqKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCkscmVzb3VyY2VzOmcoe3N1YnNjcmliZTpqKCkub3B0aW9uYWwoKSxsaXN0Q2hhbmdlZDpqKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdG9vbHM6Zyh7bGlzdENoYW5nZWQ6aigpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOk52Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpPKGgoKSxXKS5vcHRpb25hbCgpfSksTHY9dGUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpEdixzZXJ2ZXJJbmZvOlpyLGluc3RydWN0aW9uczpoKCkub3B0aW9uYWwoKX0pLFV2PV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6eWUub3B0aW9uYWwoKX0pLE5yPWVlLmV4dGVuZCh7bWV0aG9kOm0oInBpbmciKSxwYXJhbXM6cGUub3B0aW9uYWwoKX0pLEh2PWcoe3Byb2dyZXNzOlAoKSx0b3RhbDpVKFAoKSksbWVzc2FnZTpVKGgoKSl9KSxGdj1nKHsuLi55ZS5zaGFwZSwuLi5Idi5zaGFwZSxwcm9ncmVzc1Rva2VuOk9mfSksdWM9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpGdn0pLEJ2PXBlLmV4dGVuZCh7Y3Vyc29yOkFmLm9wdGlvbmFsKCl9KSxVbj1lZS5leHRlbmQoe3BhcmFtczpCdi5vcHRpb25hbCgpfSksSG49dGUuZXh0ZW5kKHtuZXh0Q3Vyc29yOkFmLm9wdGlvbmFsKCl9KSxWdj1YKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLEZuPWcoe3Rhc2tJZDpoKCksc3RhdHVzOlZ2LHR0bDpFKFtQKCksQ24oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOlUoUCgpKSxzdGF0dXNNZXNzYWdlOlUoaCgpKX0pLGxjPXRlLmV4dGVuZCh7dGFzazpGbn0pLEp2PXllLm1lcmdlKEZuKSxwbz1fZS5leHRlbmQoe21ldGhvZDptKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpKdn0pLGRjPWVlLmV4dGVuZCh7bWV0aG9kOm0oInRhc2tzL2dldCIpLHBhcmFtczpwZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLHBjPXRlLm1lcmdlKEZuKSxmYz1lZS5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6cGUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTt0ZS5sb29zZSgpO2NvbnN0IGhjPVVuLmV4dGVuZCh7bWV0aG9kOm0oInRhc2tzL2xpc3QiKX0pLG1jPUhuLmV4dGVuZCh7dGFza3M6eihGbil9KSxnYz1lZS5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6cGUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxLdj10ZS5tZXJnZShGbiksTmY9Zyh7dXJpOmgoKSxtaW1lVHlwZTpVKGgoKSksX21ldGE6TyhoKCksWigpKS5vcHRpb25hbCgpfSksamY9TmYuZXh0ZW5kKHt0ZXh0OmgoKX0pLHZjPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksTWY9TmYuZXh0ZW5kKHtibG9iOnZjfSksQm49WChbInVzZXIiLCJhc3Npc3RhbnQiXSksRXQ9Zyh7YXVkaWVuY2U6eihCbikub3B0aW9uYWwoKSxwcmlvcml0eTpQKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDpTZih7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLHFmPWcoey4uLmN0LnNoYXBlLC4uLkxuLnNoYXBlLHVyaTpoKCksZGVzY3JpcHRpb246VShoKCkpLG1pbWVUeXBlOlUoaCgpKSxzaXplOlUoUCgpKSxhbm5vdGF0aW9uczpFdC5vcHRpb25hbCgpLF9tZXRhOlUoWSh7fSkpfSksV3Y9Zyh7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsdXJpVGVtcGxhdGU6aCgpLGRlc2NyaXB0aW9uOlUoaCgpKSxtaW1lVHlwZTpVKGgoKSksYW5ub3RhdGlvbnM6RXQub3B0aW9uYWwoKSxfbWV0YTpVKFkoe30pKX0pLEd2PVVuLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy9saXN0Iil9KSxEZj1Ibi5leHRlbmQoe3Jlc291cmNlczp6KHFmKX0pLFF2PVVuLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksWXY9SG4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczp6KFd2KX0pLGJjPXBlLmV4dGVuZCh7dXJpOmgoKX0pLFh2PWJjLGViPWVlLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy9yZWFkIikscGFyYW1zOlh2fSksTGY9dGUuZXh0ZW5kKHtjb250ZW50czp6KEUoW2pmLE1mXSkpfSksdGI9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KSxuYj1iYyxvYj1lZS5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOm5ifSkscmI9YmMsc2I9ZWUuZXh0ZW5kKHttZXRob2Q6bSgicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOnJifSksaWI9eWUuZXh0ZW5kKHt1cmk6aCgpfSksYWI9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczppYn0pLGNiPWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOlUoaCgpKSxyZXF1aXJlZDpVKGooKSl9KSx1Yj1nKHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSxkZXNjcmlwdGlvbjpVKGgoKSksYXJndW1lbnRzOlUoeihjYikpLF9tZXRhOlUoWSh7fSkpfSksbGI9VW4uZXh0ZW5kKHttZXRob2Q6bSgicHJvbXB0cy9saXN0Iil9KSxkYj1Ibi5leHRlbmQoe3Byb21wdHM6eih1Yil9KSxwYj1wZS5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpPKGgoKSxoKCkpLm9wdGlvbmFsKCl9KSxmYj1lZS5leHRlbmQoe21ldGhvZDptKCJwcm9tcHRzL2dldCIpLHBhcmFtczpwYn0pLHljPWcoe3R5cGU6bSgidGV4dCIpLHRleHQ6aCgpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhoKCksWigpKS5vcHRpb25hbCgpfSksX2M9Zyh7dHlwZTptKCJpbWFnZSIpLGRhdGE6dmMsbWltZVR5cGU6aCgpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhoKCksWigpKS5vcHRpb25hbCgpfSksa2M9Zyh7dHlwZTptKCJhdWRpbyIpLGRhdGE6dmMsbWltZVR5cGU6aCgpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhoKCksWigpKS5vcHRpb25hbCgpfSksaGI9Zyh7dHlwZTptKCJ0b29sX3VzZSIpLG5hbWU6aCgpLGlkOmgoKSxpbnB1dDpPKGgoKSxaKCkpLF9tZXRhOk8oaCgpLFooKSkub3B0aW9uYWwoKX0pLFVmPWcoe3R5cGU6bSgicmVzb3VyY2UiKSxyZXNvdXJjZTpFKFtqZixNZl0pLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhoKCksWigpKS5vcHRpb25hbCgpfSksSGY9cWYuZXh0ZW5kKHt0eXBlOm0oInJlc291cmNlX2xpbmsiKX0pLFZuPUUoW3ljLF9jLGtjLEhmLFVmXSksbWI9Zyh7cm9sZTpCbixjb250ZW50OlZufSksZ2I9dGUuZXh0ZW5kKHtkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtZXNzYWdlczp6KG1iKX0pLHZiPV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6eWUub3B0aW9uYWwoKX0pLGJiPWcoe3RpdGxlOmgoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpqKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6aigpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6aigpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpqKCkub3B0aW9uYWwoKX0pLHliPWcoe3Rhc2tTdXBwb3J0OlgoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSx3Yz1nKHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTpnKHt0eXBlOm0oIm9iamVjdCIpLHByb3BlcnRpZXM6TyhoKCksVykub3B0aW9uYWwoKSxyZXF1aXJlZDp6KGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKFooKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6bSgib2JqZWN0IikscHJvcGVydGllczpPKGgoKSxXKS5vcHRpb25hbCgpLHJlcXVpcmVkOnooaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOmJiLm9wdGlvbmFsKCksZXhlY3V0aW9uOnliLm9wdGlvbmFsKCksX21ldGE6TyhoKCksWigpKS5vcHRpb25hbCgpfSksRmY9VW4uZXh0ZW5kKHttZXRob2Q6bSgidG9vbHMvbGlzdCIpfSksX2I9SG4uZXh0ZW5kKHt0b29sczp6KHdjKX0pLGpyPXRlLmV4dGVuZCh7Y29udGVudDp6KFZuKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpPKGgoKSxaKCkpLm9wdGlvbmFsKCksaXNFcnJvcjpqKCkub3B0aW9uYWwoKX0pO2pyLm9yKHRlLmV4dGVuZCh7dG9vbFJlc3VsdDpaKCl9KSk7Y29uc3Qga2I9cW4uZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6TyhoKCksWigpKS5vcHRpb25hbCgpfSksQmY9ZWUuZXh0ZW5kKHttZXRob2Q6bSgidG9vbHMvY2FsbCIpLHBhcmFtczprYn0pLHdiPV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KTtnKHthdXRvUmVmcmVzaDpqKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpQKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCBWZj1YKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSwkYj1wZS5leHRlbmQoe2xldmVsOlZmfSksU2I9ZWUuZXh0ZW5kKHttZXRob2Q6bSgibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczokYn0pLHpiPXllLmV4dGVuZCh7bGV2ZWw6VmYsbG9nZ2VyOmgoKS5vcHRpb25hbCgpLGRhdGE6WigpfSksVGI9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOnpifSksSWI9Zyh7bmFtZTpoKCkub3B0aW9uYWwoKX0pLFBiPWcoe2hpbnRzOnooSWIpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OlAoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpQKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OlAoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSx4Yj1nKHttb2RlOlgoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSxFYj1nKHt0eXBlOm0oInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmgoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDp6KFZuKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpqKCkub3B0aW9uYWwoKSxfbWV0YTpPKGgoKSxaKCkpLm9wdGlvbmFsKCl9KSxDYj1SbigidHlwZSIsW3ljLF9jLGtjXSksZm89Um4oInR5cGUiLFt5YyxfYyxrYyxoYixFYl0pLE9iPWcoe3JvbGU6Qm4sY29udGVudDpFKFtmbyx6KGZvKV0pLF9tZXRhOk8oaCgpLFooKSkub3B0aW9uYWwoKX0pLEFiPXFuLmV4dGVuZCh7bWVzc2FnZXM6eihPYiksbW9kZWxQcmVmZXJlbmNlczpQYi5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpoKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDpYKFsibm9uZSIsInRoaXNTZXJ2ZXIiLCJhbGxTZXJ2ZXJzIl0pLm9wdGlvbmFsKCksdGVtcGVyYXR1cmU6UCgpLm9wdGlvbmFsKCksbWF4VG9rZW5zOlAoKS5pbnQoKSxzdG9wU2VxdWVuY2VzOnooaCgpKS5vcHRpb25hbCgpLG1ldGFkYXRhOlcub3B0aW9uYWwoKSx0b29sczp6KHdjKS5vcHRpb25hbCgpLHRvb2xDaG9pY2U6eGIub3B0aW9uYWwoKX0pLFJiPWVlLmV4dGVuZCh7bWV0aG9kOm0oInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6QWJ9KSxKZj10ZS5leHRlbmQoe21vZGVsOmgoKSxzdG9wUmVhc29uOlUoWChbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTpCbixjb250ZW50OkNifSksS2Y9dGUuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpVKFgoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIiwidG9vbFVzZSJdKS5vcihoKCkpKSxyb2xlOkJuLGNvbnRlbnQ6RShbZm8seihmbyldKX0pLFpiPWcoe3R5cGU6bSgiYm9vbGVhbiIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGRlZmF1bHQ6aigpLm9wdGlvbmFsKCl9KSxOYj1nKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkxlbmd0aDpQKCkub3B0aW9uYWwoKSxtYXhMZW5ndGg6UCgpLm9wdGlvbmFsKCksZm9ybWF0OlgoWyJlbWFpbCIsInVyaSIsImRhdGUiLCJkYXRlLXRpbWUiXSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksamI9Zyh7dHlwZTpYKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOlAoKS5vcHRpb25hbCgpLG1heGltdW06UCgpLm9wdGlvbmFsKCksZGVmYXVsdDpQKCkub3B0aW9uYWwoKX0pLE1iPWcoe3R5cGU6bSgic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTp6KGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLHFiPWcoe3R5cGU6bSgic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6eihnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxEYj1nKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06eihoKCkpLGVudW1OYW1lczp6KGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksTGI9RShbTWIscWJdKSxVYj1nKHt0eXBlOm0oImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6UCgpLm9wdGlvbmFsKCksbWF4SXRlbXM6UCgpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTptKCJzdHJpbmciKSxlbnVtOnooaCgpKX0pLGRlZmF1bHQ6eihoKCkpLm9wdGlvbmFsKCl9KSxIYj1nKHt0eXBlOm0oImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6UCgpLm9wdGlvbmFsKCksbWF4SXRlbXM6UCgpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6eihnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDp6KGgoKSkub3B0aW9uYWwoKX0pLEZiPUUoW1ViLEhiXSksQmI9RShbRGIsTGIsRmJdKSxWYj1FKFtCYixaYixOYixqYl0pLEpiPXFuLmV4dGVuZCh7bW9kZTptKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTptKCJvYmplY3QiKSxwcm9wZXJ0aWVzOk8oaCgpLFZiKSxyZXF1aXJlZDp6KGgoKSkub3B0aW9uYWwoKX0pfSksS2I9cW4uZXh0ZW5kKHttb2RlOm0oInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSxXYj1FKFtKYixLYl0pLEdiPWVlLmV4dGVuZCh7bWV0aG9kOm0oImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpXYn0pLFFiPXllLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxZYj1fZS5leHRlbmQoe21ldGhvZDptKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOlFifSksWGI9dGUuZXh0ZW5kKHthY3Rpb246WChbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDpNbihlPT5lPT09bnVsbD92b2lkIDA6ZSxPKGgoKSxFKFtoKCksUCgpLGooKSx6KGgoKSldKSkub3B0aW9uYWwoKSl9KSxleT1nKHt0eXBlOm0oInJlZi9yZXNvdXJjZSIpLHVyaTpoKCl9KSx0eT1nKHt0eXBlOm0oInJlZi9wcm9tcHQiKSxuYW1lOmgoKX0pLG55PXBlLmV4dGVuZCh7cmVmOkUoW3R5LGV5XSksYXJndW1lbnQ6Zyh7bmFtZTpoKCksdmFsdWU6aCgpfSksY29udGV4dDpnKHthcmd1bWVudHM6TyhoKCksaCgpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLG95PWVlLmV4dGVuZCh7bWV0aG9kOm0oImNvbXBsZXRpb24vY29tcGxldGUiKSxwYXJhbXM6bnl9KSxyeT10ZS5leHRlbmQoe2NvbXBsZXRpb246WSh7dmFsdWVzOnooaCgpKS5tYXgoMTAwKSx0b3RhbDpVKFAoKS5pbnQoKSksaGFzTW9yZTpVKGooKSl9KX0pLHN5PWcoe3VyaTpoKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6aCgpLm9wdGlvbmFsKCksX21ldGE6TyhoKCksWigpKS5vcHRpb25hbCgpfSksaXk9ZWUuZXh0ZW5kKHttZXRob2Q6bSgicm9vdHMvbGlzdCIpLHBhcmFtczpwZS5vcHRpb25hbCgpfSksYXk9dGUuZXh0ZW5kKHtyb290czp6KHN5KX0pLGN5PV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KTtFKFtOcixxdixveSxTYixmYixsYixHdixRdixlYixvYixzYixCZixGZixkYyxmYyxoYyxnY10pO0UoW2NjLHVjLFV2LGN5LHBvXSk7RShbYWMsSmYsS2YsWGIsYXkscGMsbWMsbGNdKTtFKFtOcixSYixHYixpeSxkYyxmYyxoYyxnY10pO0UoW2NjLHVjLFRiLGFiLHRiLHdiLHZiLHBvLFliXSk7RShbYWMsTHYscnksZ2IsZGIsRGYsWXYsTGYsanIsX2IscGMsbWMsbGNdKTtjbGFzcyBBIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKGBNQ1AgZXJyb3IgJHt0fTogJHtufWApLHRoaXMuY29kZT10LHRoaXMuZGF0YT1vLHRoaXMubmFtZT0iTWNwRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCxuLG8pe2lmKHQ9PT1xLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQmJm8pe2NvbnN0IHI9bztpZihyLmVsaWNpdGF0aW9ucylyZXR1cm4gbmV3IHV5KHIuZWxpY2l0YXRpb25zLG4pfXJldHVybiBuZXcgQSh0LG4sbyl9fWNsYXNzIHV5IGV4dGVuZHMgQXtjb25zdHJ1Y3Rvcih0LG49YFVSTCBlbGljaXRhdGlvbiR7dC5sZW5ndGg+MT8icyI6IiJ9IHJlcXVpcmVkYCl7c3VwZXIocS5VcmxFbGljaXRhdGlvblJlcXVpcmVkLG4se2VsaWNpdGF0aW9uczp0fSl9Z2V0IGVsaWNpdGF0aW9ucygpe3JldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucz8/W119fWZ1bmN0aW9uIExlKGUpe3JldHVybiBlPT09ImNvbXBsZXRlZCJ8fGU9PT0iZmFpbGVkInx8ZT09PSJjYW5jZWxsZWQifW5ldyBTZXQoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OSIpO2Z1bmN0aW9uIGF1KGUpe2NvbnN0IG49ZXYoZSk/Lm1ldGhvZDtpZighbil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBpcyBtaXNzaW5nIGEgbWV0aG9kIGxpdGVyYWwiKTtjb25zdCBvPXR2KG4pO2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBtZXRob2QgbGl0ZXJhbCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIG99ZnVuY3Rpb24gY3UoZSx0KXtjb25zdCBuPWJmKGUsdCk7aWYoIW4uc3VjY2Vzcyl0aHJvdyBuLmVycm9yO3JldHVybiBuLmRhdGF9Y29uc3QgbHk9NmU0O2NsYXNzIGR5e2NvbnN0cnVjdG9yKHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkPTAsdGhpcy5fcmVxdWVzdEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzPW5ldyBNYXAsdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3RpbWVvdXRJbmZvPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnM9bmV3IFNldCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzPW5ldyBNYXAsdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKGNjLG49Pnt0aGlzLl9vbmNhbmNlbChuKX0pLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih1YyxuPT57dGhpcy5fb25wcm9ncmVzcyhuKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoTnIsbj0+KHt9KSksdGhpcy5fdGFza1N0b3JlPXQ/LnRhc2tTdG9yZSx0aGlzLl90YXNrTWVzc2FnZVF1ZXVlPXQ/LnRhc2tNZXNzYWdlUXVldWUsdGhpcy5fdGFza1N0b3JlJiYodGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihkYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBBKHEuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuey4uLnJ9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihmYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hc3luYygpPT57Y29uc3Qgcz1uLnBhcmFtcy50YXNrSWQ7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7bGV0IGE7Zm9yKDthPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZShzLG8uc2Vzc2lvbklkKTspe2lmKGEudHlwZT09PSJyZXNwb25zZSJ8fGEudHlwZT09PSJlcnJvciIpe2NvbnN0IGM9YS5tZXNzYWdlLHU9Yy5pZCxsPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHUpO2lmKGwpaWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUodSksYS50eXBlPT09InJlc3BvbnNlIilsKGMpO2Vsc2V7Y29uc3QgZj1jLHY9bmV3IEEoZi5lcnJvci5jb2RlLGYuZXJyb3IubWVzc2FnZSxmLmVycm9yLmRhdGEpO2wodil9ZWxzZXtjb25zdCBmPWEudHlwZT09PSJyZXNwb25zZSI/IlJlc3BvbnNlIjoiRXJyb3IiO3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke2Z9IGhhbmRsZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3V9YCkpfWNvbnRpbnVlfWF3YWl0IHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLm1lc3NhZ2Use3JlbGF0ZWRSZXF1ZXN0SWQ6by5yZXF1ZXN0SWR9KX19Y29uc3QgaT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhzLG8uc2Vzc2lvbklkKTtpZighaSl0aHJvdyBuZXcgQShxLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke3N9YCk7aWYoIUxlKGkuc3RhdHVzKSlyZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclRhc2tVcGRhdGUocyxvLnNpZ25hbCksYXdhaXQgcigpO2lmKExlKGkuc3RhdHVzKSl7Y29uc3QgYT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdChzLG8uc2Vzc2lvbklkKTtyZXR1cm4gdGhpcy5fY2xlYXJUYXNrUXVldWUocyksey4uLmEsX21ldGE6ey4uLmEuX21ldGEsW1VlXTp7dGFza0lkOnN9fX19cmV0dXJuIGF3YWl0IHIoKX07cmV0dXJuIGF3YWl0IHIoKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoaGMsYXN5bmMobixvKT0+e3RyeXtjb25zdHt0YXNrczpyLG5leHRDdXJzb3I6c309YXdhaXQgdGhpcy5fdGFza1N0b3JlLmxpc3RUYXNrcyhuLnBhcmFtcz8uY3Vyc29yLG8uc2Vzc2lvbklkKTtyZXR1cm57dGFza3M6cixuZXh0Q3Vyc29yOnMsX21ldGE6e319fWNhdGNoKHIpe3Rocm93IG5ldyBBKHEuSW52YWxpZFBhcmFtcyxgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihnYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgQShxLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke24ucGFyYW1zLnRhc2tJZH1gKTtpZihMZShyLnN0YXR1cykpdGhyb3cgbmV3IEEocS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Iuc3RhdHVzfWApO2F3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKG4ucGFyYW1zLnRhc2tJZCwiY2FuY2VsbGVkIiwiQ2xpZW50IGNhbmNlbGxlZCB0YXNrIGV4ZWN1dGlvbi4iLG8uc2Vzc2lvbklkKSx0aGlzLl9jbGVhclRhc2tRdWV1ZShuLnBhcmFtcy50YXNrSWQpO2NvbnN0IHM9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcyl0aHJvdyBuZXcgQShxLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kIGFmdGVyIGNhbmNlbGxhdGlvbjogJHtuLnBhcmFtcy50YXNrSWR9YCk7cmV0dXJue19tZXRhOnt9LC4uLnN9fWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBBP3I6bmV3IEEocS5JbnZhbGlkUmVxdWVzdCxgRmFpbGVkIHRvIGNhbmNlbCB0YXNrOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pKX1hc3luYyBfb25jYW5jZWwodCl7aWYoIXQucGFyYW1zLnJlcXVlc3RJZClyZXR1cm47dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LnBhcmFtcy5yZXF1ZXN0SWQpPy5hYm9ydCh0LnBhcmFtcy5yZWFzb24pfV9zZXR1cFRpbWVvdXQodCxuLG8scixzPSExKXt0aGlzLl90aW1lb3V0SW5mby5zZXQodCx7dGltZW91dElkOnNldFRpbWVvdXQocixuKSxzdGFydFRpbWU6RGF0ZS5ub3coKSx0aW1lb3V0Om4sbWF4VG90YWxUaW1lb3V0Om8scmVzZXRUaW1lb3V0T25Qcm9ncmVzczpzLG9uVGltZW91dDpyfSl9X3Jlc2V0VGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtpZighbilyZXR1cm4hMTtjb25zdCBvPURhdGUubm93KCktbi5zdGFydFRpbWU7aWYobi5tYXhUb3RhbFRpbWVvdXQmJm8+PW4ubWF4VG90YWxUaW1lb3V0KXRocm93IHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSxBLmZyb21FcnJvcihxLlJlcXVlc3RUaW1lb3V0LCJNYXhpbXVtIHRvdGFsIHRpbWVvdXQgZXhjZWVkZWQiLHttYXhUb3RhbFRpbWVvdXQ6bi5tYXhUb3RhbFRpbWVvdXQsdG90YWxFbGFwc2VkOm99KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSxuLnRpbWVvdXRJZD1zZXRUaW1lb3V0KG4ub25UaW1lb3V0LG4udGltZW91dCksITB9X2NsZWFudXBUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO24mJihjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSl9YXN5bmMgY29ubmVjdCh0KXtpZih0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uIik7dGhpcy5fdHJhbnNwb3J0PXQ7Y29uc3Qgbj10aGlzLnRyYW5zcG9ydD8ub25jbG9zZTt0aGlzLl90cmFuc3BvcnQub25jbG9zZT0oKT0+e24/LigpLHRoaXMuX29uY2xvc2UoKX07Y29uc3Qgbz10aGlzLnRyYW5zcG9ydD8ub25lcnJvcjt0aGlzLl90cmFuc3BvcnQub25lcnJvcj1zPT57bz8uKHMpLHRoaXMuX29uZXJyb3Iocyl9O2NvbnN0IHI9dGhpcy5fdHJhbnNwb3J0Py5vbm1lc3NhZ2U7dGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZT0ocyxpKT0+e3I/LihzLGkpLHRvKHMpfHx4dihzKT90aGlzLl9vbnJlc3BvbnNlKHMpOml1KHMpP3RoaXMuX29ucmVxdWVzdChzLGkpOlB2KHMpP3RoaXMuX29ubm90aWZpY2F0aW9uKHMpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2UgdHlwZTogJHtKU09OLnN0cmluZ2lmeShzKX1gKSl9LGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zdGFydCgpfV9vbmNsb3NlKCl7Y29uc3QgdD10aGlzLl9yZXNwb25zZUhhbmRsZXJzO3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmNsZWFyKCksdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl90aW1lb3V0SW5mby52YWx1ZXMoKSljbGVhclRpbWVvdXQoby50aW1lb3V0SWQpO3RoaXMuX3RpbWVvdXRJbmZvLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnZhbHVlcygpKW8uYWJvcnQoKTt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtjb25zdCBuPUEuZnJvbUVycm9yKHEuQ29ubmVjdGlvbkNsb3NlZCwiQ29ubmVjdGlvbiBjbG9zZWQiKTt0aGlzLl90cmFuc3BvcnQ9dm9pZCAwLHRoaXMub25jbG9zZT8uKCk7Zm9yKGNvbnN0IG8gb2YgdC52YWx1ZXMoKSlvKG4pfV9vbmVycm9yKHQpe3RoaXMub25lcnJvcj8uKHQpfV9vbm5vdGlmaWNhdGlvbih0KXtjb25zdCBuPXRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tOb3RpZmljYXRpb25IYW5kbGVyO24hPT12b2lkIDAmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm4odCkpLmNhdGNoKG89PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtvfWApKSl9X29ucmVxdWVzdCh0LG4pe2NvbnN0IG89dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcixyPXRoaXMuX3RyYW5zcG9ydCxzPXQucGFyYW1zPy5fbWV0YT8uW1VlXT8udGFza0lkO2lmKG89PT12b2lkIDApe2NvbnN0IGw9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpxLk1ldGhvZE5vdEZvdW5kLG1lc3NhZ2U6Ik1ldGhvZCBub3QgZm91bmQifX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT90aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKS5jYXRjaChmPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGVucXVldWUgZXJyb3IgcmVzcG9uc2U6ICR7Zn1gKSkpOnI/LnNlbmQobCkuY2F0Y2goZj0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGFuIGVycm9yIHJlc3BvbnNlOiAke2Z9YCkpKTtyZXR1cm59Y29uc3QgaT1uZXcgQWJvcnRDb250cm9sbGVyO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5zZXQodC5pZCxpKTtjb25zdCBhPUl2KHQucGFyYW1zKT90LnBhcmFtcy50YXNrOnZvaWQgMCxjPXRoaXMuX3Rhc2tTdG9yZT90aGlzLnJlcXVlc3RUYXNrU3RvcmUodCxyPy5zZXNzaW9uSWQpOnZvaWQgMCx1PXtzaWduYWw6aS5zaWduYWwsc2Vzc2lvbklkOnI/LnNlc3Npb25JZCxfbWV0YTp0LnBhcmFtcz8uX21ldGEsc2VuZE5vdGlmaWNhdGlvbjphc3luYyBsPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgZj17cmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYoZi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihsLGYpfSxzZW5kUmVxdWVzdDphc3luYyhsLGYsdik9PntpZihpLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBBKHEuQ29ubmVjdGlvbkNsb3NlZCwiUmVxdWVzdCB3YXMgY2FuY2VsbGVkIik7Y29uc3QgYj17Li4udixyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJiFiLnJlbGF0ZWRUYXNrJiYoYi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KTtjb25zdCB5PWIucmVsYXRlZFRhc2s/LnRhc2tJZD8/cztyZXR1cm4geSYmYyYmYXdhaXQgYy51cGRhdGVUYXNrU3RhdHVzKHksImlucHV0X3JlcXVpcmVkIiksYXdhaXQgdGhpcy5yZXF1ZXN0KGwsZixiKX0sYXV0aEluZm86bj8uYXV0aEluZm8scmVxdWVzdElkOnQuaWQscmVxdWVzdEluZm86bj8ucmVxdWVzdEluZm8sdGFza0lkOnMsdGFza1N0b3JlOmMsdGFza1JlcXVlc3RlZFR0bDphPy50dGwsY2xvc2VTU0VTdHJlYW06bj8uY2xvc2VTU0VTdHJlYW0sY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtOm4/LmNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2EmJnRoaXMuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQubWV0aG9kKX0pLnRoZW4oKCk9Pm8odCx1KSkudGhlbihhc3luYyBsPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgZj17cmVzdWx0OmwsanNvbnJwYzoiMi4wIixpZDp0LmlkfTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJyZXNwb25zZSIsbWVzc2FnZTpmLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQoZil9LGFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBmPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TnVtYmVyLmlzU2FmZUludGVnZXIobC5jb2RlKT9sLmNvZGU6cS5JbnRlcm5hbEVycm9yLG1lc3NhZ2U6bC5tZXNzYWdlPz8iSW50ZXJuYWwgZXJyb3IiLC4uLmwuZGF0YSE9PXZvaWQgMCYme2RhdGE6bC5kYXRhfX19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmYsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChmKX0pLmNhdGNoKGw9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCByZXNwb25zZTogJHtsfWApKSkuZmluYWxseSgoKT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5pZCk9PT1pJiZ0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZGVsZXRlKHQuaWQpfSl9X29ucHJvZ3Jlc3ModCl7Y29uc3R7cHJvZ3Jlc3NUb2tlbjpuLC4uLm99PXQucGFyYW1zLHI9TnVtYmVyKG4pLHM9dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQocik7aWYoIXMpe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5rbm93biB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufWNvbnN0IGk9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQociksYT10aGlzLl90aW1lb3V0SW5mby5nZXQocik7aWYoYSYmaSYmYS5yZXNldFRpbWVvdXRPblByb2dyZXNzKXRyeXt0aGlzLl9yZXNldFRpbWVvdXQocil9Y2F0Y2goYyl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUociksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUociksdGhpcy5fY2xlYW51cFRpbWVvdXQociksaShjKTtyZXR1cm59cyhvKX1fb25yZXNwb25zZSh0KXtjb25zdCBuPU51bWJlcih0LmlkKSxvPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KG4pO2lmKG8pe2lmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG4pLHRvKHQpKW8odCk7ZWxzZXtjb25zdCBpPW5ldyBBKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtvKGkpfXJldHVybn1jb25zdCByPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KG4pO2lmKHI9PT12b2lkIDApe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhbiB1bmtub3duIG1lc3NhZ2UgSUQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl9jbGVhbnVwVGltZW91dChuKTtsZXQgcz0hMTtpZih0byh0KSYmdC5yZXN1bHQmJnR5cGVvZiB0LnJlc3VsdD09Im9iamVjdCIpe2NvbnN0IGk9dC5yZXN1bHQ7aWYoaS50YXNrJiZ0eXBlb2YgaS50YXNrPT0ib2JqZWN0Iil7Y29uc3QgYT1pLnRhc2s7dHlwZW9mIGEudGFza0lkPT0ic3RyaW5nIiYmKHM9ITAsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldChhLnRhc2tJZCxuKSl9fWlmKHN8fHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRvKHQpKXIodCk7ZWxzZXtjb25zdCBpPUEuZnJvbUVycm9yKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtyKGkpfX1nZXQgdHJhbnNwb3J0KCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH1hc3luYyBjbG9zZSgpe2F3YWl0IHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKX1hc3luYypyZXF1ZXN0U3RyZWFtKHQsbixvKXtjb25zdHt0YXNrOnJ9PW8/P3t9O2lmKCFyKXt0cnl7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5yZXF1ZXN0KHQsbixvKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBBP2k6bmV3IEEocS5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fXJldHVybn1sZXQgczt0cnl7Y29uc3QgaT1hd2FpdCB0aGlzLnJlcXVlc3QodCxsYyxvKTtpZihpLnRhc2spcz1pLnRhc2sudGFza0lkLHlpZWxke3R5cGU6InRhc2tDcmVhdGVkIix0YXNrOmkudGFza307ZWxzZSB0aHJvdyBuZXcgQShxLkludGVybmFsRXJyb3IsIlRhc2sgY3JlYXRpb24gZGlkIG5vdCByZXR1cm4gYSB0YXNrIik7Zm9yKDs7KXtjb25zdCBhPWF3YWl0IHRoaXMuZ2V0VGFzayh7dGFza0lkOnN9LG8pO2lmKHlpZWxke3R5cGU6InRhc2tTdGF0dXMiLHRhc2s6YX0sTGUoYS5zdGF0dXMpKXthLnN0YXR1cz09PSJjb21wbGV0ZWQiP3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9OmEuc3RhdHVzPT09ImZhaWxlZCI/eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBBKHEuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IGZhaWxlZGApfTphLnN0YXR1cz09PSJjYW5jZWxsZWQiJiYoeWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBBKHEuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IHdhcyBjYW5jZWxsZWRgKX0pO3JldHVybn1pZihhLnN0YXR1cz09PSJpbnB1dF9yZXF1aXJlZCIpe3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9O3JldHVybn1jb25zdCBjPWEucG9sbEludGVydmFsPz90aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO2F3YWl0IG5ldyBQcm9taXNlKHU9PnNldFRpbWVvdXQodSxjKSksbz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIEE/aTpuZXcgQShxLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19fXJlcXVlc3QodCxuLG8pe2NvbnN0e3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppLHRhc2s6YSxyZWxhdGVkVGFzazpjfT1vPz97fTtyZXR1cm4gbmV3IFByb21pc2UoKHUsbCk9Pntjb25zdCBmPVM9PntsKFMpfTtpZighdGhpcy5fdHJhbnNwb3J0KXtmKG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpKTtyZXR1cm59aWYodGhpcy5fb3B0aW9ucz8uZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcz09PSEwKXRyeXt0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodC5tZXRob2QpLGEmJnRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkodC5tZXRob2QpfWNhdGNoKFMpe2YoUyk7cmV0dXJufW8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtjb25zdCB2PXRoaXMuX3JlcXVlc3RNZXNzYWdlSWQrKyxiPXsuLi50LGpzb25ycGM6IjIuMCIsaWQ6dn07bz8ub25wcm9ncmVzcyYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuc2V0KHYsby5vbnByb2dyZXNzKSxiLnBhcmFtcz17Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30scHJvZ3Jlc3NUb2tlbjp2fX0pLGEmJihiLnBhcmFtcz17Li4uYi5wYXJhbXMsdGFzazphfSksYyYmKGIucGFyYW1zPXsuLi5iLnBhcmFtcyxfbWV0YTp7Li4uYi5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOmN9fSk7Y29uc3QgeT1TPT57dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUodiksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUodiksdGhpcy5fY2xlYW51cFRpbWVvdXQodiksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKHtqc29ucnBjOiIyLjAiLG1ldGhvZDoibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiLHBhcmFtczp7cmVxdWVzdElkOnYscmVhc29uOlN0cmluZyhTKX19LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKEs9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7S31gKSkpO2NvbnN0IE49UyBpbnN0YW5jZW9mIEE/UzpuZXcgQShxLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhTKSk7bChOKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQodixTPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoUyBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBsKFMpO3RyeXtjb25zdCBOPWJmKG4sUy5yZXN1bHQpO04uc3VjY2Vzcz91KE4uZGF0YSk6bChOLmVycm9yKX1jYXRjaChOKXtsKE4pfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e3kobz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3QgJD1vPy50aW1lb3V0Pz9seSxUPSgpPT55KEEuZnJvbUVycm9yKHEuUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDokfSkpO3RoaXMuX3NldHVwVGltZW91dCh2LCQsbz8ubWF4VG90YWxUaW1lb3V0LFQsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IGs9Yz8udGFza0lkO2lmKGspe2NvbnN0IFM9Tj0+e2NvbnN0IEs9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQodik7Sz9LKE4pOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHt2fWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQodixTKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uoayx7dHlwZToicmVxdWVzdCIsbWVzc2FnZTpiLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goTj0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGwoTil9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGIse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goUz0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGwoUyl9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LHBjLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSxtYyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSxLdixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKGM9PnRoaXMuX29uZXJyb3IoYykpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89YXUodCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1jdSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89YXUodCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9Y3UodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJml1KHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgQShxLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBBKHEuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBBKHEuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgQShxLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCBjPXBvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGMpLExlKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgQShxLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKExlKGEuc3RhdHVzKSl0aHJvdyBuZXcgQShxLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCBjPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGMpe2NvbnN0IHU9cG8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczpjfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24odSksTGUoYy5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gdXUoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHB5KGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTt1dShpKSYmdXUocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgZnkgZXh0ZW5kcyBkeXtfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgYyBvZlsuLi5zLmxpc3RlbmVyc10pYyhhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgaHk9IjIwMjYtMDEtMjYiLG15PSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3MgZ3l7ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPUV2LnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09bXkmJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciB2eT1FKFttKCJsaWdodCIpLG0oImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxxdD1FKFttKCJpbmxpbmUiKSxtKCJmdWxsc2NyZWVuIiksbSgicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIiksYnk9RShbbSgiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksbSgiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxtKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksbSgiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksbSgiLS1jb2xvci10ZXh0LWludmVyc2UiKSxtKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxtKCItLWNvbG9yLXRleHQtaW5mbyIpLG0oIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxtKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLG0oIi0tY29sb3ItdGV4dC13YXJuaW5nIiksbSgiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksbSgiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLG0oIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLG0oIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksbSgiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLG0oIi0tY29sb3ItYm9yZGVyLWdob3N0IiksbSgiLS1jb2xvci1ib3JkZXItaW5mbyIpLG0oIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLG0oIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxtKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksbSgiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxtKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLG0oIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxtKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLG0oIi0tY29sb3ItcmluZy1pbmZvIiksbSgiLS1jb2xvci1yaW5nLWRhbmdlciIpLG0oIi0tY29sb3ItcmluZy1zdWNjZXNzIiksbSgiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxtKCItLWZvbnQtc2FucyIpLG0oIi0tZm9udC1tb25vIiksbSgiLS1mb250LXdlaWdodC1ub3JtYWwiKSxtKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLG0oIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxtKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxtKCItLWZvbnQtdGV4dC14cy1zaXplIiksbSgiLS1mb250LXRleHQtc20tc2l6ZSIpLG0oIi0tZm9udC10ZXh0LW1kLXNpemUiKSxtKCItLWZvbnQtdGV4dC1sZy1zaXplIiksbSgiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksbSgiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksbSgiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLG0oIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksbSgiLS1ib3JkZXItcmFkaXVzLXhzIiksbSgiLS1ib3JkZXItcmFkaXVzLXNtIiksbSgiLS1ib3JkZXItcmFkaXVzLW1kIiksbSgiLS1ib3JkZXItcmFkaXVzLWxnIiksbSgiLS1ib3JkZXItcmFkaXVzLXhsIiksbSgiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxtKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksbSgiLS1zaGFkb3ctaGFpcmxpbmUiKSxtKCItLXNoYWRvdy1zbSIpLG0oIi0tc2hhZG93LW1kIiksbSgiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIikseXk9TyhieS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxFKFtoKCksc3QoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTtnKHttZXRob2Q6bSgidWkvb3Blbi1saW5rIikscGFyYW1zOmcoe3VybDpoKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgX3k9Zyh7aXNFcnJvcjpqKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksa3k9Zyh7aXNFcnJvcjpqKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLHd5PWcoe2lzRXJyb3I6aigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO2coe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6Zyh7fSl9KTt2YXIgJGM9Zyh7Y29ubmVjdERvbWFpbnM6eihoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOnooaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczp6KGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczp6KGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksU2M9Zyh7Y2FtZXJhOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTtnKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6Zyh7d2lkdGg6UCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OlAoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyICR5PWcoe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOk8oaCgpLFooKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSxTeT1nKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOk8oaCgpLFooKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksenk9Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6Zyh7cmVhc29uOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLFR5PWcoe2ZvbnRzOmgoKS5vcHRpb25hbCgpfSksSXk9Zyh7dmFyaWFibGVzOnl5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6VHkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLFB5PWcoe21ldGhvZDptKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczpnKHt9KX0pO08oaCgpLFooKSk7dmFyIGx1PWcoe3RleHQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTtnKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTt2YXIgeHk9Zyh7ZXhwZXJpbWVudGFsOk8oaCgpLE8oaCgpLE9uKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOmcoe2xpc3RDaGFuZ2VkOmooKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6Zyh7bGlzdENoYW5nZWQ6aigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6Zyh7cGVybWlzc2lvbnM6U2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOiRjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0Omx1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTpsdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOmcoe3Rvb2xzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLEV5PWcoe2V4cGVyaW1lbnRhbDpPKGgoKSxPKGgoKSxPbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOmooKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6eihxdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6Zyh7fSkub3B0aW9uYWwoKX0pO2coe2NzcDokYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6U2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpqKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO2coe21ldGhvZDptKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczpnKHttb2RlOnF0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIEN5PWcoe21vZGU6cXQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLE95PUUoW20oIm1vZGVsIiksbSgiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7Zyh7cmVzb3VyY2VVcmk6aCgpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTp6KE95KS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOlZlKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpWZSgpLm9wdGlvbmFsKCl9KTtnKHttaW1lVHlwZXM6eihoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTtnKHttZXRob2Q6bSgidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczpnKHtjb250ZW50czp6KEUoW1VmLEhmXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTtnKHttZXRob2Q6bSgidWkvbWVzc2FnZSIpLHBhcmFtczpnKHtyb2xlOm0oInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6eihWbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczpnKHtodG1sOmgoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOiRjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6U2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgQXk9Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6anIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxXZj1nKHt0b29sSW5mbzpnKHtpZDpEbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6d2MuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6dnkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczpJeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6cXQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2Rlczp6KHF0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6RShbZyh7aGVpZ2h0OlAoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSxnKHttYXhIZWlnaHQ6RShbUCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoRShbZyh7d2lkdGg6UCgpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksZyh7bWF4V2lkdGg6RShbUCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpFKFttKCJ3ZWIiKSxtKCJkZXNrdG9wIiksbSgibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOmcoe3RvdWNoOmooKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6aigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOmcoe3RvcDpQKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OlAoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206UCgpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OlAoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCksUnk9Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6V2YuZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7Zyh7bWV0aG9kOm0oInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOmcoe2NvbnRlbnQ6eihWbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50Ok8oaCgpLFooKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7Zyh7bWV0aG9kOm0oInVpL2luaXRpYWxpemUiKSxwYXJhbXM6Zyh7YXBwSW5mbzpaci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6RXkuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmgoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIFp5PWcoe3Byb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86WnIuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczp4eS5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDpXZi5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxOeT17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gZHUoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShOeSk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgbGgoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlN2KSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIHB1KGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBqeShlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBNeShlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gcXkoZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyB6YyBleHRlbmRzIGZ5e19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDokeSx0b29saW5wdXRwYXJ0aWFsOlN5LHRvb2xyZXN1bHQ6QXksdG9vbGNhbmNlbGxlZDp6eSxob3N0Y29udGV4dGNoYW5nZWQ6Unl9O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIXpjLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxHKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihOcixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1weSh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUoYyl7T2JqZWN0LmFzc2lnbih0aGlzLGMpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhjLHUpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGw7aWYoaSl7bGV0IGY9YS5pbnB1dFNjaGVtYSx2PWY/YXdhaXQgcHUoZixjPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpjPz97fTtsPWF3YWl0IG8odix1KX1lbHNlIGw9YXdhaXQgbyh1KTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFsLmlzRXJyb3ImJihsLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IHB1KGEub3V0cHV0U2NoZW1hLGwuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxsfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IGR1KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IGR1KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihQeSwobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoQmYsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihGZiwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LGpyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LExmLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSxEZixuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9LZjpKZjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sd3ksbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sYWMsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LF95LG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSxreSxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LEN5LG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGM9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxjIT09bykmJihuPXUsbz1jLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpjfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgZ3kod2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpoeX19LFp5LG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgZnU9IiI7Y29uc3QgR2Y9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PWZ1JiYodC5hcHBseUhvc3RGb250cyhyKSxmdT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxPZT1uZXcgemMoe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLFFmPXthcHBseURvY3VtZW50VGhlbWU6anksYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6TXksYXBwbHlIb3N0Rm9udHM6cXl9LGNlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGQ9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IHR0PSIiLFZyPSIiLFlmPXt9LFhmPSExLGVoPSIiLFI9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LHdlPTE7Y29uc3QgRHk9NTtsZXQgUT1udWxsLHV0PVtdLEhlPSIiLHplPVtdLGhlPW51bGwsaG89MDtjb25zdCBMeT1uZXcgU2V0KFsiZm9yZ2V0UHJlZmVyZW5jZXMiLCJhZGRUb1RyaXAiLCJjbGVhclRyaXAiLCJyZXF1ZXN0Qm9va2luZyIsImNhbmNlbEJvb2tpbmciLCJjaGFuZ2VCb29raW5nIiwic2lnbkluIiwic2lnbk91dCJdKSxodT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO3JldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP2Bob3RlbDoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGV4dHJhczpib29raW5nOiR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgZXh0cmFzOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzInx8dD09PSJwb2xpY3ktbWlzc2luZyI/YHBvbGljeToke2UuaG90ZWw/LmlkPz8iIn06JHtlLnRvcGljPz8iIn1gOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciP2BjYW5jZWw6JHtlLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJjaGFuZ2UtcHJldmlldyI/YGNoYW5nZToke2UuY29uZmlybWF0aW9uQ29kZT8/ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iaG90ZWxzInx8dD09PSJuby1ob3RlbHMiP2Bob3RlbHM6JHtlLmFzaz8uY2l0eT8/IiJ9OiR7ZS5hc2s/LnF1ZXJ5Pz9lLnF1ZXJ5Pz8iIn1gOnR9LGFzPWU9PnshaGV8fEh5LmhhcyhTdHJpbmcoaGUudmlldykpfHxodShlKSE9PWh1KGhlKSYmKHplPVsuLi56ZSx7cGF5bG9hZDpoZSxsYWJlbDpGeShoZSksdmVyc2lvbjpob31dLnNsaWNlKC02KSl9LFV5PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToiZ2V0SG90ZWwiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubiwuLi5lLnJvb21zX3dhbnRlZD97cm9vbXM6ZS5yb29tc193YW50ZWR9Ont9fX07aWYodD09PSJleHRyYXMiJiZlLmZvckJvb2tpbmcpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7Ym9va2luZzplLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5ufX07aWYodD09PSJpdGluZXJhcnkiKXJldHVybntrZXk6Iml0aW5lcmFyeSIsYXJnczp7dGl0bGU6ZS50aXRsZSwuLi5uLGRheXM6KGUuZGF5cz8/W10pLm1hcChvPT4oe2xhYmVsOm8ubGFiZWwsLi4uby5ub3RlP3tub3RlOm8ubm90ZX06e30saXRlbXM6KG8uaXRlbXM/P1tdKS5tYXAocj0+ci5pZCl9KSl9fX0sbXU9ZT0+e3plPXplLmZpbHRlcih0PT4hZS5pbmNsdWRlcyhTdHJpbmcodC5wYXlsb2FkPy52aWV3KSkpfSxIeT1uZXcgU2V0KFsiYm9va2luZyIsImNhbmNlbGxlZCIsImNoYW5nZWQiLCJlcnJvciIsIm5lZWRzLWd1ZXN0Iiwic2lnbmVkLW91dCIsIm1lbWJlci1zaWduLWluIl0pLEZ5PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJob3RlbHMiKXtpZihlLmFzaz8uY2l0eSlyZXR1cm4gU3RyaW5nKGUuYXNrLmNpdHkpO2NvbnN0IG49Wy4uLm5ldyBTZXQoKGUuaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLmNpdHkpKSldO3JldHVybiBuLmxlbmd0aD09PTE/U3RyaW5nKG5bMF0pOmAke2UudG90YWw/PzB9IGhvdGVsc2B9cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKTp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij8idGhlIGNhbmNlbGxhdGlvbiI6dD09PSJjaGFuZ2UtcHJldmlldyI/InRoZSBjaGFuZ2UiOnQ9PT0ibWVtYmVyIj8ieW91ciBtZW1iZXJzaGlwIjp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BhZGQtb25zIGZvciAke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YCR7U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKX0gYWRkLW9uc2A6dD09PSJ0cmlwIj8idGhlIHRyaXAiOnQ9PT0iYm9va2luZ3MiPyJ5b3VyIGJvb2tpbmdzIjp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMiPyJ0aGUgcG9saWNpZXMiOiJiYWNrIn0sQnk9KCk9Pntjb25zdCBlPWNlKCJiYWNrYnRuIiksdD16ZS5hdCgtMSk7ZS5oaWRkZW49IXQsdCYmKGUudGV4dENvbnRlbnQ9YOKAuSAke3QubGFiZWx9YCl9O2xldCBSdD0iIixjcz0iIixEdD0wLFRjPSExO2NvbnN0IHRoPWU9Pntjb25zdCB0PWU/LlsiY3VybGVzcy90cmlwIl07dCYmKHR5cGVvZiB0LnRyaXBJZD09InN0cmluZyImJnQudHJpcElkJiYoY3M9dC50cmlwSWQpLER0PU51bWJlcih0LmNvdW50Pz8wKSxBcnJheS5pc0FycmF5KHQubGluZXMpJiYodXQ9dC5saW5lcyxUYz0hMCkpfSxWeT1lPT5jcz97Li4uZSx0cmlwOmNzfTplLEp5PWU9PllmW2VdPz8iIjtsZXQgTXI9ITE7Y29uc3QgZ3U9ZT0+e01yPWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9O2xldCBtbz0wLHVzPSIiO2NvbnN0IEo9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89SnkoZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihNcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2d1KCEwKTtjb25zdCByPW1vO3JldHVybiBPZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpWeSh0KX0pLmZpbmFsbHkoKCk9Pmd1KCExKSkudGhlbihzPT57dGgocz8uX21ldGEpO2NvbnN0IGk9cz8uc3RydWN0dXJlZENvbnRlbnQsYT1pJiZuLmZvbGQ/bi5mb2xkKGkpOmk7dXM9aT9KU09OLnN0cmluZ2lmeShpKToiIjtjb25zdCBjPUx5LmhhcyhlKSYmYSYmYS52aWV3IT09ImVycm9yIjtyZXR1cm4gcj09PW1vJiZhPyhuLnB1c2ghPT0hMSYmYXMoYSksYyYmKGhvKz0xKSxhLnZpZXc9PT0iYm9va2luZyImJihtdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLFNlPW51bGwpLChhLnZpZXc9PT0iY2FuY2VsbGVkInx8YS52aWV3PT09ImNoYW5nZWQiKSYmbXUoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLGV0KGEpKTpjJiYoaG8rPTEpLEt5KHMpLHN9KX0sS3k9ZT0+e2NvbnN0IHQ9KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG49Pm4/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyF0fHwhT2UuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fE9lLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHQpfV19KS5jYXRjaCgoKT0+e30pfSxKbj1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxLbj1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksV3k9Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+JyxHeT1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke1d5fSR7ZChlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7ZChlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixzZT0oKT0+WGY/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtkKGVofHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsTHQ9ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LGxzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxEZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtMdChlLmNoZWNrSW4pfSDigJMgJHtMdChlLmNoZWNrT3V0KX0gwrcgJHtscyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7bHMoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsUXk9KGUsdCxuKT0+e2NvbnN0IG89dXQuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LFl5PShlLHQpPT57Y29uc3Qgbj11dC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sZ289KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7ZChuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7ZChuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Qobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsbmg9KGUsdCk9Pntjb25zdCBuPXR8fFh5KCk7cmV0dXJuKCFSLmNoZWNrSW58fFIuY2hlY2tJbjxuKSYmKFIuY2hlY2tJbj1uKSwoIVIuY2hlY2tPdXR8fFIuY2hlY2tPdXQ8PVIuY2hlY2tJbikmJihSLmNoZWNrT3V0PWRzKFIuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7ZChSLmNoZWNrSW4pfSIgbWluPSIke2Qobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2QoUi5jaGVja091dCl9IiBtaW49IiR7ZChkcyhSLmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxsYWJlbCBjbGFzcz0iZ3Vlc3RzIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2Qod2UpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvbGFiZWw+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke2QoSWMoKSl9PC9zcGFuPgogIDwvZGl2PmB9LEljPSgpPT57Y29uc3QgZT1SLmNoZWNrSW4mJlIuY2hlY2tPdXQ/bHMoUi5jaGVja0luLFIuY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj13ZT4xP2Ake3dlfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sZHM9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxYeT0oKT0+bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLEpyPTgsZV89ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAobD0+U3RyaW5nKGwuY2l0eSkpKV0sbz1sPT57Y29uc3QgZj10LmZpbmQodj0+di5jaXR5PT09bCk/LmNvdW50cnk7cmV0dXJuIGYmJiFTdHJpbmcoZikuc3RhcnRzV2l0aChsKT9TdHJpbmcoZik6IiJ9LHI9bD0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHtkKGwpfSR7byhsKT9gPHNtYWxsPiDCtyAke2QobyhsKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKGY9PmYuY2l0eT09PWwpLm1hcChmPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZChmLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtKbihTdHJpbmcoZi5pZCkpfSI+CiAgICAgICAgICAgICAgJHtmLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtkKGYuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtkKEtuKFN0cmluZyhmLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7Zi5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7ZChmLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2QoZi5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7ZChuLmxlbmd0aD4xP2YuYXJlYT8/Zi5jaXR5OltmLmFyZWEsZi5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2YuZnJvbU5pZ2h0bHk/YCR7ZChmLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJHtHeShmLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLHM9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxpPXMtdC5sZW5ndGgsYT1lLnBsYWNlcz8/W10sYz0hIWUuYXNrPy5jaXR5LHU9YS5sZW5ndGh8fGM/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2M/JzxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iIj5BbGwgcGxhY2VzPC9idXR0b24+JzoiIn0KICAgICAgICAgICAke2EubWFwKChsLGYpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2QobC5wbGFjZSl9IiR7Zj49SnI/IiBoaWRkZW4iOiIifT4ke2QobC5sYWJlbCl9IDxzbWFsbD4ke2QobC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke2EubGVuZ3RoPkpyP2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7YS5sZW5ndGgtSnJ9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiO3JldHVybltzZSgpLHUsZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7ZChlLndpZGVuZWQuZnJvbSl9LiBUaGVzZSBhcmUgJHtkKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiIsYDxkaXY+JHtuLm1hcChyKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7ZChlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke2QoZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIixpPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt0Lmxlbmd0aH0gb2YgJHtzfS48L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMjAsaSl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKX0sdF89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXTtyZXR1cm4gdC5sZW5ndGg/W3NlKCksYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7ZCh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobj0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKG4uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7Sm4oU3RyaW5nKG4uaWQpKX0iPgogICAgICAgICAgJHtuLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtkKG4uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2QoS24oU3RyaW5nKG4ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtkKG4ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7ZChbbi5hcmVhLG4uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7bi5mcm9tTmlnaHRseT9gJHtkKG4uZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtkKGUucXVlcnkpfSJgOiIifS4gVHJ5IGEgY2l0eS48L2Rpdj5gfSxvaD1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7Sm4oU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtkKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2QoS24oU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2QoZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtkKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7ZChlLnJhdGluZy52YWx1ZSl94piFICgke2QoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtkKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2QodCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxuXz0oZSx0LG4pPT57Y29uc3Qgbz1ReShTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke0puKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7ZCh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmQoS24oU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2QodC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Qocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHtkKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7ZCh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHtkKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZCh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7ZCh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHt3ZT4xP2AgwrcgJHt3ZX0gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7ZCh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2dvKGBkYXRhLWFkZC1yb29tPSIke2QodC5pZCl9IiBkYXRhLWhvdGVsPSIke2QoZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSx3ZSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxvXz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZChlKX0iIGRhdGEtY2k9IiR7ZChuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtkKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7ZChMdChTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtkKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtkKEx0KFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/ZChuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsdnU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/UjtyZXR1cm5bc2UoKSxvaCh0KSxuaChTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxvXyhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZChlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+bl8odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7ZCh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7ZChyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7ZCh0LmlkKX0iPiR7ZChyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0scl89ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W3NlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Qoby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QodC5uYW1lKX0gwrcgJHtkKERlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZChyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Qoci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7ZChyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtnbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Qoci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7ZChvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W3NlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2QodC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7ZChyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtkKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZChyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7ZChyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2dvKGBkYXRhLWFkZC1leHRyYT0iJHtkKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtkKHQuaWQpfSJgLFl5KFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKHQuaWQpfSI+QmFjayB0byAke2QodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sc189ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2QoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7ZChlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtkKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2QoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2QoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtkKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtkKGUuaG90ZWxJZCl9ImA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKGUudGl0bGUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZChlLmtpbmQ9PT0icm9vbSI/YCR7ZS5ob3RlbE5hbWV9IMK3ICR7RGUoZS5zdGF5KX0ke2UucmVmdW5kYWJsZT09PSExPyIgwrcgbm9uLXJlZnVuZGFibGUiOiIifWA6YCR7ZS5ob3RlbE5hbWV9JHtlLmRldGFpbD9gIMK3ICR7ZS5kZXRhaWx9YDoiIn1gKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2QoZS50b3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2QoZS51bml0KX0ke2Uua2luZD09PSJyb29tIj8iIC8gbmlnaHQiOiIgZWFjaCJ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Z28odCxOdW1iZXIoZS5xdWFudGl0eT8/MSksU3RyaW5nKGUudGl0bGUpKX08L2Rpdj4KICAgIDwvZGl2PmB9LGJ1PShlLHQpPT5gPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke2QoZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+VGF4ZXMgYW5kIGZlZXM8L3NwYW4+PHNwYW4+JHtkKGUudGF4ZXNBbmRGZWVzKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIGdvb2QiPjxzcGFuPiR7ZChlLm1lbWJlclNhdmluZy50aWVyKX0gbWVtYmVyIHJhdGU8L3NwYW4+PHNwYW4+4oiSICR7ZChlLm1lbWJlclNhdmluZy5zYXZlZCl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2QodCl9PC9zcGFuPjxzcGFuPiR7ZChlLnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyBlYXJuczwvc3Bhbj48c3Bhbj4ke2QoTnVtYmVyKGUubWVtYmVyU2F2aW5nLnBvaW50cykudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfTwvc3Bhbj48L2Rpdj5gOiIifQogICA8L2Rpdj5gLGlfPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bc2UoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtkKHR0KX0gaG90ZWxzPC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW3NlKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtkKEx0KG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKHNfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtkKG8udGl0bGUpfTogJHtkKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIiwuLi5BcnJheS5pc0FycmF5KGUuZ3JvdXBzKSYmZS5ncm91cHMubGVuZ3RoPjE/W2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZWQgaW4gJHtkKChlLmN1cnJlbmNpZXM/P1tdKS5qb2luKCIgYW5kICIpKX0sIHNlcGFyYXRlbHkuIE5vdGhpbmcgaGVyZSBjb252ZXJ0cyBvbmUgaW50byB0aGUgb3RoZXI7IGVhY2ggaG90ZWwgaXMgYm9va2VkIGFuZCBwYWlkIGluIGl0cyBvd24uPC9kaXY+YCwuLi5lLmdyb3Vwcy5tYXAobz0+YnUobyxgVG90YWwgaW4gJHtvLmN1cnJlbmN5fWApKV06W2J1KGUsIlRvdGFsIildLC4uLkFycmF5LmlzQXJyYXkoZS5uZWVkc1Jvb20pJiZlLm5lZWRzUm9vbS5sZW5ndGg/ZS5uZWVkc1Jvb20ubWFwKG89PmA8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgICA8Yj5Hb2VzIHdpdGggYSBzdGF5PC9iPgogICAgICAgICAgICAgPHNwYW4+JHtkKChvLmV4dHJhcz8/W10pLmpvaW4oIiBhbmQgIikpfSBpcyAke2Qoby5ob3RlbE5hbWUpfSdzIHNlcnZpY2UgZm9yIGl0cyBndWVzdHMsIHNvIGl0IGlzIGJvb2tlZCB3aXRoIGEgcm9vbSB0aGVyZSAtIG9yIGFkZGVkIHRvIGEgYm9va2luZyB5b3UgYWxyZWFkeSBoYXZlLjwvc3Bhbj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Qoby5ob3RlbElkKX0iPlJvb21zIGF0ICR7ZChvLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDwvZGl2PmApOlsnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke2QodHQpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxyaCgpXSxRPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7ZCh0dCl9IENpcmNsZSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7dm8oKX1gXS5qb2luKCIiKX0sUGM9W3tpZDoia2luZy1iZWQiLGxhYmVsOiJLaW5nIGJlZCJ9LHtpZDoidHdpbi1iZWRzIixsYWJlbDoiVHdpbiBiZWRzIn0se2lkOiJoaWdoLWZsb29yIixsYWJlbDoiSGlnaCBmbG9vciJ9LHtpZDoibG93LWZsb29yIixsYWJlbDoiTG93IGZsb29yIn0se2lkOiJxdWlldC1yb29tIixsYWJlbDoiUXVpZXQgcm9vbSJ9LHtpZDoiY29ubmVjdGluZy1yb29tcyIsbGFiZWw6IkNvbm5lY3Rpbmcgcm9vbXMifSx7aWQ6ImVhcmx5LWNoZWNrLWluIixsYWJlbDoiRWFybHkgY2hlY2staW4ifSx7aWQ6ImxhdGUtYXJyaXZhbCIsbGFiZWw6IkxhdGUgYXJyaXZhbCJ9LHtpZDoiYWNjZXNzaWJsZS1yb29tIixsYWJlbDoiQWNjZXNzaWJsZSByb29tIn1dLGFfPXsia2luZy1iZWQiOiJ0d2luLWJlZHMiLCJ0d2luLWJlZHMiOiJraW5nLWJlZCIsImhpZ2gtZmxvb3IiOiJsb3ctZmxvb3IiLCJsb3ctZmxvb3IiOiJoaWdoLWZsb29yIn07bGV0IFNlPW51bGw7Y29uc3Qgcmg9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciIHZhbHVlPSIke2QoU2U/Lm5hbWU/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIiB2YWx1ZT0iJHtkKFNlPy5lbWFpbD8/IiIpfSI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYXNrcyI+CiAgICAgIDxkaXYgY2xhc3M9ImFza3MtdCI+QXNrIHRoZSBkZXNrIGZvcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaGlwcyI+JHtQYy5tYXAodD0+YDxidXR0b24gY2xhc3M9ImNoaXAgYXNrIiB0eXBlPSJidXR0b24iIGRhdGEtYXNrPSIke2QodC5pZCl9IiBhcmlhLXByZXNzZWQ9IiR7KFNlP1NlLnJlcXVlc3RzOlE/LnByZWZlcmVuY2VzPz9bXSkuaW5jbHVkZXModC5pZCk/InRydWUiOiJmYWxzZSJ9Ij4ke2QodC5sYWJlbCl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgPGxhYmVsPkFycml2aW5nIGF0PGlucHV0IGlkPSJndGltZSIgdHlwZT0idGltZSIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSIke2QoU2U/LmFycml2aW5nQXQ/PyIiKX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkFueXRoaW5nIGVsc2U8aW5wdXQgaWQ9Imdub3RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkluIHlvdXIgb3duIHdvcmRzIOKAlCBvcHRpb25hbCIgdmFsdWU9IiR7ZChTZT8ubm90ZXM/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj5UaGVzZSBnbyB0byB0aGUgZGVzayBhcyByZXF1ZXN0cy4gJHtkKHR0KX0gbWVldHMgd2hhdCBpdCBjYW4gb24gdGhlIGRheTsgbm9uZSBvZiBpdCBpcyBoZWxkLjwvZGl2PgogICAgICAke1E/YDxsYWJlbCBjbGFzcz0icmVtZW1iZXIiPjxpbnB1dCBpZD0iZ3JlbWVtYmVyIiB0eXBlPSJjaGVja2JveCIke1NlPy5yZW1lbWJlcj8iIGNoZWNrZWQiOiIifT4gUmVtZW1iZXIgdGhlIGJlZCwgZmxvb3IgYW5kIHJvb20gcmVxdWVzdHMgb24gbXkgJHtkKFEucHJvZ3JhbW1lPz8ibWVtYmVyc2hpcCIpfSBmb3IgbmV4dCB0aW1lPC9sYWJlbD5gOiIifQogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9vayI+SG9sZCB0aGVzZSByb29tczwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+CiAgPC9kaXY+YCxjXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+VGhlIGJvb2tpbmcgbmVlZHMgJHtkKChlLm1pc3Npbmc/P1tdKS5qb2luKCIgYW5kICIpfHwiYSBuYW1lIGFuZCBhbiBlbWFpbCIpfS48L2Rpdj5gLHJoKCEwKSwnPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+J10uam9pbigiIiksdV89ZT0+e2NvbnN0IHQ9ZS5tZW1iZXI/P3t9O3JldHVybltzZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7ZCh0LnByb2dyYW1tZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtkKHQubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7ZCh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtkKE51bWJlcih0LnBvaW50cz8/MCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPjxiPiR7ZChNYXRoLnJvdW5kKCh0LnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApKX0lIG9mZjwvYj48c3Bhbj5Sb29tIHJhdGVzIGFuZCB0cmlwIHRvdGFscyBub3cgc2hvdyB0aGUgJHtkKHQudGllcj8ubmFtZSl9IG1lbWJlciByYXRlLiBOb3RoaW5nIGlzIGNoYXJnZWQgYnkgc2lnbmluZyBpbi48L3NwYW4+PC9kaXY+YCwodC5wcmVmZXJlbmNlcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgIDxiPlNhdmVkIGZvciB5b3VyIG5leHQgc3RheXM8L2I+CiAgICAgICAgICAgPHNwYW4+JHtkKHQucHJlZmVyZW5jZXMubWFwKG49PlBjLmZpbmQobz0+by5pZD09PW4pPy5sYWJlbD8/bikuam9pbigiLCAiKSl9IC0gdGlja2VkIG9uIHRoZSBib29raW5nIGZvcm0sIGFuZCBhc2tlZCBmb3Igb25seSB3aGVuIHlvdSBib29rIHdpdGggdGhlbS48L3NwYW4+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZvcmdldC1wcmVmcyI+Rm9yZ2V0IHRoZW08L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1vdXQiPlNpZ24gb3V0PC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LGxfPSgpPT5bJzxkaXYgY2xhc3M9ImVyciI+Tm8gbWVtYmVyc2hpcCBtYXRjaGVzIHRoYXQgbnVtYmVyIGFuZCBzdXJuYW1lLiBDaGVjayBib3RoIGFzIHRoZXkgYXJlIHByaW50ZWQg4oCUIG5vdGhpbmcgZWxzZSBpcyBuZWVkZWQsIHRoaXMgY29ubmVjdG9yIG5ldmVyIGFza3MgZm9yIGEgcGFzc3dvcmQuPC9kaXY+Jyx2byghMCldLmpvaW4oIiIpLHZvPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJzaWduaW4iJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+TWVtYmVyc2hpcCBudW1iZXI8aW5wdXQgaWQ9Im1udW0iIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgaXMgcHJpbnRlZCI+PC9sYWJlbD4KICAgICAgPGxhYmVsPlN1cm5hbWU8aW5wdXQgaWQ9Im1zdXIiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIHN1cm5hbWUgb24gaXQiPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLWluIj5TaWduIGluPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBwYXNzd29yZCBpcyBhc2tlZCBmb3IgYW5kIG5vbmUgaXMgc3RvcmVkLiBTaWduaW5nIGluIHNob3dzIHRoZSBtZW1iZXIgcmF0ZTsgbm90aGluZyBpcyBjaGFyZ2VkLjwvZGl2PgogIDwvZGl2PmAsZF89ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0ZWQ/P1tdO3JldHVybiB0Lmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQke2UuYWNjZXNzaWJpbGl0eT8iIGZsYWciOiIifSI+CiAgICA8Yj5SZXF1ZXN0ZWQsIG5vdCBoZWxkPC9iPgogICAgJHt0Lm1hcChuPT5gPHNwYW4+JHtkKG4pfTwvc3Bhbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gOiIifSx5dT1lPT5TdHJpbmcoZS5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpLHBfPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5ib29raW5ncykmJmUuYm9va2luZ3MubGVuZ3RoP2UuYm9va2luZ3M6W2UuYm9va2luZz8/e31dLG49dC5sZW5ndGg+MSxvPShyLHMsaSk9PltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7ZChyLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtkKHIuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtkKERlKHIuc3RheSkpfSDCtyAke2Qoci5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgICAgPC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJub3RlIj5IZWxkIHVudGlsICR7ZCh5dShyKSl9IFVUQy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJtb25leS1vdXQiPjxzcGFuPlRvdGFsIGZvciB0aGUgc3RheTwvc3Bhbj48c3Bhbj4ke2Qocyl9PC9zcGFuPjwvZGl2PmAsZF8oaSksYDxkaXYgY2xhc3M9InJvd3MiPiR7KHIucXVvdGU/LmxpbmVzPz9bXSkubWFwKGhfKS5qb2luKCIiKX08L2Rpdj5gLG4/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtkKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtkKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtkKHIuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bc2UoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwgaG9sZHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyBjaGFuZ2VkIG9yIGNhbmNlbGxlZCBvbiBpdHMgb3duLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgdGhlIHRpbWUgdW5kZXIgZWFjaCBjb2RlLiI6YFRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke2QoeXUodFswXSkpfSBVVEMuYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAocj0+bj9vKHIsU3RyaW5nKHIudG90YWw/PyIiKSxyKTpvKHIsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2QodFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7ZCh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGlzIGJvb2tpbmc8L2J1dHRvbj5gfQogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxmXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+JHtkKGUuZGV0YWlsPz9lLndoeT8/IlRoYXQgY291bGQgbm90IGJlIGRvbmUuIil9PC9kaXY+YCxEdD4wPyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCI+VmlldyB0aGUgdHJpcDwvYnV0dG9uPjwvZGl2Pic6IiJdLmpvaW4oIiIpLGhfPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7ZChlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtkKGUua2luZD09PSJyb29tIj9EZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2QoZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxtXz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQifSxnXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RzPy5raW5kcz8/W107aWYoIXQubGVuZ3RoKXJldHVybiIiO2NvbnN0IG49dC5tYXAobz0+UGMuZmluZChyPT5yLmlkPT09byk/LmxhYmVsPz9vKTtyZXR1cm5gPGRpdiBjbGFzcz0ibWV0YSBhc2tlZC1saW5lIj5Bc2tlZCBmb3IgJHtkKG4uam9pbigiLCAiKS50b0xvd2VyQ2FzZSgpKX08L2Rpdj5gfSx2Xz1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXTtyZXR1cm4gdC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W3NlKCksYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKG4uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZChuLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2QoRGUobi5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke2dfKG4pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHttX1tTdHJpbmcobi5zdGF0dXMpXT8/IiJ9Ij4ke2Qobi5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtkKG4ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke24uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG4uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7ZChuLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtkKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sX3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtkKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2QoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2QoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2Qobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxrdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89KHIscyxpKT0+cz9gPGRpdiBjbGFzcz0ibGVnJHtpPyIgd2FzIjoiIn0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2siPiR7ZChyKX08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWd2Ij4ke2Qocy5jaGVja0luKX0g4oaSICR7ZChzLmNoZWNrT3V0KX0gwrcgJHtkKHMubmlnaHRzKX0gJHtOdW1iZXIocy5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ20iPiR7ZChzLnJvb21OYW1lKX0ke051bWJlcihzLnJvb21zKT4xP2AgwrcgJHtkKHMucm9vbXMpfSByb29tc2A6IiJ9IMK3ICR7ZChzLnRvdGFsKX08L2Rpdj4KICAgICAgICAgPC9kaXY+YDoiIjtyZXR1cm5bc2UoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Qobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7byh0PyJXYXMiOiJOb3ciLGUuZnJvbSwhMCl9JHtvKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtkKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7ZChlLmFkZE9uLmZyb20pfSDihpIgJHtkKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7ZChlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2QoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Qobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sS3I9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7ZChlLnRpdGxlKX08L2g0PiR7ZChlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtkKG8udGl0bGUpfTwvaDQ+JHtkKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtkKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtkKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKHQuaWQpfSI+QmFjayB0byAke2QodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sYl89ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7Sm4oU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7ZChyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7ZChLbihTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtkKHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7ZChyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke2Qoci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7ZChyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7ZChyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2Qocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2Qocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW3NlKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2QoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7ZChEZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7ZChlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHtkKHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke2QoaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHtkKHIubmFtZSl9OiAke2Qoci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHtkKGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LHlfPWU9Pntjb25zdCB0PWUuZGF5cz8/W107cmV0dXJuW3NlKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7ZChlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QoRGUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7ZChOdW1iZXIoZS5pblRyaXA/PzApK051bWJlcihlLmJvb2tlZD8/MCkpfS8ke2QoZS5wbGFubmVkKX08L2I+PHNwYW4+JHtkKGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKG4sbyk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bysxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHtkKG4ubGFiZWwpfSR7bi5kYXRlP2A8c21hbGw+IMK3ICR7ZChTdHJpbmcobi5kYXRlKS5zbGljZSg1KSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtuLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7ZChuLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAkeyhuLml0ZW1zPz9bXSkubWFwKHI9PmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIiR7ci5raW5kPT09ImhvdGVsIj9gIGRhdGEtaG90ZWw9IiR7ZChyLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtyLmNoZWNrSW4/YCBkYXRhLWNpPSIke2Qoci5jaGVja0luKX0iIGRhdGEtY289IiR7ZChyLmNoZWNrT3V0KX0iYDoiIn1gOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2QoW3IuZGV0YWlsLHIubmlnaHRzP051bWJlcihyLm5pZ2h0Pz8xKT4xP2BuaWdodCAke3IubmlnaHR9IG9mICR7ci5uaWdodHN9YDpgJHtyLm5pZ2h0c30gJHtyLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiIsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmJvb2tlZHx8ci5pblRyaXA/InllcyI6Im5vIn0iPiR7ci5ib29rZWQ/YEJvb2tlZCDCtyAke2Qoci5ib29rZWQpfWA6ci5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG49PmAke2Qobi5uYW1lKX06ICR7ZChuLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxldD1lPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47ZS50b29sTmFtZXMmJihZZj1lLnRvb2xOYW1lcyksZS5icmFuZCYmKHR0PVN0cmluZyhlLmJyYW5kKSksZS5sb2dvVXJsJiYoVnI9U3RyaW5nKGUubG9nb1VybCkpLHR5cGVvZiBlLmRlbW89PSJib29sZWFuIiYmKFhmPWUuZGVtbyksZS5kZW1vTm90ZSYmKGVoPVN0cmluZyhlLmRlbW9Ob3RlKSksdHlwZW9mIGUucm9vbXNfd2FudGVkPT0ibnVtYmVyIiYmKHdlPWUucm9vbXNfd2FudGVkKSxlLnZpZXc9PT0ibWVtYmVyIiYmZS5tZW1iZXI/LnRpZXI/Lm5hbWU/UT1lLm1lbWJlcjplLm1lbWJlcj8udGllcj8ubmFtZSYmKFE9UT8ucHJvZ3JhbW1lPT09ZS5tZW1iZXIucHJvZ3JhbW1lJiZRPy50aWVyPy5uYW1lPT09ZS5tZW1iZXIudGllci5uYW1lP3suLi5RLC4uLmUubWVtYmVyfTplLm1lbWJlciksKGUudmlldz09PSJzaWduZWQtb3V0Inx8ZS5zaWduZWRJbj09PSExKSYmKFE9bnVsbCksZS5zdGF5Py5jaGVja0luJiYhWnQmJihSPXtjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn0pLCFUYyYmKGUudmlldz09PSJ0cmlwInx8ZS52aWV3PT09Im5lZWRzLWRhdGVzIikmJih1dD1lLmxpbmVzPz9bXSksKGUudmlldz09PSJib29raW5nInx8ZS52aWV3PT09ImVtcHR5LXRyaXAiKSYmKHV0PVtdLER0PTApLEhlPVN0cmluZyhlLnZpZXc/PyIiKSxCeSgpO2NvbnN0IHQ9Y2UoImJyYW5kIik7VnI/KHQuc3JjPVZyLHQuaGlkZGVuPSExLGNlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KHQuaGlkZGVuPSEwLGNlKCJ0aXRsZSIpLmhpZGRlbj0hMSxjZSgidGl0bGUiKS50ZXh0Q29udGVudD10dHx8IkhvdGVscyIpLGNlKCJzdWIiKS50ZXh0Q29udGVudD13XyhlKSxTXygpLCRfKCk7Y29uc3Qgbj17aG90ZWxzOmVfLCJuby1ob3RlbHMiOnRfLGhvdGVsOnZ1LCJuby1yb29tcyI6dnUsImhvdGVsLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhhdCBob3RlbCBpcyBub3QgaW4gdGhpcyBjb25uZWN0b3IuPC9kaXY+JyxleHRyYXM6cl8sdHJpcDppXywibmVlZHMtZGF0ZXMiOmtfLGJvb2tpbmc6cF8sIm5lZWRzLWd1ZXN0IjpjXyxtZW1iZXI6dV8sIm1lbWJlci1ub3QtZm91bmQiOmxfLCJzaWduZWQtb3V0IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5TaWduZWQgb3V0LiBSYXRlcyBhcmUgdGhlIHB1YmxpYyBvbmVzIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj48L2Rpdj4nLCJlbXB0eS10cmlwIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGVyZSBpcyBub3RoaW5nIGluIHRoZSB0cmlwIHlldC48L2Rpdj4nLGJvb2tpbmdzOnZfLCJjYW5jZWxsYXRpb24tcHJldmlldyI6X3UsY2FuY2VsbGVkOl91LCJjaGFuZ2UtcHJldmlldyI6a3UsY2hhbmdlZDprdSwiYm9va2luZy1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmcgaGVyZSBtYXRjaGVzIHRoYXQgY29kZS48L2Rpdj4nLGNvbXBhcmlzb246Yl8sIm5vdGhpbmctdG8tY29tcGFyZSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9uZSBvZiB0aG9zZSBhcmUgaG90ZWxzIHRoaXMgY29ubmVjdG9yIGtub3dzLjwvZGl2PicsaXRpbmVyYXJ5OnlfLCJlbXB0eS1pdGluZXJhcnkiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPkFuIGl0aW5lcmFyeSBuZWVkcyBhdCBsZWFzdCBvbmUgZGF5LjwvZGl2PicscG9saWN5OktyLHBvbGljaWVzOktyLCJwb2xpY3ktbWlzc2luZyI6S3IsZXJyb3I6Zl8sIm5vLW1lbWJlciI6KCk9PmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9ib2R5IGlzIHNpZ25lZCBpbiwgc28gdGhlcmUgaXMgbm90aGluZyBzYXZlZCB0byBmb3JnZXQuPC9kaXY+JHt2byghMCl9YCwibWVtYmVyLXNpZ24taW4iOigpPT5bc2UoKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+Jyx2byghMCldLmpvaW4oIiIpfTsoSGU9PT0iaG90ZWwifHxIZT09PSJuby1yb29tcyJ8fEhlPT09Im5lZWRzLWRhdGVzIikmJmUuaG90ZWw/LmlkPyhSdD1TdHJpbmcoZS5ob3RlbC5pZCksZS5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5xcigpLDApKTooUnQ9IiIseGMoKSksaGU9ZTtjb25zdCBvPW5bSGVdO2NlKCJjb250ZW50IikuaW5uZXJIVE1MPShvP28oZSk6YDxkaXYgY2xhc3M9ImVyciI+JHtkKGUuZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtlLmRldGFpbD9gPGJyPiR7ZChlLmRldGFpbCl9YDoiIn08L2Rpdj5gKStfXyhlKX0sX189ZT0+QXJyYXkuaXNBcnJheShlLnN1Z2dlc3Rpb25zKSYmZS5zdWdnZXN0aW9ucy5sZW5ndGgmJk9lLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8ubWVzc2FnZT9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtlLnN1Z2dlc3Rpb25zLm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNheT0iJHtkKHQpfSI+JHtkKHQpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiIsa189ZT0+W3NlKCksZS5ob3RlbD9vaChlLmhvdGVsKToiIixgPGRpdiBjbGFzcz0iZXJyIj4ke2QoZS53aHk/PyJXaGljaCBuaWdodHM/IEEgcm9vbSBuZWVkcyBhIGNoZWNrLWluIGFuZCBhIGNoZWNrLW91dCBkYXRlLiIpfTwvZGl2PmAsbmgoU3RyaW5nKGUuaG90ZWw/LmlkPz8iIiksZS5ob3RlbD8udG9kYXlUaGVyZSldLmpvaW4oIiIpLHdfPWU9PmUudmlldz09PSJob3RlbHMiP2Ake2UudG90YWw/PzB9ICR7TnVtYmVyKGUudG90YWwpPT09MT8iaG90ZWwiOiJob3RlbHMifWA6ZS52aWV3PT09ImhvdGVsInx8ZS52aWV3PT09Im5vLXJvb21zIj9EZShlLnN0YXkpOmUudmlldz09PSJ0cmlwIj8oZS5saW5lcz8/W10pLmxlbmd0aD9TdHJpbmcoZS50b3RhbD8/IiIpOiIiOmUudmlldz09PSJjb21wYXJpc29uIj9gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgOmUudmlldz09PSJpdGluZXJhcnkiP051bWJlcihlLmJvb2tlZCk+MD9gJHtlLmJvb2tlZH0vJHtlLnBsYW5uZWR9IGJvb2tlZGA6YCR7ZS5pblRyaXB9LyR7ZS5wbGFubmVkfSBpbiB0aGUgdHJpcGA6ZS52aWV3PT09ImJvb2tpbmdzIj9gJHtlLmNvdW50Pz8wfSBib29raW5nJHtOdW1iZXIoZS5jb3VudCk9PT0xPyIiOiJzIn1gOiIiLCRfPSgpPT57Y29uc3QgZT1jZSgibWVtYmVyY2hpcCIpO1E/KGUuaGlkZGVuPSExLGUudGV4dENvbnRlbnQ9YCR7US50aWVyPy5uYW1lPz8iTWVtYmVyIn0gwrcgJHtNYXRoLnJvdW5kKChRLnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApfSUgb2ZmYCxlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJtZW1iZXIiKSxlLnNldEF0dHJpYnV0ZSgidGl0bGUiLGAke1EubmFtZX0gwrcgJHtRLnByb2dyYW1tZX1gKSk6KGUuaGlkZGVuPUhlPT09Im1lbWJlci1ub3QtZm91bmQiLGUudGV4dENvbnRlbnQ9Ik1lbWJlciBzaWduIGluIixlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJhc2stc2lnbi1pbiIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKX0sU189KCk9Pntjb25zdCBlPWNlKCJoZWFkdHJpcCIpLHQ9VGM/RHQ6RHR8fHV0Lmxlbmd0aDtlLmhpZGRlbj10PT09MHx8SGU9PT0idHJpcCIsY2UoImhlYWR0cmlwbiIpLnRleHRDb250ZW50PVN0cmluZyh0KX0sel89KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3UiKTtSPXtjaGVja0luOmU/LnZhbHVlPz9SLmNoZWNrSW4sY2hlY2tPdXQ6dD8udmFsdWU/P1IuY2hlY2tPdXQsZ3Vlc3RzOk51bWJlcihuPy52YWx1ZT8/Ui5ndWVzdHMpfHwyfX0sb289KGU9e30pPT5SLmNoZWNrSW4mJlIuY2hlY2tPdXQ/e2NoZWNrSW46Ui5jaGVja0luLGNoZWNrT3V0OlIuY2hlY2tPdXQsZ3Vlc3RzOlIuZ3Vlc3RzLC4uLmV9OmU7bGV0IHBzLFp0PSExO2NvbnN0IHhjPSgpPT57Y2xlYXJUaW1lb3V0KHBzKSxadD0hMX0scXI9KGU9MCk9PntSdCYmKGNsZWFyVGltZW91dChwcyksWnQ9ITAscHM9c2V0VGltZW91dCgoKT0+e2lmKCFSdCl7WnQ9ITE7cmV0dXJufWlmKE1yKXtxcigxNTApO3JldHVybn1adD0hMSxKKCJnZXRIb3RlbCIse2hvdGVsOlJ0LHJvb21zOndlLC4uLm9vKCl9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxWPWU9PntjZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHtkKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSxbZGF0YS1ib29raW5nLWV4dHJhc10sW2RhdGEtYm9va2luZy1leHRyYV0sW2RhdGEtc2F5XSxbZGF0YS1wbGFjZV0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKGspKTtjb25zdCBTPWFfW25dO2smJlMmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7U30iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIik7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKG8hPT1udWxsKXt6XygpLHdlPU1hdGgubWluKER5LE1hdGgubWF4KDEsd2UrTnVtYmVyKG8pKSk7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcod2UpKTtjb25zdCBTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTtTJiYoUy50ZXh0Q29udGVudD1JYygpKSxxcig0NTApO3JldHVybn1jb25zdCByPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYociE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsUz1OdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxOPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06b28oKTtKKCJhZGRUb1RyaXAiLHtob3RlbDprLHJvb206cixyb29tczpTLC4uLk59KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLWV4dHJhIik7aWYocyE9PW51bGwpe0ooImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOnMscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UiKTtpZihpIT09bnVsbCl7Y29uc3Qgaz1oZT8uYXNrPy5zb3J0O0ooImxpc3RIb3RlbHMiLHsuLi5pP3tjaXR5Oml9Ont9LC4uLms/e3NvcnQ6a306e319KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKGEhPT1udWxsKXtKKCJsaXN0RXh0cmFzIix7Ym9va2luZzphfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgYz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYoYyE9PW51bGwpe0ooInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6YyxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCB1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHUhPT1udWxsKXtKKCJsaXN0RXh0cmFzIix7aG90ZWw6dSwuLi5vbygpfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZihsIT09bnVsbCl7SigicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzpsfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3QgZj10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZihmIT09bnVsbCl7SigicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6Zn0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0IHY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZih2IT09bnVsbCl7SigiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6dixjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBiPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoYiE9PW51bGwpe2NvbnN0IGs9aGU/LnRvPz97fSxTPWhlPy5mcm9tPz97fSxOPWhlPy5hZGRPbixLPWsuY2hlY2tJbiYmKGsuY2hlY2tJbiE9PVMuY2hlY2tJbnx8ay5jaGVja091dCE9PVMuY2hlY2tPdXQpO0ooImNoYW5nZUJvb2tpbmciLHtib29raW5nOmIsY29uZmlybWVkOiEwLC4uLks/e2NoZWNrSW46ay5jaGVja0luLGNoZWNrT3V0OmsuY2hlY2tPdXR9Ont9LC4uLk4/LmlkP3tleHRyYTpOLmlkLHF1YW50aXR5Ok51bWJlcihOLnRvKX06e30sLi4uay5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKGsucm9vbXMpIT09TnVtYmVyKFMucm9vbXMpP3tyb29tczpOdW1iZXIoay5yb29tcyl9Ont9LC4uLmsucm9vbU5hbWUmJmsucm9vbU5hbWUhPT1TLnJvb21OYW1lP3tyb29tOmsucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgeT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZih5PT09ImJhY2siKXtjb25zdCBrPXplLmF0KC0xKTtpZigha3x8TXIpcmV0dXJuO3plPXplLnNsaWNlKDAsLTEpLG1vKz0xLHhjKCk7Y29uc3QgUz1rLnZlcnNpb249PT1obz92b2lkIDA6VXkoay5wYXlsb2FkKTtTPyhoZT1rLnBheWxvYWQsSihTLmtleSxTLmFyZ3Mse3B1c2g6ITF9KS5jYXRjaCgoKT0+ZXQoay5wYXlsb2FkKSkpOmV0KGsucGF5bG9hZCk7cmV0dXJufWlmKHk9PT0ibW9yZS1wbGFjZXMiKXtmb3IoY29uc3QgayBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY2hpcC5wbGFjZVtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5yZW1vdmUoKTtyZXR1cm59aWYoeT09PSJtb3JlLWhvdGVscyIpe2NvbnN0IGs9aGU7aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtKKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDooay5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MjB9LHtmb2xkOlM9PlM/LnZpZXc9PT0iaG90ZWxzIj97Li4uUyxob3RlbHM6Wy4uLmsuaG90ZWxzPz9bXSwuLi5TLmhvdGVscz8/W11dLHNob3duOihrLmhvdGVscz8/W10pLmxlbmd0aCsoUy5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0OjAscGxhY2VzOmsucGxhY2VzfTpTfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYoeT09PSJob21lIil7SigibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoeT09PSJtZW1iZXIiKXtpZighUSlyZXR1cm47Y29uc3Qgaz17dmlldzoibWVtYmVyIixtZW1iZXI6UX07YXMoayksZXQoayk7cmV0dXJufWlmKHk9PT0iYXNrLXNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtpZihrKWsuaGlkZGVuPSExO2Vsc2V7Y29uc3QgUz17dmlldzoibWVtYmVyLXNpZ24taW4ifTthcyhTKSxldChTKX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZih5PT09InNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsUz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwhUyl7VigiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufUooInNpZ25JbiIse251bWJlcjprLHN1cm5hbWU6U30pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKHk9PT0iZm9yZ2V0LXByZWZzIil7SigiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgJD10LmdldEF0dHJpYnV0ZSgiZGF0YS1zYXkiKTtpZigkIT09bnVsbCl7T2Uuc2VuZE1lc3NhZ2Uoe3JvbGU6InVzZXIiLGNvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OiR9XX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3Qgc2VuZCB0aGF0IHRvIHRoZSBjaGF0LiIpKTtyZXR1cm59aWYoeT09PSJzaWduLW91dCIpe1E9bnVsbCxKKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKHk9PT0iYXNrLWJvb2siKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpO2smJihrLmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKHk9PT0iYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsUz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ21haWwiKT8udmFsdWUudHJpbSgpPz8iIixOPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiLEs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd0aW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsSD1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAoZmU9PmZlLmRhdGFzZXQuYXNrPz8iIiksTD0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZihTZT17bmFtZTprLGVtYWlsOlMsbm90ZXM6TixhcnJpdmluZ0F0OksscmVxdWVzdHM6SCxyZW1lbWJlcjpMfSwha3x8IVMuaW5jbHVkZXMoIkAiKSl7VihrPydUaGF0IGVtYWlsIGhhcyBubyAiQCIgaW4gaXQgLSB0aGUgY29uZmlybWF0aW9uIG5lZWRzIGFuIGFkZHJlc3MgaXQgY2FuIHJlYWNoLic6IlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwgdG8gc2VuZCB0aGUgY29uZmlybWF0aW9uIHRvLiIpO3JldHVybn1KKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6ayxlbWFpbDpTLC4uLk4/e25vdGVzOk59Ont9LC4uLks/e2Fycml2aW5nQXQ6S306e30sLi4uSC5sZW5ndGg/e3JlcXVlc3RzOkh9Ont9LC4uLkw/e3JlbWVtYmVyUmVxdWVzdHM6ITB9Ont9fSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBhc2sgZm9yIHRob3NlIHJvb21zLiIpKTtyZXR1cm59aWYoeT09PSJib29raW5ncyIpe0ooImxpc3RCb29raW5ncyIse30pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB5b3VyIGJvb2tpbmdzLiIpKTtyZXR1cm59aWYoeT09PSJ0cmlwIil7Sigidmlld1RyaXAiLHt9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGxvYWQgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBUPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik7aWYoVCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLFM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTtrJiZTJiYoUi5jaGVja0luPWssUi5jaGVja091dD1TKSxKKCJnZXRIb3RlbCIse2hvdGVsOlQsLi4ub28oKX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57Y29uc3QgdD1lLnRhcmdldDshdHx8dC5nZXRBdHRyaWJ1dGUoInJvbGUiKSE9PSJidXR0b24ifHxlLmtleSE9PSJFbnRlciImJmUua2V5IT09IiAifHwoZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xpY2soKSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGU9Pntjb25zdCB0PWUudGFyZ2V0O2lmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIW58fCFvKXJldHVybjtpZih0LmlkPT09ImNpIiYmbi52YWx1ZSl7Y29uc3Qgcz1kcyhuLnZhbHVlLDEpO28ubWluPXMsKCFvLnZhbHVlfHxvLnZhbHVlPD1uLnZhbHVlKSYmKG8udmFsdWU9cyl9Ui5jaGVja0luPW4udmFsdWV8fFIuY2hlY2tJbixSLmNoZWNrT3V0PW8udmFsdWV8fFIuY2hlY2tPdXQ7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7ciYmKHIudGV4dENvbnRlbnQ9SWMoKSkscXIoKX0pO2NvbnN0IHNoPShlLHQpPT57dHJ5e2lmKHRoKHQpLGUmJnVzJiZKU09OLnN0cmluZ2lmeShlKT09PXVzKXJldHVybjt6ZT1bXSxtbys9MSx4YygpLGV0KGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxjZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07T2Uub250b29scmVzdWx0PWU9PnNoKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtPZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT5HZihlLFFmKTtPZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9T2UuZ2V0SG9zdENvbnRleHQoKTtHZihlLFFmKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJnNoKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PntjZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0jY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMnB4fS5oZWFke21pbi1oZWlnaHQ6MjhweH0uaG9tZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjB9LmhvbWU6aG92ZXJ7b3BhY2l0eTouNzJ9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5iYWNrYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMXB4IDRweCA4cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LXdpZHRoOjQyJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjdXJzb3I6cG9pbnRlcn0uYmFja2J0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uaGVhZCAuc3Vie2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWlubGluZS1zdGFydDphdXRvO3RleHQtYWxpZ246ZW5kfS5oZWFkdHJpcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo1cHggMTFweCA1cHggOXB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0uaGVhZHRyaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uaGVhZCAuc3ViKy5oZWFkdHJpcHttYXJnaW4taW5saW5lLXN0YXJ0OjB9LmNhcmQuYnVzeXtvcGFjaXR5Oi42Mn0uY2FyZC5idXN5IGJ1dHRvbiwuY2FyZC5idXN5IGlucHV0LC5jYXJkLmJ1c3kgc2VsZWN0e3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1lbWJlcmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEwcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjIwO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0ubWVtYmVyY2hpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5saW5reXtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO2ZvbnQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1saW5rKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5wLXdhc3tmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnAtbWVtYmVye2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LnN1bS5nb29kIHNwYW46bGFzdC1jaGlsZHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5kZW1ve2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQ1fS5kZW1vIGJ7Zm9udC13ZWlnaHQ6NzAwfS5jaXR5Z3JvdXArLmNpdHlncm91cHttYXJnaW4tdG9wOjE0cHh9LmNpdHluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLWJvdHRvbTo4cHh9LmNpdHluYW1lIHNtYWxse2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtvcGFjaXR5Oi43NX0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9LnQtc2hvdCBpbWcsLmhlcm8gaW1ne3otaW5kZXg6MX0udC1icmFuZHt6LWluZGV4OjI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtYmxvY2stc3RhcnQ6OHB4O2luc2V0LWlubGluZS1zdGFydDo4cHg7YmFja2dyb3VuZDojMDAwMDAwNjE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbX0udC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nOjEwcHggMTFweCAxMXB4fS50LW5hbWV7Zm9udC13ZWlnaHQ6NjQwO2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS4zO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjI7bGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDoyLjZlbX0udC13aGVyZXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udC1mb290e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6OHB4O21hcmdpbi10b3A6MnB4fS50LWZyb217Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwfS50LWZyb20gc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMXB4fS5yYXRle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJhdGUgc3Zne2NvbG9yOiNlOGEzM2R9Lmhlcm97cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MjEgLyA4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0uaGVybyAudC1tYXJre2ZvbnQtc2l6ZTo0MHB4fS5oLW5hbWV7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjgwO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07bGluZS1oZWlnaHQ6MS4yNX0uaC13aGVyZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4fS5oLXN1bXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7YmFja2dyb3VuZDp2YXIoLS1iZyl9LnN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMTEycHgsMWZyKSBtaW5tYXgoMTEycHgsMWZyKSBhdXRvIDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmVuZDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnN0YXkgbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS5mbGV4LWRhdGVze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjJweDtzY3JvbGxiYXItd2lkdGg6dGhpbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uZmR7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7bWluLXdpZHRoOjc4cHg7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udDppbmhlcml0O3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcn0uZmQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmZkLWRheXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW07Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6bm93cmFwfS5mZC1wcmljZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjY1MDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5mZC5vbntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtjdXJzb3I6ZGVmYXVsdH0uZmQub24gLmZkLWRheXtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO29wYWNpdHk6Ljg1fS5mZC5iZXN0e2JvcmRlci1jb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5mZC5iZXN0IC5mZC1wcmljZSwuZmQuYmVzdCAuZmQtZGF5e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmZkLm91dCAuZmQtcHJpY2V7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC13ZWlnaHQ6NTAwfS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5sZWdze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ubGVne2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6OXB4IDExcHh9LmxlZy53YXN7b3BhY2l0eTouNzJ9LmxlZy53YXMgLmxlZ3Z7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ubGVna3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5sZWd2e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY0MDttYXJnaW4tdG9wOjJweH0ubGVnbXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6MnB4fS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS53YXJubm90ZXtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjlweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS50aWxlLm92ZXJ7b3BhY2l0eTouODJ9LmFza2VkLWxpbmV7Zm9udC1zdHlsZTppdGFsaWN9LmFza2Vke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5hc2tlZCBie2ZvbnQtd2VpZ2h0OjcyMDtjb2xvcjp2YXIoLS1mZyl9LmFza2VkLmZsYWd7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0td2Fybil9LmFza2VkLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX0uYXNrc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmFza3MtdHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwLmFza3tjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweH0uY2hpcC5hc2tbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MX0uY21wLWhlYWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZzoxMHB4IDExcHggMTJweH0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fS5zdWdnZXN0e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21hcmdpbi10b3A6MTRweH0uc3VnZ2VzdCAuY2hpcHtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHggMTFweDtjb2xvcjp2YXIoLS1mZyl9LnN1Z2dlc3QgLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LnN1Z2dlc3QgLmNoaXA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZm9ybSBsYWJlbC5yZW1lbWJlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZvbnQtd2VpZ2h0OjQwMDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MH0uZm9ybSBsYWJlbC5yZW1lbWJlciBpbnB1dHttYXJnaW46MnB4IDAgMH0ucGxhY2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwLnBsYWNle2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweCAxMHB4O2NvbG9yOnZhcigtLWZnKX0uY2hpcC5wbGFjZSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNoaXAucGxhY2U6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmNoaXAucGxhY2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
|
|
5
|
+
export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgY2Y9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLHVmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxPYz17fSxsZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKGg9PlByb21pc2UucmVzb2x2ZShoKS50aGVuKHY9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnZ9KSx2PT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp2fSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9dWYobCxvKSxsIGluIE9jKXJldHVybjtPY1tsXT0hMDtjb25zdCBoPWwuZW5kc1dpdGgoIi5jc3MiKSx2PWg/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgJD1hLmxlbmd0aC0xOyQ+PTA7JC0tKXtjb25zdCBUPWFbJF07aWYoVC5ocmVmPT09bCYmKCFofHxULnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke3Z9YCkpcmV0dXJuO2NvbnN0IHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKHkucmVsPWg/InN0eWxlc2hlZXQiOmNmLGh8fCh5LmFzPSJzY3JpcHQiKSx5LmNyb3NzT3JpZ2luPSIiLHkuaHJlZj1sLHUmJnkuc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5KSxoKXJldHVybiBuZXcgUHJvbWlzZSgoJCxUKT0+e3kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsJCkseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PlQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBkZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBwZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBibygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIGhmKGUpe31mdW5jdGlvbiBmZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIG1mKGUpe31mdW5jdGlvbiBXcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBHcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+bXMobikpLmpvaW4odCl9ZnVuY3Rpb24gcm8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIGdme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIG5ldyBnZihlKX1mdW5jdGlvbiBocyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBBZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gd3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgUmM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gJHUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1SYylyZXR1cm4gbz09PXZvaWQgMCYmKG89UmMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHZmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gV2UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB5byhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBUZShlKXtyZXR1cm4geW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gU3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBXZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB6dShlLHQsbil7dCBpbiBlP1dlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gRmUoZSx0LG4sbyl7Y29uc3Qgcj1UZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9TdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTp6dShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBiZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/U3UoZSxuLCgpPT50W25dKTp6dShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBuZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiB5ZihlKXtyZXR1cm4gbmUoZS5fem9kLmRlZil9ZnVuY3Rpb24gX2YoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24ga2YoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIHdmKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gVHUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIEl1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgZnM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IFB1PVV0KCgpPT57aWYocmUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gTmUoZSl7aWYobnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKG50KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gX28oZSl7cmV0dXJuIE5lKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gJGYoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgU2Y9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LHNvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSkseHU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBWKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiBfKGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiB6ZihlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBtcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBFdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEN1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxPdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gUnUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gRmUocyxlLGtvKGUsdCkpLFYoZSxuZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBrbyhlLHQpe2NvbnN0IG49VGUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBBdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoa28oZSx0KSksaT17fTtyZXR1cm4gRmUoaSxlLFJlZmxlY3Qub3duS2V5cyhUZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLFYoZSxuZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBadShlLHQpe2lmKCFOZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1UZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gVihlLG5lKGUuX3pvZC5kZWYse3NoYXBlOk51KGUsdCl9KSl9ZnVuY3Rpb24gTnUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksYmYobix0KSxufWZ1bmN0aW9uIGp1KGUsdCl7aWYoIU5lKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBWKGUsbmUoZS5fem9kLmRlZix7c2hhcGU6TnUoZSx0KX0pKX1mdW5jdGlvbiBNdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksRmUobix0LFJlZmxlY3Qub3duS2V5cyhUZSh0KSkpO2NvbnN0IG89bmUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBWKGUsbyl9ZnVuY3Rpb24gUXIoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KGtvKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBGZShjLHQsUmVmbGVjdC5vd25LZXlzKFRlKHQpKSxlJiYoKHUsbCk9PmEmJiFhLmhhcyhsKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLFYodCxuZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBxdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoa28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIEZlKHIsdCxSZWZsZWN0Lm93bktleXMoVGUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFYodCxuZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGllKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRHUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBtZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIFllKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIFlyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBiZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOlllKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9ZZShzPy4oZSkpPz9ZZSh0Py5lcnJvcj8uKGUpKT8/WWUobi5jdXN0b21FcnJvcj8uKGUpKT8/WWUobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gd28oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IFRmPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uICRvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIVRmLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gU28oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIEx1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gb3QoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBJZihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gVXUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIEh1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gUGYoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gVXUodCtuKX1mdW5jdGlvbiB4ZihlKXtyZXR1cm4gSHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIEVmKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBDZihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBPZntjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIEZ1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6UmYoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBQZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiB6byhlLHQsbil7cmV0dXJuIFBlKGUsdCxuLCExKX1mdW5jdGlvbiBIdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gUGUodGhpcyxuLG8odGhpcykpfSxzZXQocil7UGUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIFJmKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpQZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe1BlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBBZihlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IFVyLFJlPSExO2NvbnN0IFpmPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7UmU9ITB9fTtmdW5jdGlvbiBDKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmVXIhPT1lLl96b2Qpe1VyPXZvaWQgMDtyZXR1cm59VXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LFpmKTtjb25zdCByPVJlO1JlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIFJlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksUmU9UmV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxSZT1SZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gQnUoZSx0LG4sbyl7Y29uc3Qgcj1BZihlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IFZ1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gZ3MoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtWdV09ITAsdH1jb25zdCB2cz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6T3UsQ09OU1RBTlRfQ0FUQ0g6VnUsQ2xhc3M6T2YsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6Q3UsYWJvcnRlZDppZSxhbGxvd3NFdmFsOlB1LGFzc2VydDptZixhc3NlcnRFcXVhbDpkZixhc3NlcnRJczpoZixhc3NlcnROZXZlcjpmZixhc3NlcnROb3RFcXVhbDpwZixhc3NpZ25Qcm9wOldlLGF0dGFjaFNjaGVtYTpZcixiYXNlNjRUb1VpbnQ4QXJyYXk6VXUsYmFzZTY0dXJsVG9VaW50OEFycmF5OlBmLGNhY2hlZDpVdCxjYXB0dXJlU3RhY2tUcmFjZTpmcyxjbGVhbkVudW06SWYsY2xlYW5SZWdleDpBZSxjbG9uZTpWLGNsb25lRGVmOnlmLGNvZGVQb2ludExlbmd0aDokbyxjb25zdGFudENhdGNoOmdzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6emYsZGVmaW5lTGF6eTokdSxkZWZpbmVMYXp5SW50ZXJuYWw6QyxkZXJpdmVkOkh0LGVzYzpUdSxlc2NhcGVSZWdleDpJZSxleHBsaWNpdGx5QWJvcnRlZDpEdSxleHRlbmQ6WnUsZmluYWxpemVJc3N1ZTpiZSxmbG9hdFNhZmVSZW1haW5kZXI6d3UsZ2V0RWxlbWVudEF0UGF0aDpfZixnZXRFbnVtVmFsdWVzOldyLGdldExlbmd0aGFibGVPcmlnaW46U28sZ2V0UGFyc2VkVHlwZTpTZixnZXRTaXphYmxlT3JpZ2luOndvLGhleFRvVWludDhBcnJheTpFZixoaWRlOnpvLGluc3RhbGxMYXp5UHJvcDpCdSxpc09iamVjdDpudCxpc1BsYWluT2JqZWN0Ok5lLGlzc3VlOm90LGpvaW5WYWx1ZXM6R3IsanNvblN0cmluZ2lmeVJlcGxhY2VyOnJvLG1lbWJlcnM6RnUsbWVyZ2U6TXUsbWVyZ2VEZWZzOm5lLG5vcm1hbGl6ZVBhcmFtczpfLG51bGxpc2g6aHMsbnVtS2V5czokZixvYmplY3RDbG9uZTp2ZixvbWl0OkF1LG9wdGlvbmFsS2V5czpFdSxvd246UGUscGFyc2VkVHlwZTpMdSxwYXJ0aWFsOlFyLHBpY2s6UnUscHJlZml4SXNzdWVzOm1lLHByaW1pdGl2ZVR5cGVzOnh1LHByb21pc2VBbGxPYmplY3Q6a2YscHJvcGVydHlLZXlUeXBlczpzbyxyYW5kb21TdHJpbmc6d2YscmF3U2hhcGU6eW8scmVxdWlyZWQ6cXUsc2FmZUV4dGVuZDpqdSxzaGFsbG93Q2xvbmU6X28sc2x1Z2lmeTpJdSxzdHJpbmdpZnlQcmltaXRpdmU6bXMsdG9ab2Q6Ym8sdWludDhBcnJheVRvQmFzZTY0Okh1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDp4Zix1aW50OEFycmF5VG9IZXg6Q2YsdW53cmFwTWVzc2FnZTpZZX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgQWM7Y29uc3QgYnM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLEhyPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFpjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIE5mKGUpe2NvbnN0IHQ9WmM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBaYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKHYpe3RoaXMuZGVmPXYsdGhpcy5jb25zdHI9aCx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyh2LGIpe2lmKHYuX3pvZCl7aWYodi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7SHIudmFsdWU9bmV3IHMoYik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LCJfem9kIixIcil9ZmluYWxseXtIci52YWx1ZT12b2lkIDB9fWlmKHYuX3pvZC50cmFpdHMuYWRkKGUpLHQodixiKSxhKXtjb25zdCAkPU9iamVjdC5nZXRQcm90b3R5cGVPZih2KSxUPXYuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBrPSQ7Zm9yKDtrJiZrIT09VDspaz1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoayk7Y29uc3QgUz1rPz8kO2EuaGFzKFMpfHwoYS5hZGQoUyksRnUoUyxpKSl9Y29uc3QgeT1oLnByb3RvdHlwZTtmb3IoY29uc3QgJCBpbiB5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LCQpJiYoJCBpbiB2fHwodlskXT15WyRdLmJpbmQodikpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGwgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkobCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBoKHYpe2NvbnN0IGI9bz8uUGFyZW50P05mKGwpOnRoaXM7YyhiLHYpO2NvbnN0IHk9Yi5fem9kLmRlZmVycmVkO2lmKHkpe2Zvcihjb25zdCBUIG9mIHkpVCgpO2IuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3QgJD1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gJCYmJChiKSxifXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOnY9Pm8/LlBhcmVudCYmdiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOnY/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIm5hbWUiLHt2YWx1ZTplfSksaH1jb25zdCB5cz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFplIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFRvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShBYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhBYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IHJlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIEcoZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24ocmUsZSkscmV9ZnVuY3Rpb24gamYoKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLHJvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gTWYoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBxZj17Z2V0OmpmLHNldDpNZixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sRnI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxOYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxKdT0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixGci52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLEZyKSxGci52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLHFmKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtOYy5oYXMobil8fChOYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0sS3U9cCgiJFpvZEVycm9yIixKdSkscGU9cCgiJFpvZEVycm9yIixKdSx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIERmKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gSW8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9EZihuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gUG8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgYz1uLHU9MDtmb3IoO3U8YS5sZW5ndGg7KXtjb25zdCBsPWFbdV0saD11PT09YS5sZW5ndGgtMTtpZihsPT09Il9lcnJvcnMiKXtoJiZjLl9lcnJvcnMucHVzaCh0KGkpKSx1Kys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IHY9Y1tsXTtoJiZ2Ll9lcnJvcnMucHVzaCh0KGkpKSxjPXYsdSsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIF9zKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcChjPT5vKHtpc3N1ZXM6Y30sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IGM9Wy4uLnMsLi4uYS5wYXRoXTtpZihjLmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IHU9bixsPTA7Zm9yKDtsPGMubGVuZ3RoOyl7Y29uc3QgaD1jW2xdLHY9bD09PWMubGVuZ3RoLTE7dHlwZW9mIGg9PSJzdHJpbmciPyh1LnByb3BlcnRpZXM/Pyh1LnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LnByb3BlcnRpZXMsaCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3BlcnRpZXMsaCx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx1PXUucHJvcGVydGllc1toXSk6KHUuaXRlbXM/Pyh1Lml0ZW1zPVtdKSwoaT11Lml0ZW1zKVtoXT8/KGlbaF09e2Vycm9yczpbXX0pLHU9dS5pdGVtc1toXSksdiYmdS5lcnJvcnMucHVzaCh0KGEpKSxsKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBXdShlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24ga3MoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7V3Uoby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24geG8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBGdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+YmUodSxpLEcoKSkpKTt0aHJvdyBmcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LFhyPUZ0KHBlKSxCdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+YmUodSxpLEcoKSkpKTt0aHJvdyBmcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LGVzPUJ0KHBlKSxWdD1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP1F1KGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sR3U9VnQocGUpO2Z1bmN0aW9uIFF1KGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+YmUocixuLEcoKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IEp0PWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/UXUoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxMZj1KdChwZSksVWY9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLEhmPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksRW89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1VZilyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIEZmKGUsdCxuKX0pO2Z1bmN0aW9uIEZmKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW0hmXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IENvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sd3M9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEseG8obixpKSl9O3JldHVybiBufSxCZj13cyhwZSksJHM9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMseG8obixpKSk7cmV0dXJuIG59LFZmPSRzKHBlKSxTcz1lPT57Y29uc3QgdD1CdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLHhvKG4saSkpfTtyZXR1cm4gbn0sSmY9U3MocGUpLHpzPWU9Pntjb25zdCB0PUJ0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMseG8obixpKSk7cmV0dXJuIG59LEtmPXpzKHBlKSxUcz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBWdChlKSh0LG4scil9LFdmPVRzKHBlKSxJcz1lPT4odCxuLG8pPT5WdChlKSh0LG4sbyksR2Y9SXMocGUpLFBzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gSnQoZSkodCxuLHIpfSxRZj1QcyhwZSkseHM9ZT0+YXN5bmModCxuLG8pPT5KdChlKSh0LG4sbyksWWY9eHMocGUpLFl1PS9eW2NDXVswLTlhLXpdezYsfSQvLFh1PS9eWzAtOWEtel0rJC8sZWw9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sdGw9L15bMC05YS12QS1WXXsyMH0kLyxubD0vXltBLVphLXowLTldezI3fSQvLG9sPS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBybChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3Qgc2w9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sWGY9L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxpbD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8scnQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLGVtPXJ0KDQpLHRtPXJ0KDYpLG5tPXJ0KDcpLGFsPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLG9tPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLHJtPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLGNsPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LHNtPWNsLGltPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGFtPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24gdWwoKXtyZXR1cm4gbmV3IFJlZ0V4cChhbSwidSIpfWNvbnN0IGxsPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxkbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLHBsPWU9Pntjb25zdCB0PUllKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LGhsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxmbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyxjbT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyx1bT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8sbWw9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLGdsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxFcz0vXmh0dHBzPyQvLHZsPS9eXCtbMS05XVxkezYsMTR9JC8sQ3M9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLGJsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLE9zPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLHlsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiBsbShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgX2w9bG0oeWwpO2Z1bmN0aW9uIHRzKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24ga2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke3RzKGUpfSRgKX1mdW5jdGlvbiB3bChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7dHMoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHt0cyh7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHt5bH1UKD86JHtvfSkkYCl9Y29uc3QgJGw9L15bXHNcU117MCx9JC8sU2w9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0semw9L14tP1xkK24/JC8sVGw9L14tP1xkKyQvLE9vPS9eLT9cZCsoPzpcLlxkKyk/JC8sSWw9L14oPzp0cnVlfGZhbHNlKSQvaSxQbD0vXm51bGwkL2kseGw9L151bmRlZmluZWQkL2ksRWw9L15bXkEtWl0qJC8sQ2w9L15bXmEtel0qJC8sT2w9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBLdChlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IGRtPS9eWzAtOWEtZkEtRl17MzJ9JC8scG09S3QoMjIsIj09IiksaG09V3QoMjIpLGZtPS9eWzAtOWEtZkEtRl17NDB9JC8sbW09S3QoMjcsIj0iKSxnbT1XdCgyNyksdm09L15bMC05YS1mQS1GXXs2NH0kLyxibT1LdCg0MywiPSIpLHltPVd0KDQzKSxfbT0vXlswLTlhLWZBLUZdezk2fSQvLGttPUt0KDY0LCIiKSx3bT1XdCg2NCksJG09L15bMC05YS1mQS1GXXsxMjh9JC8sU209S3QoODYsIj09Iiksem09V3QoODYpLFJvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6JGwsYmFzZTY0OmNtLGJhc2U2NHVybDp1bSxiaWdpbnQ6emwsYm9vbGVhbjpJbCxicm93c2VyRW1haWw6aW0sY2lkcnY0OmhsLGNpZHJ2NjpmbCxjcmVkaXRDYXJkOkNzLGN1aWQ6WXUsY3VpZDI6WHUsY3VycmVuY3lDb2RlOmJsLGRhdGU6X2wsZGF0ZXRpbWU6d2wsZG9tYWluOmdsLGR1cmF0aW9uOnNsLGUxNjQ6dmwsZW1haWw6YWwsZW1vamk6dWwsZXh0ZW5kZWREdXJhdGlvbjpYZixndWlkOmlsLGhleDpPbCxob3N0bmFtZTptbCxodG1sNUVtYWlsOm9tLGh0dHBQcm90b2NvbDpFcyxpYmFuOk9zLGlkbkVtYWlsOnNtLGludGVnZXI6VGwsaXB2NDpsbCxpcHY2OmRsLGtzdWlkOm5sLGxvd2VyY2FzZTpFbCxtYWM6cGwsbWQ1X2Jhc2U2NDpwbSxtZDVfYmFzZTY0dXJsOmhtLG1kNV9oZXg6ZG0sbmFub2lkOm9sLG5hbm9pZE9mTGVuZ3RoOnJsLG51bGw6UGwsbnVtYmVyOk9vLHJmYzUzMjJFbWFpbDpybSxzaGExX2Jhc2U2NDptbSxzaGExX2Jhc2U2NHVybDpnbSxzaGExX2hleDpmbSxzaGEyNTZfYmFzZTY0OmJtLHNoYTI1Nl9iYXNlNjR1cmw6eW0sc2hhMjU2X2hleDp2bSxzaGEzODRfYmFzZTY0OmttLHNoYTM4NF9iYXNlNjR1cmw6d20sc2hhMzg0X2hleDpfbSxzaGE1MTJfYmFzZTY0OlNtLHNoYTUxMl9iYXNlNjR1cmw6em0sc2hhNTEyX2hleDokbSxzdHJpbmc6U2wsdGltZTprbCx1bGlkOmVsLHVuZGVmaW5lZDp4bCx1bmljb2RlRW1haWw6Y2wsdXBwZXJjYXNlOkNsLHV1aWQ6cnQsdXVpZDQ6ZW0sdXVpZDY6dG0sdXVpZDc6bm0seGlkOnRsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEY9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLFJzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWhzKHQpJiZ0LnNpemUhPT12b2lkIDB9LEFzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWhzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0saW89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sWnM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57Ri5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTnM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57Ri5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxSbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTp3dShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEFsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntGLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109Q3VbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWmw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0YuaW5pdChlLHQpO2NvbnN0W24sb109T3VbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxObD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO0YuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49UnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46d28ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksamw9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtGLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOndvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTWw9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtGLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjp3byhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHFsPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtGLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUFzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtPyRvKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9U28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRGw9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO0YuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49QXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyPyRvKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9U28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxMbD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47Ri5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1BcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/JG8ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9U28ociksYz1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLmM/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEd0PXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO0YuaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLFVsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e0d0LmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEhsPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RWwpLEd0LmluaXQoZSx0KX0pLEZsPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Q2wpLEd0LmluaXQoZSx0KX0pLEJsPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e0YuaW5pdChlLHQpO2NvbnN0IG49SWUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFZsPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57Ri5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtJZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEpsPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e0YuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke0llKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGFvKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ubWUobixlLmlzc3VlcykpfWNvbnN0IEtsPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PmFvKHIsbix0LnByb3BlcnR5KSk7YW8obyxuLHQucHJvcGVydHkpfX0pLFdsPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57Ri5pbml0KGUsdCksem8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKGMudGhlbih1PT5hbyh1LG8saSkpKSk6YW8oYyxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxHbD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntGLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFFsPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBZbHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IFhsPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0sST1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249WGw7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsYyx1KT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgbD1pZShhKSxoO2Zvcihjb25zdCB2IG9mIGMpe2lmKHYuX3pvZC5kZWYud2hlbil7aWYoRHUoYSl8fCF2Ll96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihsKWNvbnRpbnVlO2NvbnN0IGI9YS5pc3N1ZXMubGVuZ3RoLHk9di5fem9kLmNoZWNrKGEpO2lmKHkgaW5zdGFuY2VvZiBQcm9taXNlJiZ1Py5hc3luYz09PSExKXRocm93IG5ldyBaZTtpZihofHx5IGluc3RhbmNlb2YgUHJvbWlzZSloPShoPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgeSxhLmlzc3Vlcy5sZW5ndGghPT1iJiYoWXIoYS5pc3N1ZXMsYixlKSxsfHwobD1pZShhLGIpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PWIpY29udGludWU7WXIoYS5pc3N1ZXMsYixlKSxsfHwobD1pZShhLGIpKX19cmV0dXJuIGg/aC50aGVuKCgpPT5hKTphfSxpPShhLGMsdSk9PntpZihpZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgbD1zKGMscix1KTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gbC50aGVuKGg9PmUuX3pvZC5wYXJzZShoLHUpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGwsdSl9O2UuX3pvZC5ydW49KGEsYyk9PntpZihjLnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLGMpO2lmKGMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgbD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4uYyxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGwgaW5zdGFuY2VvZiBQcm9taXNlP2wudGhlbihoPT5pKGgsYSxjKSk6aShsLGEsYyl9Y29uc3QgdT1lLl96b2QucGFyc2UoYSxjKTtpZih1IGluc3RhbmNlb2YgUHJvbWlzZSl7aWYoYy5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gdS50aGVuKGw9PnMobCxyLGMpKX1yZXR1cm4gcyh1LHIsYyl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIHpvKHRoaXMsIn5zdGFuZGFyZCIsanModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtQZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLGVkPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+YmUobix0LEcoKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gVG0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIGVkKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBqcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIGVkKG8sbil9Y2F0Y2h7fXJldHVybiBUbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBRdD1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/JGwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxEPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57R3QuaW5pdChlLHQpLFF0LmluaXQoZSx0KX0pLHRkPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1pbCksRC5pbml0KGUsdCl9KSxuZD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJ0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1ydCgpKTtELmluaXQoZSx0KX0pLG9kPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YWwpLEQuaW5pdChlLHQpfSksTXM9MSxOdD0yO2Z1bmN0aW9uIHFzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gcmQoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9xcyhlKXx8TnQ6c2QoZSx0KX1mdW5jdGlvbiBzZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09RXMuc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIE1zO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P050fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBOdH19Y29uc3QgSW09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gbnMoZSl7cmV0dXJuIGUucmVwbGFjZShJbSwiIil9ZnVuY3Rpb24gaWQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gYWQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgY2Q9cCgiJFpvZFVSTCIsKGUsdCk9PntELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9cmQobyx0KTtpZihyPT09TXMpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09TnQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPW5zKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhaWQocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIWFkKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOm5zKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLHVkPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dWwoKSksRC5pbml0KGUsdCl9KSxsZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/b2w6cmwodC5sZW5ndGgpKSxELmluaXQoZSx0KX0pLGRkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ZdSksRC5pbml0KGUsdCl9KSxwZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVh1KSxELmluaXQoZSx0KX0pLGhkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1lbCksRC5pbml0KGUsdCl9KSxmZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj10bCksRC5pbml0KGUsdCl9KSxtZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW5sKSxELmluaXQoZSx0KX0pLGdkPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49d2wodCkpLEQuaW5pdChlLHQpfSksdmQ9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPV9sKSxELmluaXQoZSx0KX0pLGJkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1rbCh0KSksRC5pbml0KGUsdCl9KSx5ZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXNsKSxELmluaXQoZSx0KX0pLF9kPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1sbCksRC5pbml0KGUsdCl9KSxQbT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gRHMoZSl7cmV0dXJuIFBtLnRlc3QoZSk/cXMoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBrZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZGwpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RHMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksd2Q9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cGwodC5kZWxpbWl0ZXIpKSxELmluaXQoZSx0KX0pLCRkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWhsKSxELmluaXQoZSx0KX0pO2Z1bmN0aW9uIFNkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpEcyhuKX1jb25zdCB6ZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1mbCksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntTZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIExzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgVGQ9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLElkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVRkKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0xzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVXM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIFBkKGUpe2lmKCFVcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIExzKG4pfWNvbnN0IHhkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVzKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1BkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRWQ9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXZsKSxELmluaXQoZSx0KX0pLHhtPS9bLSBdL2c7ZnVuY3Rpb24gRW0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gQ2QoZSl7cmV0dXJuIENzLnRlc3QoZSk/RW0oZS5yZXBsYWNlKHhtLCIiKSk6ITF9Y29uc3QgT2Q9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUNzKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0NkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBDbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBSZChlKXtyZXR1cm4gT3MudGVzdChlKT9DbShlKTohMX1jb25zdCBBZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49T3MpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57UmQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gWmQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBOZD1wKCIkWm9kSldUIiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57WmQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxqZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEhzPXAoIiRab2ROdW1iZXIiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49T28sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksTWQ9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntBbC5pbml0KGUsdCksSHMuaW5pdChlLHQpfSksRnM9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49SWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxCcz1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXpsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSkscWQ9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntabC5pbml0KGUsdCksQnMuaW5pdChlLHQpfSksRGQ9cCgiJFpvZFN5bWJvbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksTGQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj14bCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxVZD1wKCIkWm9kTnVsbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1QbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksSGQ9cCgiJFpvZEFueSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLEZkPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksQmQ9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksVmQ9cCgiJFpvZFZvaWQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxKZD1wKCIkWm9kRGF0ZSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIGpjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ubWUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBLZD1wKCIkWm9kQXJyYXkiLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1yZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7YysrKXtjb25zdCB1PXNbY10sbD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2gobC50aGVuKGg9PmpjKGgsbyxjKSkpO2Vsc2UgaWYoamMobCxvLGMpLGEmJmwuaXNzdWVzLmxlbmd0aCE9PTAmJmllKGwpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGNvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi5tZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IE9tPVtdO2Z1bmN0aW9uIFdkKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpPbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9RXUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBHZChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLGM9ci5rZXlTZXQsdT1yLmNhdGNoYWxsLl96b2QsbD11LmRlZi50eXBlLGg9dS5vcHRpbix2PXUub3B0b3V0O2xldCBiPTA7Zm9yKGNvbnN0IHkgaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09Yil7aWYoaWUobixiKSlicmVhaztiPW4uaXNzdWVzLmxlbmd0aH1pZihjLmhhcyh5KSljb250aW51ZTtpZih5PT09Il9fcHJvdG9fXyIpe2w9PT0ibmV2ZXIiJiZhLnB1c2goeSk7Y29udGludWV9aWYobD09PSJuZXZlciIpe2EucHVzaCh5KTtjb250aW51ZX1jb25zdCAkPXUucnVuKHt2YWx1ZTp0W3ldLGlzc3VlczpbXX0sbyk7JCBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKCQudGhlbihUPT5jbyhULG4seSx0LGgsdikpKTpjbygkLG4seSx0LGgsdil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBRZD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCB1PSgpPT57Y29uc3QgbD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmx9KSx1LnJhdz1sLGx9O3UucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0OnV9KX1jb25zdCByPVV0KCgpPT5XZCh0KSk7QyhlLCJwcm9wVmFsdWVzIix1PT57Y29uc3QgbD11LmRlZi5zaGFwZSxoPXt9O2Zvcihjb25zdCB2IGluIGwpe2NvbnN0IGI9bFt2XS5fem9kO2lmKGIudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCx2KXx8V2UoaCx2LG5ldyBTZXQpO2Zvcihjb25zdCB5IG9mIGIudmFsdWVzKWhbdl0uYWRkKHkpO2Iub3B0aW4hPT12b2lkIDAmJmhbdl0uYWRkKHZvaWQgMCl9fXJldHVybiBofSk7Y29uc3Qgcz1udCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgYz1yZS5tZW1vaXplcjtjPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPSh1LGwpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgaD11LnZhbHVlO2lmKCFzKGgpKXJldHVybiB1Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OmgsaW5zdDplfSksdTt1LnZhbHVlPWM/Yy5hbGxvYyhlLHUse30sbCk6e307Y29uc3Qgdj1bXSxiPWEuc2hhcGUseT1sPy5hYm9ydEVhcmx5O2xldCAkPXUuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgVCBvZiBhLmFsbEtleXMpe2lmKHkmJnUuaXNzdWVzLmxlbmd0aCE9PSQpe2lmKGllKHUsJCkpYnJlYWs7JD11Lmlzc3Vlcy5sZW5ndGh9aWYoVD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGs9YltUXSxTPWsuX3pvZC5vcHRpbixOPWsuX3pvZC5vcHRvdXQsSz1rLl96b2QucnVuKHt2YWx1ZTpoW1RdLGlzc3VlczpbXX0sbCk7SyBpbnN0YW5jZW9mIFByb21pc2U/di5wdXNoKEsudGhlbihIPT5jbyhILHUsVCxoLFMsTikpKTpjbyhLLHUsVCxoLFMsTil9cmV0dXJuIGk/R2QodixoLHUsbCxyLnZhbHVlLGUseT09PSEwKTp2Lmxlbmd0aD9Qcm9taXNlLmFsbCh2KS50aGVuKCgpPT51KTp1fX0pLFlkPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57UWQuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89VXQoKCk9PldkKHQpKSxyPXJlLm1lbW9pemVyLHM9Yj0+e2NvbnN0IHk9by52YWx1ZSwkPXkuc3ltYm9sS2V5cyxUPW5ldyBZbChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6YixpbnN0OmUsbWVtbzpyLHN5bXM6JH0pLGs9SD0+YHNoYXBlWyR7SH1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7SH1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFM9KEgsTCk9PmAKICAgICAgICAgIGxldCAke0h9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7SH0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7SH0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7TH0sIC4uLmlzcy5wYXRoXSA6IFske0x9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0h9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0h9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gO1Qud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBOPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IEs9MDtmb3IoY29uc3QgSCBvZiB5LmFsbEtleXMpTltIXT1ga2V5XyR7SysrfWA7VC53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBIIG9mIHkuYWxsS2V5cyl7aWYoSD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IEw9TltIXSxmZT10eXBlb2YgSD09InN5bWJvbCI/YHN5bXNbJHskLmluZGV4T2YoSCl9XWA6VHUoSCksRHI9YCR7ZmV9IGluIGlucHV0YCxFYz1iW0hdLExyPUVjPy5fem9kPy5vcHRpbixDYz1MciE9PXZvaWQgMCxzZj1FYz8uX3pvZD8ub3B0b3V0PT09Im9wdGlvbmFsIjtpZihULndyaXRlKGBjb25zdCAke0x9ID0gJHtrKGZlKX07YCksQ2MmJnNmKXtjb25zdCBhZj1Mcj09PSJvcHRpb25hbCI/YCR7TH1fcHJlc2VudGA6YCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0x9X3ByZXNlbnRgO1Qud3JpdGUoYAogICAgICAgIGNvbnN0ICR7TH1fcHJlc2VudCA9ICR7RHJ9OwogICAgICAgIGlmICghJHtMfS5pc3N1ZXMubGVuZ3RoIHx8ICR7TH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7UyhMLGZlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHthZn0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBDYz8oVC53cml0ZShgCiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7UyhMLGZlKX0KICAgICAgICB9CiAgICAgIGApLExyPT09ImRlZmF1bHRlZCI/VC53cml0ZShgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7YCk6VC53cml0ZShgCiAgICAgICAgaWYgKCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0RyfSkgewogICAgICAgICAgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6VC53cml0ZShgCiAgICAgICAgY29uc3QgJHtMfV9wcmVzZW50ID0gJHtEcn07CiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7UyhMLGZlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0x9X3ByZXNlbnQgJiYgISR7TH0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7ZmV9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7TH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7ZmV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuIFQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksVC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksVC5jb21waWxlKCl9O2xldCBpO2NvbnN0IGE9bnQsYz0hcmUuaml0bGVzcyxsPWMmJlB1LnZhbHVlLGg9dC5jYXRjaGFsbDtsZXQgdjtlLl96b2QucGFyc2U9KGIseSk9Pnt2Pz8odj1vLnZhbHVlKTtjb25zdCAkPWIudmFsdWU7cmV0dXJuIGEoJCk/YyYmbCYmeT8uYXN5bmM9PT0hMSYmeS5qaXRsZXNzIT09ITA/KGl8fChpPXModC5zaGFwZSkpLGI9aShiLHkpLGg/R2QoW10sJCxiLHksdixlLHk/LmFib3J0RWFybHk9PT0hMCk6Yik6bihiLHkpOihiLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OiQsaW5zdDplfSksYil9fSk7ZnVuY3Rpb24gTWMoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFpZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmJlKGksbyxHKCkpKSl9KSx0KX1jb25zdCBBbz1wKCIkWm9kVW5pb24iLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksQyhlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEMoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksQyhlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+QWUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2kucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5NYyhhLG8sZSxyKSk6TWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gcWMoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT5iZShpLG8sRygpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBYZD1wKCIkWm9kWG9yIiwoZSx0KT0+e0FvLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7YyBpbnN0YW5jZW9mIFByb21pc2U/KGkucHVzaChjKSxzPSEwKTppLnB1c2goYyl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5xYyhhLG8sZSxyKSk6cWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gVnMoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPWVwKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIGVwKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgdHA9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxBby5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7QyhlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgaT0wO2Zvcihjb25zdCBhIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGM9YS5fem9kLnByb3BWYWx1ZXM7aWYoIWN8fE9iamVjdC5rZXlzKGMpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihhKX0iYCk7Y1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmkrKztmb3IoY29uc3RbdSxsXW9mIE9iamVjdC5lbnRyaWVzKGMpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8V2Uocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBoIG9mIGwpc1t1XS5hZGQoaCl9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZpPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGk9eW8oci5fem9kLmRlZik7aWYoaSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1VdCgoKT0+ZXAodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighbnQoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6aSxpbnN0OmV9KSxyO2NvbnN0IGE9aT8uW3QuZGlzY3JpbWluYXRvcl0sYz1vLnZhbHVlLmdldChhKTtyZXR1cm4gYyYmKGEhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/Yy5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6aSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLG5wPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksaT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxpIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxpXSkudGhlbigoW2MsdV0pPT5EYyhuLGMsdSkpOkRjKG4scyxpKX19KTtmdW5jdGlvbiB1byhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKE5lKGUpJiZOZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaT11byhlW3NdLHRbc10pO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5pLm1lcmdlRXJyb3JQYXRoXX07cltzXT1pLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10saT11byhyLHMpO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5pLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGkuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBEYyhlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxpPSh1LGwpPT57bGV0IGg7aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLGg9dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCB2PVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKHYpfHxzLnNldCh2LHUpLGg9W3ZdfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IHYgb2YgaClvLmhhcyh2KXx8by5zZXQodix7fSksby5nZXQodilbbF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWkodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWkodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGE9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGEubGVuZ3RoKXtjb25zdCB1PXI/YS5maWx0ZXIobD0+ci5rZXlzLmluY2x1ZGVzKGwpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgbCBvZiBhKSF1LmluY2x1ZGVzKGwpJiZzLmhhcyhsKSYmZS5pc3N1ZXMucHVzaChzLmdldChsKSl9Y29uc3QgYz11byh0LnZhbHVlLG4udmFsdWUpO2lmKCFjLnZhbGlkKXtpZihpZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGMubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWMuZGF0YSxlfWNvbnN0IEpzPXAoIiRab2RUdXBsZSIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1yZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBhPVtdLGM9TGMobiwib3B0aW4iKSx1PUxjKG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGkubGVuZ3RoPGMpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpjLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7aS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgbD1uZXcgQXJyYXkobi5sZW5ndGgpLGg9dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCB2PSExO2ZvcihsZXQgYj0wO2I8bi5sZW5ndGg7YisrKXtjb25zdCB5PW5bYl0uX3pvZC5ydW4oe3ZhbHVlOmlbYl0saXNzdWVzOltdfSxzKTt5IGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goeS50aGVuKCQ9PntsW2JdPSR9KSk6KGxbYl09eSxoJiYhdiYmeS5pc3N1ZXMubGVuZ3RoJiYodj1pZSh5KSkpfWlmKHQucmVzdCYmIXYpe2xldCBiPW4ubGVuZ3RoLTE7Y29uc3QgeT1pLnNsaWNlKG4ubGVuZ3RoKTtsZXQgJD1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IFQgb2YgeSl7aWYoaCYmci5pc3N1ZXMubGVuZ3RoIT09JCl7aWYoaWUociwkKSlicmVhazskPXIuaXNzdWVzLmxlbmd0aH1iKys7Y29uc3Qgaz10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOlQsaXNzdWVzOltdfSxzKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goay50aGVuKFM9PlVjKFMscixiKSkpOlVjKGsscixiKX19cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PkhjKGwscixuLGksdSkpOkhjKGwscixuLGksdSl9fSk7ZnVuY3Rpb24gTGMoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiBVYyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLm1lKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gSGMoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgaT1lW3NdLGE9czxvLmxlbmd0aDtpZighYSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihpLmlzc3Vlcy5sZW5ndGgpe2lmKCFhJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4ubWUocyxpLmlzc3VlcykpfXQudmFsdWVbc109aS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBvcD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49cmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighTmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W10sYT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoYSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGM9bmV3IFNldDtmb3IoY29uc3QgbCBvZiBhKWlmKHR5cGVvZiBsPT0ic3RyaW5nInx8dHlwZW9mIGw9PSJudW1iZXIifHx0eXBlb2YgbD09InN5bWJvbCIpe2lmKGMuYWRkKHR5cGVvZiBsPT0ibnVtYmVyIj9sLnRvU3RyaW5nKCk6bCksbD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGg9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoaCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYoaC5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpoLmlzc3Vlcy5tYXAoeT0+YmUoeSxyLEcoKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1oLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbih5PT57eS5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLm1lKGwseS5pc3N1ZXMpKSxvLnZhbHVlW3ZdPXkudmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5tZShsLGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1sZXQgdTtmb3IoY29uc3QgbCBpbiBzKWlmKCFjLmhhcyhsKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihsPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtsXT1zW2xdfWVsc2UgdT11Pz9bXSx1LnB1c2gobCk7dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCBjO2Zvcihjb25zdCB1IG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYodT09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsdSkpY29udGludWU7bGV0IGw9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7aWYobCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIHU9PSJzdHJpbmciJiZPby50ZXN0KHUpJiZsLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHk9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIodSksaXNzdWVzOltdfSxyKTtpZih5IGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTt5Lmlzc3Vlcy5sZW5ndGg9PT0wJiYobD15KX1pZihsLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVt1XT1zW3VdOmE/KGM9Yz8/W10sYy5wdXNoKHUpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpsLmlzc3Vlcy5tYXAoeT0+YmUoeSxyLEcoKSkpLGlucHV0OnUscGF0aDpbdV0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1sLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW3VdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbih5PT57eS5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLm1lKHUseS5pc3N1ZXMpKSxvLnZhbHVlW3ZdPXkudmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5tZSh1LGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSkscnA9cCgiJFpvZE1hcCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXJlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W3UsbF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihpZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGg9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0sciksdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2ggaW5zdGFuY2VvZiBQcm9taXNlfHx2IGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW2gsdl0pLnRoZW4oKFtiLHldKT0+e0ZjKGIseSxvLHUscyxlLHIpfSkpOkZjKGgsdixvLHUscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIEZjKGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKHNvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5tZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PmJlKGEsaSxHKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihzby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ubWUobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoYT0+YmUoYSxpLEcoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3Qgc3A9cCgiJFpvZFNldCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXJlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IHUgb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09Yyl7aWYoaWUobyxjKSlicmVhaztjPW8uaXNzdWVzLmxlbmd0aH1jb25zdCBsPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7bCBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGwudGhlbihoPT5CYyhoLG8pKSk6QmMobCxvKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBCYyhlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgaXA9cCgiJFpvZEVudW0iLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1Xcih0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sQyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1XcihyLmRlZi5lbnRyaWVzKS5maWx0ZXIoaT0+c28uaGFzKHR5cGVvZiBpKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChpPT5JZShpLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO3JldHVybiBvLmhhcyhpKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6aSxpbnN0OmV9KSxyfX0pLGFwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLEMoZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP0llKHMpOnM/SWUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLGNwPXAoIiRab2RGaWxlIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx1cD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLHJlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFRvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGk9PihuLnZhbHVlPWksbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gVmMoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBLcz1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsQyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLEMoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7QWUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5WYyhuLHMpKTpWYyhuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLGxwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e0tzLmluaXQoZSx0KSxDKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxDKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGRwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9PntJLmluaXQoZSx0KSxDKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksQyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksQyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtBZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSkscHA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+SmMocyx0KSk6SmMocix0KX19KTtmdW5jdGlvbiBKYyhlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBocD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksZnA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpLEMoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5LYyhzLGUpKTpLYyhyLGUpfX0pO2Z1bmN0aW9uIEtjKGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBtcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFRvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBXYyhlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PmJlKHIsbyxHKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBncD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxDKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxDKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+V2MobixzLHQsbykpOldjKG4scix0LG8pfX0pLHZwPXAoIiRab2ROYU4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLFdzPXAoIiRab2RQaXBlIiwoZSx0KT0+e0kuaW5pdChlLHQpLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+V24oaSx0LmluLG8pKTpXbihzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5XbihzLHQub3V0LG8pKTpXbihyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIFduKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBHcz1wKCIkWm9kQ29kZWMiLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxDKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxDKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxDKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PkduKGksdCxvKSk6R24ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+R24oaSx0LG8pKTpHbihzLHQsbyl9fX0pO2Z1bmN0aW9uIEduKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQub3V0LG4pKTpRbihlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQuaW4sbikpOlFuKGUscix0LmluLG4pfX1mdW5jdGlvbiBRbihlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IGJwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e1dzLmluaXQoZSx0KX0pLHlwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9PntJLmluaXQoZSx0KSxDKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEMoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEMoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKEdjKTpHYyhyKX19KTtmdW5jdGlvbiBHYyhlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIFJtKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1hLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IHU9Yy5taW5pbXVtPz9jLmxlbmd0aCxsPWMubWF4aW11bT8/Yy5sZW5ndGg7dSE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fHU+cikmJihyPXUpLGwhPT12b2lkIDAmJihzPT09dm9pZCAwfHxsPHMpJiYocz1sKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIFNsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1Pbz9UbDppKT8uc291cmNlfWZ1bmN0aW9uIG9zKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz1vcyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKEFlKHIpLCgpPT5BZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcChvcyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PkFlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBSbShlKX1jb25zdCBfcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPW9zKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKEFlKHIpKX1lbHNlIGlmKG89PT1udWxsfHx4dS5oYXModHlwZW9mIG8pKW4ucHVzaChJZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLGtwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9PihJLmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9YcihlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P1hyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBlcyhlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IGVzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IEpzKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksd3A9cCgiJFpvZFByb21pc2UiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLFFzPXAoIiRab2RMYXp5IiwoZSx0KT0+e0kuaW5pdChlLHQpLCR1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEMoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEMoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEMoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxDKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLCRwPXAoIiRab2RDdXN0b20iLChlLHQpPT57Ri5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PlFjKHMsbixvLGUpKTtRYyhyLG4sbyxlKX19KTtmdW5jdGlvbiBRYyhlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChvdChyKSl9fWNsYXNzIFNwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgcnM9In5tZW1vIixZYz1bXTtmdW5jdGlvbiB6cChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBCcihlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgVHA9bmV3IFdlYWtNYXAsWGU9MCxubz0xLEN0PTI7ZnVuY3Rpb24gT3QoZSx0LG4pe2NvbnN0IG89VHAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/Q3Q6WGU7aWYodC5oYXMoZSkpcmV0dXJuIEN0O3QuYWRkKGUpO2xldCByPVhlO2NvbnN0IHM9bD0+e2lmKHIhPT1DdCYmbD8uX3pvZCl7Y29uc3QgaD1PdChsLHQsbik7aD5yJiYocj1oKX19LGk9KGwsaCk9PntsZXQgdj1YZTtmb3IoY29uc3QgYiBvZiBSZWZsZWN0Lm93bktleXMobCkpe2NvbnN0IHk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGIpO2lmKCF5LmVudW1lcmFibGUpY29udGludWU7Y29uc3QgJD15LmdldD9ubzp5LnZhbHVlPy5fem9kP090KHkudmFsdWUsdCxuKTpYZTskPnYmJih2PSQpfXJldHVybiB2fSxhPWw9PntsPnImJihyPWwpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPXlvKGMpO2EobD9pKGwpOm5vKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgbCBvZiBjLml0ZW1zKXMobCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgbCBvZiBjLm9wdGlvbnMpcyhsKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgbD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EobD9PdChsLHQsITEpOm5vKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgbCBpbiBjKXtjb25zdCBoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxsKTtpZighaHx8aC5nZXQpY29udGludWU7Y29uc3Qgdj1oLnZhbHVlO2lmKCEoIXZ8fHR5cGVvZiB2IT0ib2JqZWN0Iikpe2lmKHYuX3pvZClzKHYpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh2KSlmb3IoY29uc3QgYiBvZiB2KXMoYil9fX1yZXR1cm4gdC5kZWxldGUoZSksQW0oZSxyKX1mdW5jdGlvbiBBbShlLHQpe3JldHVybiB0IT09bm8mJlRwLnNldChlLHQ9PT1DdCksdH1mdW5jdGlvbiBabShlKXtyZXR1cm4gT3QoZSxuZXcgU2V0LCEwKSE9PVhlfWZ1bmN0aW9uIE5tKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBZbjtjb25zdCBYbj1bXSxqbT17YWxsb2MoZSx0LG4pe2NvbnN0IG89WW47aWYoIW8pcmV0dXJuIG47WW49dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLFhuLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmSXAocyxyLnZhbHVlKSl0aHJvdyBuZXcgU3A7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShjLHUpPT57aWYobj09PXZvaWQgMCl7Y29uc3Qgaz1PdChlLG5ldyBTZXQsITEpO2lmKGs9PT1YZSlyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkoYyx1KTtrPT09Q3R8fG8/bj0hMDpvPSEwfWNvbnN0IGw9Yy52YWx1ZTtpZighenAobCkpcmV0dXJuIGkoYyx1KTtsZXQgaD11W3JzXTtofHwoaD17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSx1W3JzXT1oKTtsZXQgdjtyPT09dT92PXM6KHY9Tm0oaCxlKSxyPXUscz12KTtjb25zdCBiPXYuZ2V0KGwpO2lmKGIpcmV0dXJuIGMudmFsdWU9Yi52YWx1ZSxiLmlzc3Vlcz9iLmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uQnIoYi5pc3N1ZXMpKTooYy5tZW1vPSEwLGguYmFja0VkZ2VzPz8oaC5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLGguYmFja0VkZ2VzLmFkZChiLnZhbHVlKSksYztZbj12O2NvbnN0IHk9WG4ubGVuZ3RoLCQ9aShjLHUpO1luPXZvaWQgMDtjb25zdCBUPVhuLmxlbmd0aD55P1huLnBvcCgpOnZvaWQgMDtyZXR1cm4gJCBpbnN0YW5jZW9mIFByb21pc2U/JC50aGVuKGs9PihUJiYoVC5pc3N1ZXM9ay5pc3N1ZXMubGVuZ3RoP0JyKGsuaXNzdWVzKTpZYyksaykpOihUJiYoVC5pc3N1ZXM9JC5pc3N1ZXMubGVuZ3RoP0JyKCQuaXNzdWVzKTpZYyksJCl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gWm8oKXtyZXR1cm4gam19ZnVuY3Rpb24gSXAoZSx0KXtjb25zdCBuPWVbcnNdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJnpwKHQpJiZuLmhhcyh0KX1jb25zdCBNbT0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9THUocy5pbnB1dCksYz1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7bXMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtHcihzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtHcihzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIFBwKCl7cmV0dXJue2xvY2FsZUVycm9yOk1tKCl9fWNvbnN0IFlzPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpQcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWGM7Y29uc3QgWHM9U3ltYm9sKCJab2RPdXRwdXQiKSxlaT1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgeHB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gTm8oKXtyZXR1cm4gbmV3IHhwfShYYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KFhjLl9fem9kX2dsb2JhbFJlZ2lzdHJ5PU5vKCkpO2NvbnN0IGdlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksdGk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIG5pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIG9pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIHJpIGV4dGVuZHMgRXJyb3J7fWNvbnN0IHNpPXRpLGlpPXRpLHFtPXRpO2Z1bmN0aW9uIGpvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gRXAoZSx0KXtyZXR1cm4gbmV3IGUoam8oe3R5cGU6InN0cmluZyIsLi4uXyh0KX0pKX1mdW5jdGlvbiBDcChlLHQpe3JldHVybiBuZXcgZShqbyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4uXyh0KX0pKX1mdW5jdGlvbiBhaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiB1aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLl8odCl9KX1mdW5jdGlvbiBkaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4uXyh0KX0pfWZ1bmN0aW9uIHBpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi5fKHQpfSl9ZnVuY3Rpb24gTW8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gaGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBmaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBtaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gZ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiB2aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gYmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24geWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBfaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24ga2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIE9wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uICRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBScChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIEFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBJaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1jb25zdCBQaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi5fKHQpfSl9ZnVuY3Rpb24gRWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4uXyh0KX0pfWZ1bmN0aW9uIENpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLl8odCl9KX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFpwKGUsdCl7cmV0dXJuIG5ldyBlKGpvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi5fKHQpfSkpfWZ1bmN0aW9uIE5wKGUsdCl7cmV0dXJuIG5ldyBlKGpvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4uXyh0KX0pKX1mdW5jdGlvbiBqcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi5fKHQpfSl9ZnVuY3Rpb24gTXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIHFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBEcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIExwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIFVwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi5fKHQpfSl9ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gRnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4uXyh0KX0pfWZ1bmN0aW9uIEJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gVnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBKcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBLcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi5fKHQpfSl9ZnVuY3Rpb24gV3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4uXyh0KX0pfWZ1bmN0aW9uIEdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi5fKHQpfSl9ZnVuY3Rpb24gUXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gWXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4uXyh0KX0pfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi5fKHQpfSl9ZnVuY3Rpb24gdGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLl8odCl9KX1mdW5jdGlvbiBuaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiBvaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi5fKHQpfSl9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gbmV3IFpzKHtjaGVjazoibGVzc190aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4gbmV3IFpzKHtjaGVjazoibGVzc190aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gRWUoZSx0KXtyZXR1cm4gbmV3IE5zKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gZGUoZSx0KXtyZXR1cm4gbmV3IE5zKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIEVlKDAsZSl9ZnVuY3Rpb24gRG8oZSl7cmV0dXJuIHhlKDAsZSl9ZnVuY3Rpb24gTG8oZSl7cmV0dXJuIGxlKDAsZSl9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGRlKDAsZSl9ZnVuY3Rpb24gQmUoZSx0KXtyZXR1cm4gbmV3IFJsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLl8odCksdmFsdWU6ZX0pfWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIG5ldyBObCh7Y2hlY2s6Im1heF9zaXplIiwuLi5fKHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIENlKGUsdCl7cmV0dXJuIG5ldyBqbCh7Y2hlY2s6Im1pbl9zaXplIiwuLi5fKHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGx0KGUsdCl7cmV0dXJuIG5ldyBNbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi5fKHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIG5ldyBxbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLl8odCksbWF4aW11bTplfSl9ZnVuY3Rpb24gamUoZSx0KXtyZXR1cm4gbmV3IERsKHtjaGVjazoibWluX2xlbmd0aCIsLi4uXyh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBwdChlLHQpe3JldHVybiBuZXcgTGwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi5fKHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gbmV3IFVsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4uXyh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBYdChlKXtyZXR1cm4gbmV3IEhsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLl8oZSl9KX1mdW5jdGlvbiBlbihlKXtyZXR1cm4gbmV3IEZsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLl8oZSl9KX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBuZXcgQmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi5fKHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBubihlLHQpe3JldHVybiBuZXcgVmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi5fKHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gb24oZSx0KXtyZXR1cm4gbmV3IEpsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLl8odCksc3VmZml4OmV9KX1mdW5jdGlvbiBIbyhlLHQsbil7cmV0dXJuIG5ldyBLbCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLl8obil9KX1mdW5jdGlvbiBybihlLHQpe3JldHVybiBuZXcgV2woe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLl8odCl9KX1mdW5jdGlvbiBzbihlLHQpe3JldHVybiBuZXcgR2woe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi5fKHQpfSl9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIG5ldyBRbCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIGFuKGUpe3JldHVybiAkZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gY24oKXtyZXR1cm4gJGUoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIHVuKCl7cmV0dXJuICRlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gJGUoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBkbigpe3JldHVybiAkZShlPT5JdShlKSl9ZnVuY3Rpb24gcmgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gRG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gTG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4uXyhuKX0pfWZ1bmN0aW9uIFVtKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4uXyhvKX0pfWZ1bmN0aW9uIEhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBGbShlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiBJLHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi5fKHMpfSl9ZnVuY3Rpb24gQm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi5fKG8pfSl9ZnVuY3Rpb24gVm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi5fKG8pfSl9ZnVuY3Rpb24gSm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gS20oZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLl8obil9KX1mdW5jdGlvbiBXbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIEdtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLl8obil9KX1mdW5jdGlvbiBzaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4uXyh0KX0pfWZ1bmN0aW9uIFFtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gWW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFhtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBlZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTpfbyhuKX19KX1mdW5jdGlvbiB0ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIG5nKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIG9nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246Z3Mobil9KX1mdW5jdGlvbiByZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gc2coZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGlnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIGNnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGloKGUsdCxuKXtjb25zdCBvPV8obik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBhaChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGNoKGUsdCl7Y29uc3Qgbj11aChvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2gob3QocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKG90KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gdWgoZSx0KXtjb25zdCBuPW5ldyBGKHtjaGVjazoiY3VzdG9tIiwuLi5fKHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gbGgoZSl7Y29uc3QgdD1uZXcgRih7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWdlLmdldChuKT8/e307Z2UuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIGRoKGUpe2NvbnN0IHQ9bmV3IEYoe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWdlLmdldChuKT8/e307Z2UuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIHBoKGUsdCl7Y29uc3Qgbj1fKHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpLHI9ci5tYXAoYj0+dHlwZW9mIGI9PSJzdHJpbmciP2IudG9Mb3dlckNhc2UoKTpiKSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P0dzLGM9ZS5Cb29sZWFuPz9Gcyx1PWUuU3RyaW5nPz9RdCxsPW5ldyB1KHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxoPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksdj1uZXcgYSh7dHlwZToicGlwZSIsaW46bCxvdXQ6aCx0cmFuc2Zvcm06KChiLHkpPT57bGV0ICQ9YjtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJigkPSQudG9Mb3dlckNhc2UoKSkscy5oYXMoJCk/ITA6aS5oYXMoJCk/ITE6KHkuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6eS52YWx1ZSxpbnN0OnYsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigoYix5KT0+Yj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIHYuX3pvZC5iYWcudHJ1dGh5PW8sdi5fem9kLmJhZy5mYWxzeT1yLHYuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsdn1mdW5jdGlvbiBodChlLHQsbixvPXt9KXtjb25zdCByPV8obykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgdWc9KCk9Pih7fSksbGc9KCk9Pih7fSksZGc9KCk9Pih7fSkscGc9KCk9Pih7fSksaGc9KCk9Pih7fSksaGg9KCk9PigpPT4oe30pLHNzPSgpPT4oKT0+KHt9KSxmZz0oKT0+KHt9KSx2ZT0oKT0+KHt9KSxtZz0oKT0+KHt9KSxnZz0oKT0+KHt9KSx2Zz0oKT0+KHt9KSxiZz0oKT0+KHt9KSx5Zz0oKT0+KHt9KSxfZz0oKT0+KHt9KSxrZz0oKT0+KHt9KSx3Zz0oKT0+KHt9KSwkZz0oKT0+KHt9KSxTZz0oKT0+KHt9KSx6Zz0oKT0+KHt9KSxUZz0oKT0+KHt9KSxJZz0oKT0+KHt9KSxQZz0oKT0+KHt9KSx4Zz0oKT0+KHt9KSxFZz0oKT0+KHt9KSxDZz0oKT0+KHt9KSxPZz0oKT0+KHt9KSxSZz0oKT0+KHt9KSxBZz0oKT0+KHt9KSxaZz0oKT0+KHt9KSxOZz0oKT0+KHt9KSxqZz0oKT0+KHt9KSxNZz0oKT0+KHt9KSxxZz0oKT0+KHt9KSxmaD0oKT0+KHt9KSxEZz0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxHZz0oKT0+KHt9KSxtaD0oKT0+KHt9KSxRZz0oKT0+KHt9KSxSaT0oKT0+KHt9KTtjbGFzcyBZZ3t9Y29uc3QgWGc9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGdoPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OkhkLCRab2RBcnJheTpLZCwkWm9kQXN5bmNFcnJvcjpaZSwkWm9kQmFzZTY0OklkLCRab2RCYXNlNjRVUkw6eGQsJFpvZEJpZ0ludDpCcywkWm9kQmlnSW50Rm9ybWF0OnFkLCRab2RCb29sZWFuOkZzLCRab2RDSURSdjQ6JGQsJFpvZENJRFJ2Njp6ZCwkWm9kQ1VJRDpkZCwkWm9kQ1VJRDI6cGQsJFpvZENhdGNoOmdwLCRab2RDaGVjazpGLCRab2RDaGVja0JpZ0ludEZvcm1hdDpabCwkWm9kQ2hlY2tFbmRzV2l0aDpKbCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpOcywkWm9kQ2hlY2tJbmNsdWRlczpCbCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6TGwsJFpvZENoZWNrTGVzc1RoYW46WnMsJFpvZENoZWNrTG93ZXJDYXNlOkhsLCRab2RDaGVja01heExlbmd0aDpxbCwkWm9kQ2hlY2tNYXhTaXplOk5sLCRab2RDaGVja01pbWVUeXBlOkdsLCRab2RDaGVja01pbkxlbmd0aDpEbCwkWm9kQ2hlY2tNaW5TaXplOmpsLCRab2RDaGVja011bHRpcGxlT2Y6UmwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OkFsLCRab2RDaGVja092ZXJ3cml0ZTpRbCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOldsLCRab2RDaGVja1Byb3BlcnR5OktsLCRab2RDaGVja1JlZ2V4OlVsLCRab2RDaGVja1NpemVFcXVhbHM6TWwsJFpvZENoZWNrU3RhcnRzV2l0aDpWbCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6R3QsJFpvZENoZWNrVXBwZXJDYXNlOkZsLCRab2RDb2RlYzpHcywkWm9kQ3JlZGl0Q2FyZDpPZCwkWm9kQ3VzdG9tOiRwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6amQsJFpvZEN5Y2xpY0Vycm9yOlNwLCRab2REYXRlOkpkLCRab2REZWZhdWx0OnBwLCRab2REaXNjcmltaW5hdGVkVW5pb246dHAsJFpvZEUxNjQ6RWQsJFpvZEVtYWlsOm9kLCRab2RFbW9qaTp1ZCwkWm9kRW5jb2RlRXJyb3I6VG8sJFpvZEVudW06aXAsJFpvZEVycm9yOkt1LCRab2RFeGFjdE9wdGlvbmFsOmxwLCRab2RGaWxlOmNwLCRab2RGdW5jdGlvbjprcCwkWm9kR1VJRDp0ZCwkWm9kSUJBTjpBZCwkWm9kSVB2NDpfZCwkWm9kSVB2NjprZCwkWm9kSVNPRGF0ZTp2ZCwkWm9kSVNPRGF0ZVRpbWU6Z2QsJFpvZElTT0R1cmF0aW9uOnlkLCRab2RJU09UaW1lOmJkLCRab2RJbnRlcnNlY3Rpb246bnAsJFpvZEpXVDpOZCwkWm9kS1NVSUQ6bWQsJFpvZExhenk6UXMsJFpvZExpdGVyYWw6YXAsJFpvZE1BQzp3ZCwkWm9kTWFwOnJwLCRab2ROYU46dnAsJFpvZE5hbm9JRDpsZCwkWm9kTmV2ZXI6QmQsJFpvZE5vbk9wdGlvbmFsOmZwLCRab2ROdWxsOlVkLCRab2ROdWxsYWJsZTpkcCwkWm9kTnVtYmVyOkhzLCRab2ROdW1iZXJGb3JtYXQ6TWQsJFpvZE9iamVjdDpRZCwkWm9kT2JqZWN0SklUOllkLCRab2RPcHRpb25hbDpLcywkWm9kUGlwZTpXcywkWm9kUHJlZmF1bHQ6aHAsJFpvZFByZXByb2Nlc3M6YnAsJFpvZFByb21pc2U6d3AsJFpvZFJlYWRvbmx5OnlwLCRab2RSZWFsRXJyb3I6cGUsJFpvZFJlY29yZDpvcCwkWm9kUmVnaXN0cnk6eHAsJFpvZFNldDpzcCwkWm9kU3RyaW5nOlF0LCRab2RTdHJpbmdGb3JtYXQ6RCwkWm9kU3VjY2VzczptcCwkWm9kU3ltYm9sOkRkLCRab2RUZW1wbGF0ZUxpdGVyYWw6X3AsJFpvZFRyYW5zZm9ybTp1cCwkWm9kVHVwbGU6SnMsJFpvZFR5cGU6SSwkWm9kVUxJRDpoZCwkWm9kVVJMOmNkLCRab2RVVUlEOm5kLCRab2RVbmRlZmluZWQ6TGQsJFpvZFVuaW9uOkFvLCRab2RVbmtub3duOkZkLCRab2RWb2lkOlZkLCRab2RYSUQ6ZmQsJFpvZFhvcjpYZCwkYnJhbmQ6eXMsJGNvbnN0cnVjdG9yOnAsJGlucHV0OmVpLCRvdXRwdXQ6WHMsRG9jOllsLElOVkFMSUQ6bmksSlNPTlNjaGVtYTpYZyxKU09OU2NoZW1hR2VuZXJhdG9yOllnLE5FVkVSOmJzLFRpbWVQcmVjaXNpb246UGksVVJMX0JBRF9GT1JNQVQ6TXMsVVJMX1VOUEFSU0VBQkxFOk50LFpvZENvbXBpbGVBc3luY0Vycm9yOm9pLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnJpLF9hbnk6UXAsX2FycmF5OnJoLF9iYXNlNjQ6U2ksX2Jhc2U2NHVybDp6aSxfYmlnaW50OkZwLF9ib29sZWFuOlVwLF9jYXRjaDpvZyxfY2hlY2s6dWgsX2NpZHJ2NDp3aSxfY2lkcnY2OiRpLF9jb2VyY2VkQmlnaW50OkJwLF9jb2VyY2VkQm9vbGVhbjpIcCxfY29lcmNlZERhdGU6bmgsX2NvZXJjZWROdW1iZXI6TnAsX2NvZXJjZWRTdHJpbmc6Q3AsX2NyZWRpdENhcmQ6UnAsX2N1aWQ6bWksX2N1aWQyOmdpLF9jdXN0b206aWgsX2RhdGU6dGgsX2RlY29kZTokcyxfZGVjb2RlQXN5bmM6enMsX2RlZmF1bHQ6ZWcsX2Rpc2NyaW1pbmF0ZWRVbmlvbjpVbSxfZTE2NDpUaSxfZW1haWw6YWksX2Vtb2ppOmhpLF9lbmNvZGU6d3MsX2VuY29kZUFzeW5jOlNzLF9lbmRzV2l0aDpvbixfZW51bTpLbSxfZmlsZTpzaCxfZmxvYXQzMjpNcCxfZmxvYXQ2NDpxcCxfZ3Q6RWUsX2d0ZTpkZSxfZ3VpZDpjaSxfaWJhbjpBcCxfaW5jbHVkZXM6dG4sX2ludDpqcCxfaW50MzI6RHAsX2ludDY0OlZwLF9pbnRlcnNlY3Rpb246SG0sX2lwdjQ6X2ksX2lwdjY6a2ksX2lzb0RhdGU6RWksX2lzb0RhdGVUaW1lOnhpLF9pc29EdXJhdGlvbjpPaSxfaXNvVGltZTpDaSxfand0OklpLF9rc3VpZDp5aSxfbGF6eTphZyxfbGVuZ3RoOnB0LF9saXRlcmFsOkdtLF9sb3dlcmNhc2U6WHQsX2x0OnhlLF9sdGU6bGUsX21hYzpPcCxfbWFwOlZtLF9tYXg6bGUsX21heExlbmd0aDpkdCxfbWF4U2l6ZTpHZSxfbWltZTpzbixfbWluOmRlLF9taW5MZW5ndGg6amUsX21pblNpemU6Q2UsX211bHRpcGxlT2Y6QmUsX25hbjpvaCxfbmFub2lkOmZpLF9uYXRpdmVFbnVtOldtLF9uZWdhdGl2ZTpEbyxfbmV2ZXI6WHAsX25vbm5lZ2F0aXZlOlVvLF9ub25vcHRpb25hbDp0Zyxfbm9ucG9zaXRpdmU6TG8sX25vcm1hbGl6ZTphbixfbnVsbDpHcCxfbnVsbGFibGU6WG0sX251bWJlcjpacCxfb3B0aW9uYWw6WW0sX292ZXJ3cml0ZTokZSxfcGFyc2U6RnQsX3BhcnNlQXN5bmM6QnQsX3BpcGU6cmcsX3Bvc2l0aXZlOnFvLF9wcm9taXNlOmNnLF9wcm9wZXJ0aWVzOnJuLF9wcm9wZXJ0eTpIbyxfcmVhZG9ubHk6c2csX3JlY29yZDpCbSxfcmVmaW5lOmFoLF9yZWdleDpZdCxfc2FmZURlY29kZTpJcyxfc2FmZURlY29kZUFzeW5jOnhzLF9zYWZlRW5jb2RlOlRzLF9zYWZlRW5jb2RlQXN5bmM6UHMsX3NhZmVQYXJzZTpWdCxfc2FmZVBhcnNlQXN5bmM6SnQsX3NldDpKbSxfc2l6ZTpsdCxfc2x1Z2lmeTpkbixfc3RhcnRzV2l0aDpubixfc3RyaW5nOkVwLF9zdHJpbmdGb3JtYXQ6aHQsX3N0cmluZ2Jvb2w6cGgsX3N1Y2Nlc3M6bmcsX3N1cGVyUmVmaW5lOmNoLF9zeW1ib2w6S3AsX3RlbXBsYXRlTGl0ZXJhbDppZyxfdG9Mb3dlckNhc2U6dW4sX3RvVXBwZXJDYXNlOmxuLF90cmFuc2Zvcm06UW0sX3RyaW06Y24sX3R1cGxlOkZtLF91aW50MzI6THAsX3VpbnQ2NDpKcCxfdWxpZDp2aSxfdW5kZWZpbmVkOldwLF91bmlvbjpEbSxfdW5rbm93bjpZcCxfdXBwZXJjYXNlOmVuLF91cmw6TW8sX3V1aWQ6dWksX3V1aWR2NDpsaSxfdXVpZHY2OmRpLF91dWlkdjc6cGksX3ZvaWQ6ZWgsX3hpZDpiaSxfeG9yOkxtLGJhc2U2NENoYXJzZXQ6VGQsYmFzZTY0dXJsQ2hhcnNldDpVcyxjYW5QYXJzZVVSTDpxcyxjbG9uZTpWLGNvbXBpbGU6c2ksY29tcGlsZUZuOnFtLGNvbmZpZzpHLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDpzcyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6aGgsZGVjb2RlOlZmLGRlY29kZUFzeW5jOktmLGRlc2NyaWJlOmxoLGVuY29kZTpCZixlbmNvZGVBc3luYzpKZixleHRyYWN0RGVmczpwZyxmaW5hbGl6ZTpoZyxmbGF0dGVuRXJyb3I6SW8sZm9ybWF0RXJyb3I6UG8sZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpWcyxnbG9iYWxDb25maWc6cmUsZ2xvYmFsUmVnaXN0cnk6Z2UsaGFuZGxlVW5yZXByZXNlbnRhYmxlOmxnLGluaXRpYWxpemVDb250ZXh0OnVnLGlzQmFja0VkZ2U6SXAsaXNSZWN1cnNpdmVTY2hlbWE6Wm0saXNWYWxpZEJhc2U2NDpMcyxpc1ZhbGlkQmFzZTY0VVJMOlBkLGlzVmFsaWRDSURSdjY6U2QsaXNWYWxpZENyZWRpdENhcmQ6Q2QsaXNWYWxpZElCQU46UmQsaXNWYWxpZElQdjY6RHMsaXNWYWxpZEpXVDpaZCxsb2NhbGVzOllzLG1lbW9pemVyOlpvLG1lcmdlVmFsdWVzOnVvLG1ldGE6ZGgscGFyc2U6WHIscGFyc2VBc3luYzplcyxwYXJzZVVSTE9iamVjdDpzZCxwcmV0dGlmeUVycm9yOmtzLHByb2Nlc3M6ZmcscHJvY2Vzc1NjaGVtYTpkZyxyZWdleGVzOlJvLHJlZ2lzdHJ5Ok5vLHNhZmVEZWNvZGU6R2Ysc2FmZURlY29kZUFzeW5jOllmLHNhZmVFbmNvZGU6V2Ysc2FmZUVuY29kZUFzeW5jOlFmLHNhZmVQYXJzZTpHdSxzYWZlUGFyc2VBc3luYzpMZixzdGFuZGFyZFByb3BzOmpzLHN0cmlwVGFiQW5kTmV3bGluZTpucyx0b0RvdFBhdGg6V3UsdG9KU09OU2NoZW1hOlJpLHRvWm9kOmJvLHRyZWVpZnlFcnJvcjpfcyx1cmxIb3N0bmFtZU9rOmlkLHVybFByb3RvY29sT2s6YWQsdXRpbDp2cyx2YWxpZGF0ZTpFbyx2YWxpZGF0ZUFzeW5jOkNvLHZhbGlkYXRlVVJMOnJkLHZlcnNpb246WGwsd2l0aFBhcnNlcjppaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxldT1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gQWkoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGksYSk9Pntjb25zdCBjPXRbaS5fem9kLmRlZi50eXBlXTtyZXR1cm4gYz9jKGksYSk6aX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoaSl7Y29uc3QgYT1vLmdldChpKTtpZihhPT09ZXUpcmV0dXJuIG5ldyBRcyh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChpKX0pO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7by5zZXQoaSxldSk7Y29uc3QgYz1zKGkpLHU9bihjLGMhPT1pKTtyZXR1cm4gby5zZXQoaSx1KSx1fWZ1bmN0aW9uIHMoaSl7Y29uc3QgYT1pLl96b2QuZGVmO3N3aXRjaChhLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1hLnNoYXBlLGw9T2JqZWN0LmtleXModSk7bGV0IGg9ITE7Y29uc3Qgdj17fTtmb3IoY29uc3QgeSBvZiBsKXtjb25zdCAkPXIodVt5XSk7JCE9PXVbeV0mJihoPSEwKSx2W3ldPSR9bGV0IGI9YS5jYXRjaGFsbDtyZXR1cm4gYS5jYXRjaGFsbCYmKGI9cihhLmNhdGNoYWxsKSxiIT09YS5jYXRjaGFsbCYmKGg9ITApKSxoP1YoaSx7Li4uYSxzaGFwZTp2LGNhdGNoYWxsOmJ9KTppfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoYS5lbGVtZW50KTtyZXR1cm4gdT09PWEuZWxlbWVudD9pOlYoaSx7Li4uYSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1hLml0ZW1zO2xldCBsPSExO2NvbnN0IGg9W107Zm9yKGNvbnN0IGIgb2YgdSl7Y29uc3QgeT1yKGIpO3khPT1iJiYobD0hMCksaC5wdXNoKHkpfWxldCB2PWEucmVzdDtyZXR1cm4gYS5yZXN0JiYodj1yKGEucmVzdCksdiE9PWEucmVzdCYmKGw9ITApKSxsP1YoaSx7Li4uYSxpdGVtczpoLHJlc3Q6dn0pOml9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGEua2V5VHlwZSksbD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEua2V5VHlwZSYmbD09PWEudmFsdWVUeXBlP2k6VihpLHsuLi5hLGtleVR5cGU6dSx2YWx1ZVR5cGU6bH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEudmFsdWVUeXBlP2k6VihpLHsuLi5hLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9YS5vcHRpb25zO2xldCBsPSExO2NvbnN0IGg9W107Zm9yKGNvbnN0IHYgb2YgdSl7Y29uc3QgYj1yKHYpO2IhPT12JiYobD0hMCksaC5wdXNoKGIpfXJldHVybiBsP1YoaSx7Li4uYSxvcHRpb25zOmh9KTppfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGEubGVmdCksbD1yKGEucmlnaHQpO3JldHVybiB1PT09YS5sZWZ0JiZsPT09YS5yaWdodD9pOlYoaSx7Li4uYSxsZWZ0OnUscmlnaHQ6bH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoYS5pbm5lclR5cGUpO3JldHVybiB1PT09YS5pbm5lclR5cGU/aTpWKGksey4uLmEsaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoYS5pbiksbD1yKGEub3V0KTtyZXR1cm4gdT09PWEuaW4mJmw9PT1hLm91dD9pOlYoaSx7Li4uYSxpbjp1LG91dDpsfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihhLmlucHV0KSxsPXIoYS5vdXRwdXQpO3JldHVybiB1PT09YS5pbnB1dCYmbD09PWEub3V0cHV0P2k6VihpLHsuLi5hLGlucHV0OnUsb3V0cHV0Omx9KX1jYXNlImxhenkiOntjb25zdCB1PWEuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6bCwuLi5ofT1hO3JldHVybiBWKGksey4uLmgsZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gWmkoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gdmgoZSx0KXtyZXR1cm4gWmkoZSk/R3UoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiBldihlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYoWmkoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiB0dihlKXtpZihaaShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCBudj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6b24sZ3Q6RWUsZ3RlOmRlLGluY2x1ZGVzOnRuLGxlbmd0aDpwdCxsb3dlcmNhc2U6WHQsbHQ6eGUsbHRlOmxlLG1heExlbmd0aDpkdCxtYXhTaXplOkdlLG1pbWU6c24sbWluTGVuZ3RoOmplLG1pblNpemU6Q2UsbXVsdGlwbGVPZjpCZSxuZWdhdGl2ZTpEbyxub25uZWdhdGl2ZTpVbyxub25wb3NpdGl2ZTpMbyxub3JtYWxpemU6YW4sb3ZlcndyaXRlOiRlLHBvc2l0aXZlOnFvLHByb3BlcnRpZXM6cm4scHJvcGVydHk6SG8scmVnZXg6WXQsc2l6ZTpsdCxzbHVnaWZ5OmRuLHN0YXJ0c1dpdGg6bm4sdG9Mb3dlckNhc2U6dW4sdG9VcHBlckNhc2U6bG4sdHJpbTpjbix1cHBlcmNhc2U6ZW59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksdHU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gZW8oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCBiaD0oZSx0KT0+e0t1LmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTt0dS5oYXMobil8fCh0dS5hZGQobiksZW8obiwiZm9ybWF0IixvPT5yPT5QbyhvLHIpKSxlbyhuLCJmbGF0dGVuIixvPT5yPT5JbyhvLHIpKSxlbyhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLHJvLDIpfSksZW8obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMscm8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0seWg9cCgiWm9kRXJyb3IiLGJoKSxhZT1wKCJab2RFcnJvciIsYmgsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxOaT1GdChhZSksamk9QnQoYWUpLE1pPVZ0KGFlKSxxaT1KdChhZSksRGk9d3MoYWUpLExpPSRzKGFlKSxVaT1TcyhhZSksSGk9enMoYWUpLEZpPVRzKGFlKSxCaT1JcyhhZSksVmk9UHMoYWUpLEppPXhzKGFlKTtmdW5jdGlvbiBvdigpe3JlLmxvY2FsZUVycm9yfHxHKFBwKCkpfWZ1bmN0aW9uIFFlKCl7cmUubWVtb2l6ZXJ8fEcoe21lbW9pemVyOlpvKCl9KX1jb25zdCB4PXAoIlpvZFR5cGUiLChlLHQpPT4ob3YoKSxJLmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUobmUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIFYodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKENyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKE9yKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGUoZSkpfSxvcHRpb25hbCgpe3JldHVybiBVKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIGRyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBpdCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBVKGl0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIHZyKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIHoodGhpcyl9LG9yKGUpe3JldHVybiBFKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiB6dCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIE10KHRoaXMsWm4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBmcih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gZ3IodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIF9yKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIE10KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIFNyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gZ2UuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gZ2UuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBnZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIHpvKHRoaXMsIn5zdGFuZGFyZCIsey4uLmpzKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OnNzKCksb3V0cHV0OnNzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe1BlKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gTmkodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBqaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIE1pKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gcWkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe1BlKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIEVvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBDbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIERpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBMaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBVaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBIaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBGaSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gQmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gVmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gSmkodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIGhoKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBnZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHBuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57UXQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tZygpfSxIdCh7Zm9ybWF0OmU9PnZlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PnZlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFl0KC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sodG4oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKG5uKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sob24oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soamUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soZHQoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2socHQoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhqZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKFh0KGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGVuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKGNuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soYW4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKHVuKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKGxuKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soZG4oKSl9fSkpLGZ0PXAoIlpvZFN0cmluZyIsKGUsdCk9PntRdC5pbml0KGUsdCkscG4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWkoaG4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soTW8oeXQsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soSWkoeG4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhoaShtbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2koZm4sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHVpKGtlLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKGxpKGtlLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKGRpKGtlLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKHBpKGtlLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKGZpKGduLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhtaSh2bixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKGdpKGJuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh2aSh5bixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhTaShUbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayh6aShJbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhiaShfbixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHlpKGtuLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhfaSh3bixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soa2koJG4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2koU24sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGkoem4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKFRpKFBuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGkobXQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEVpKGd0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhDaSh2dCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKE9pKGJ0LGUpKX19KTtmdW5jdGlvbiBmKGUpe3JldHVybiBFcChmdCxlKX1jb25zdCBNPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntELmluaXQoZSx0KSxwbi5pbml0KGUsdCl9KSxtdD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PntnZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KSxndD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e3ZkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pLHZ0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57YmQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSksYnQ9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57eWQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSksaG49cCgiWm9kRW1haWwiLChlLHQpPT57b2QuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIGFpKGhuLGUpfWNvbnN0IGZuPXAoIlpvZEdVSUQiLChlLHQpPT57dGQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2koZSl7cmV0dXJuIGNpKGZuLGUpfWNvbnN0IGtlPXAoIlpvZFVVSUQiLChlLHQpPT57bmQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gR2koZSl7cmV0dXJuIHVpKGtlLGUpfWZ1bmN0aW9uIFFpKGUpe3JldHVybiBsaShrZSxlKX1mdW5jdGlvbiBZaShlKXtyZXR1cm4gZGkoa2UsZSl9ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIHBpKGtlLGUpfWNvbnN0IHl0PXAoIlpvZFVSTCIsKGUsdCk9PntjZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBlYShlKXtyZXR1cm4gTW8oeXQsZSl9ZnVuY3Rpb24gdGEoZSl7cmV0dXJuIE1vKHl0LHtwcm90b2NvbDpFcyxob3N0bmFtZTpnbCwuLi5fKGUpfSl9Y29uc3QgbW49cCgiWm9kRW1vamkiLChlLHQpPT57dWQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIGhpKG1uLGUpfWNvbnN0IGduPXAoIlpvZE5hbm9JRCIsKGUsdCk9PntsZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBvYShlKXtyZXR1cm4gZmkoZ24sZSl9Y29uc3Qgdm49cCgiWm9kQ1VJRCIsKGUsdCk9PntkZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiByYShlKXtyZXR1cm4gbWkodm4sZSl9Y29uc3QgYm49cCgiWm9kQ1VJRDIiLChlLHQpPT57cGQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGdpKGJuLGUpfWNvbnN0IHluPXAoIlpvZFVMSUQiLChlLHQpPT57aGQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIHZpKHluLGUpfWNvbnN0IF9uPXAoIlpvZFhJRCIsKGUsdCk9PntmZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBhYShlKXtyZXR1cm4gYmkoX24sZSl9Y29uc3Qga249cCgiWm9kS1NVSUQiLChlLHQpPT57bWQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gY2EoZSl7cmV0dXJuIHlpKGtuLGUpfWNvbnN0IHduPXAoIlpvZElQdjQiLChlLHQpPT57X2QuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIF9pKHduLGUpfWNvbnN0IEZvPXAoIlpvZE1BQyIsKGUsdCk9Pnt3ZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBsYShlKXtyZXR1cm4gT3AoRm8sZSl9Y29uc3QgJG49cCgiWm9kSVB2NiIsKGUsdCk9PntrZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBkYShlKXtyZXR1cm4ga2koJG4sZSl9Y29uc3QgU249cCgiWm9kQ0lEUnY0IiwoZSx0KT0+eyRkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHBhKGUpe3JldHVybiB3aShTbixlKX1jb25zdCB6bj1wKCJab2RDSURSdjYiLChlLHQpPT57emQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gaGEoZSl7cmV0dXJuICRpKHpuLGUpfWNvbnN0IFRuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntJZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBmYShlKXtyZXR1cm4gU2koVG4sZSl9Y29uc3QgSW49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG1hKGUpe3JldHVybiB6aShJbixlKX1jb25zdCBQbj1wKCJab2RFMTY0IiwoZSx0KT0+e0VkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGdhKGUpe3JldHVybiBUaShQbixlKX1jb25zdCBCbz1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e09kLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHZhKGUpe3JldHVybiBScChCbyxlKX1jb25zdCBWbz1wKCJab2RJQkFOIiwoZSx0KT0+e0FkLmluaXQoZSx0KSxNLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBBcChWbyxlKX1jb25zdCB4bj1wKCJab2RKV1QiLChlLHQpPT57TmQuaW5pdChlLHQpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24geWEoZSl7cmV0dXJuIElpKHhuLGUpfWNvbnN0IE1lPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntqZC5pbml0KGUsdCksTS5pbml0KGUsdCl9KTtmdW5jdGlvbiBfYShlLHQsbj17fSl7cmV0dXJuIGh0KE1lLGUsdCxuKX1mdW5jdGlvbiBrYShlKXtyZXR1cm4gaHQoTWUsImhvc3RuYW1lIixtbCxlKX1mdW5jdGlvbiB3YShlKXtyZXR1cm4gaHQoTWUsImhleCIsT2wsZSl9ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIGh0KE1lLCJjdXJyZW5jeV9jb2RlIixibCxlKX1mdW5jdGlvbiBTYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9Um9bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gaHQoTWUsbyxyLHQpfWNvbnN0IF90PXAoIlpvZE51bWJlciIsKGUsdCk9PntIcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdnKCksZS5pc0Zpbml0ZT0hMH0sSHQoe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT12ZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PXZlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PXZlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+dmUoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKEVlKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhkZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGxlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhsZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKGp0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhqdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKEVlKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhkZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGxlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhCZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIFAoZSl7cmV0dXJuIFpwKF90LGUpfWNvbnN0IHFlPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntNZC5pbml0KGUsdCksX3QuaW5pdChlLHQpfSk7ZnVuY3Rpb24ganQoZSl7cmV0dXJuIGpwKHFlLGUpfWZ1bmN0aW9uIHphKGUpe3JldHVybiBNcChxZSxlKX1mdW5jdGlvbiBUYShlKXtyZXR1cm4gcXAocWUsZSl9ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIERwKHFlLGUpfWZ1bmN0aW9uIFBhKGUpe3JldHVybiBMcChxZSxlKX1jb25zdCBrdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e0ZzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmcoKX0pO2Z1bmN0aW9uIGooZSl7cmV0dXJuIFVwKGt0LGUpfWNvbnN0IHd0PXAoIlpvZEJpZ0ludCIsKGUsdCk9PntCcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmJnKCl9LEh0KHttaW5WYWx1ZTplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+dmUoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT52ZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGRlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhkZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhFZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4ZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobGUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGxlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhFZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh4ZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhkZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9fSkpO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBGcCh3dCxlKX1jb25zdCBFbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57cWQuaW5pdChlLHQpLHd0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBWcChFbixlKX1mdW5jdGlvbiBDYShlKXtyZXR1cm4gSnAoRW4sZSl9Y29uc3QgSm89cCgiWm9kU3ltYm9sIiwoZSx0KT0+e0RkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eWcoKX0pO2Z1bmN0aW9uIE9hKGUpe3JldHVybiBLcChKbyxlKX1jb25zdCBLbz1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57TGQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5rZygpfSk7ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIFdwKEtvLGUpfWNvbnN0IFdvPXAoIlpvZE51bGwiLChlLHQpPT57VWQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5fZygpfSk7ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIEdwKFdvLGUpfWNvbnN0IEdvPXAoIlpvZEFueSIsKGUsdCk9PntIZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNnKCl9KTtmdW5jdGlvbiBPbigpe3JldHVybiBRcChHbyl9Y29uc3QgUW89cCgiWm9kVW5rbm93biIsKGUsdCk9PntGZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpnKCl9KTtmdW5jdGlvbiBaKCl7cmV0dXJuIFlwKFFvKX1jb25zdCBZbz1wKCJab2ROZXZlciIsKGUsdCk9PntCZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRnKCl9KTtmdW5jdGlvbiBWZShlKXtyZXR1cm4gWHAoWW8sZSl9Y29uc3QgWG89cCgiWm9kVm9pZCIsKGUsdCk9PntWZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndnKCl9KTtmdW5jdGlvbiBSYShlKXtyZXR1cm4gZWgoWG8sZSl9Y29uc3QgUm49cCgiWm9kRGF0ZSIsKGUsdCk9PntKZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRnKCksZS5taW49KG4sbyk9PmUuY2hlY2soZGUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2sobGUobixvKSl9LEh0KHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PXZlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT12ZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIEFhKGUpe3JldHVybiB0aChSbixlKX1jb25zdCBlcj1wKCJab2RBcnJheSIsKGUsdCk9PntRZSgpLEtkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TWcoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhkdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socHQoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiByaChlcixlLHQpfWZ1bmN0aW9uIFphKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gWChPYmplY3Qua2V5cyh0KSl9Y29uc3QgJHQ9cCgiWm9kT2JqZWN0IiwoZSx0KT0+e1FlKCksWWQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5xZygpLEJ1KGUsInNoYXBlIixuPT5uLl96b2QuZGVmLnNoYXBlLCExKX0se2tleW9mKCl7cmV0dXJuIFgoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZShuZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKG5lKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlooKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZShuZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpaKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKG5lKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlZlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUobmUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIFp1KHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIGp1KHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBNdSh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBSdSh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBBdSh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBRcihUdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIFFyKE5uLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBxdShqbix0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLl8odCl9O3JldHVybiBuZXcgJHQobil9ZnVuY3Rpb24gTmEoZSx0KXtyZXR1cm4gbmV3ICR0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6VmUoKSwuLi5fKHQpfSl9ZnVuY3Rpb24gWShlLHQpe3JldHVybiBuZXcgJHQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpaKCksLi4uXyh0KX0pfWNvbnN0IFN0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e0FvLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZmgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gRShlLHQpe3JldHVybiBuZXcgU3Qoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4uXyh0KX0pfWNvbnN0IHRyPXAoIlpvZFhvciIsKGUsdCk9PntTdC5pbml0KGUsdCksWGQuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5maCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBqYShlLHQpe3JldHVybiBuZXcgdHIoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLl8odCl9KX1jb25zdCBucj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57U3QuaW5pdChlLHQpLHRwLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFuKGUsdCxuKXtyZXR1cm4gbmV3IG5yKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi5fKG4pfSl9Y29uc3Qgb3I9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e25wLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RGcoKX0pO2Z1bmN0aW9uIHp0KGUsdCl7cmV0dXJuIG5ldyBvcih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IHJyPXAoIlpvZFR1cGxlIiwoZSx0KT0+e1FlKCksSnMuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5MZygpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgVHQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIHNyKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiBJLHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IHJyKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4uXyhyKX0pfWNvbnN0IEplPXAoIlpvZFJlY29yZCIsKGUsdCk9PntRZSgpLG9wLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWcoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gTyhlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IEplKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZigpLHZhbHVlVHlwZTplLC4uLl8odCl9KTpuZXcgSmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiBNYShlLHQsbil7cmV0dXJuIG5ldyBKZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gcWEoZSx0LG4pe3JldHVybiBuZXcgSmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi5fKG4pfSl9Y29uc3QgaXI9cCgiWm9kTWFwIiwoZSx0KT0+e1FlKCkscnAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKENlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soQ2UoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKEdlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKGx0KC4uLm4pKX0pO2Z1bmN0aW9uIERhKGUsdCxuKXtyZXR1cm4gbmV3IGlyKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9Y29uc3QgYXI9cCgiWm9kU2V0IiwoZSx0KT0+e1FlKCksc3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpLGUubWluPSguLi5uKT0+ZS5jaGVjayhDZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKENlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhHZSguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhsdCguLi5uKSl9KTtmdW5jdGlvbiBMYShlLHQpe3JldHVybiBuZXcgYXIoe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4uXyh0KX0pfWNvbnN0IEtlPXAoIlpvZEVudW0iLChlLHQpPT57aXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5JZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgS2Uoey4uLnQsY2hlY2tzOltdLC4uLl8ociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IEtlKHsuLi50LGNoZWNrczpbXSwuLi5fKHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIFgoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IEtlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4uXyh0KX0pfWZ1bmN0aW9uIFVhKGUsdCl7cmV0dXJuIG5ldyBLZSh7dHlwZToiZW51bSIsZW50cmllczplLC4uLl8odCl9KX1jb25zdCBjcj1wKCJab2RMaXRlcmFsIiwoZSx0KT0+e2FwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGcoKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gbShlLHQpe3JldHVybiBuZXcgY3Ioe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLl8odCl9KX1jb25zdCB1cj1wKCJab2RGaWxlIiwoZSx0KT0+e2NwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Q2coKSxlLm1pbj0obixvKT0+ZS5jaGVjayhDZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhHZShuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soc24oQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiBIYShlKXtyZXR1cm4gc2godXIsZSl9Y29uc3QgbHI9cCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e1FlKCksdXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aZygpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgVG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaChvdChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgaT1zO2kuZmF0YWwmJihpLmNvbnRpbnVlPSExKSxpLmNvZGU/PyhpLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBpfHwoaS5pbnB1dD1uLnZhbHVlKSxpLmluc3Q/PyhpLmluc3Q9ZSksbi5pc3N1ZXMucHVzaChvdChpKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIFpuKGUpe3JldHVybiBuZXcgbHIoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBUdD1wKCJab2RPcHRpb25hbCIsKGUsdCk9PntLcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1oKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gVShlKXtyZXR1cm4gbmV3IFR0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBObj1wKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e2xwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBkcihlKXtyZXR1cm4gbmV3IE5uKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBwcj1wKCJab2ROdWxsYWJsZSIsKGUsdCk9PntkcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkhnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gaXQoZSl7cmV0dXJuIG5ldyBwcih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24gRmEoZSl7cmV0dXJuIFUoaXQoZSkpfWNvbnN0IGhyPXAoIlpvZERlZmF1bHQiLChlLHQpPT57cHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiBmcihlLHQpe3JldHVybiBuZXcgaHIoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOl9vKHQpfX0pfWNvbnN0IG1yPXAoIlpvZFByZWZhdWx0IiwoZSx0KT0+e2hwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VmcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBncihlLHQpe3JldHVybiBuZXcgbXIoe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpfbyh0KX19KX1jb25zdCBqbj1wKCJab2ROb25PcHRpb25hbCIsKGUsdCk9PntmcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkZnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gdnIoZSx0KXtyZXR1cm4gbmV3IGpuKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4uXyh0KX0pfWNvbnN0IGJyPXAoIlpvZFN1Y2Nlc3MiLChlLHQpPT57bXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEJhKGUpe3JldHVybiBuZXcgYnIoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3QgeXI9cCgiWm9kQ2F0Y2giLChlLHQpPT57Z3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5KZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gX3IoZSx0KXtyZXR1cm4gbmV3IHlyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OmdzKHQpfSl9Y29uc3Qga3I9cCgiWm9kTmFOIiwoZSx0KT0+e3ZwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eGcoKX0pO2Z1bmN0aW9uIFZhKGUpe3JldHVybiBvaChrcixlKX1jb25zdCBJdD1wKCJab2RQaXBlIiwoZSx0KT0+e1dzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+S2coKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBNdChlLHQpe3JldHVybiBuZXcgSXQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCBQdD1wKCJab2RDb2RlYyIsKGUsdCk9PntJdC5pbml0KGUsdCksR3MuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSmEoZSx0LG4pe3JldHVybiBuZXcgUHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiBLYShlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyBQdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3Qgd3I9cCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntJdC5pbml0KGUsdCksYnAuaW5pdChlLHQpfSksJHI9cCgiWm9kUmVhZG9ubHkiLChlLHQpPT57eXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5XZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFNyKGUpe3JldHVybiBuZXcgJHIoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0IHpyPXAoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PntfcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCl9KTtmdW5jdGlvbiBXYShlLHQpe3JldHVybiBuZXcgenIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4uXyh0KX0pfWNvbnN0IFRyPXAoIlpvZExhenkiLChlLHQpPT57UXMuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24gSXIoZSl7cmV0dXJuIG5ldyBUcih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCBQcj1wKCJab2RQcm9taXNlIiwoZSx0KT0+e3dwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+R2coKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBHYShlKXtyZXR1cm4gbmV3IFByKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IHhyPXAoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e2twLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QWcoKX0pO2Z1bmN0aW9uIGF0KGUpe3JldHVybiBuZXcgeHIoe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9zcihlPy5pbnB1dCk6ZT8uaW5wdXQ/P3ooWigpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9aKCl9KX1jb25zdCB4dD1wKCJab2RDdXN0b20iLChlLHQpPT57JHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SZygpfSk7ZnVuY3Rpb24gUWEoZSl7Y29uc3QgdD1uZXcgRih7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBFcihlLHQpe3JldHVybiBpaCh4dCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiBDcihlLHQ9e30pe3JldHVybiBhaCh4dCxlLHQpfWZ1bmN0aW9uIE9yKGUsdCl7cmV0dXJuIGNoKGUsdCl9Y29uc3QgWWE9bGgsWGE9ZGgsUnI9cCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9Pnt4dC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socm4oZSx0KSl9fSk7ZnVuY3Rpb24gZWMoZSx0PXt9KXtjb25zdCBuPW5ldyBScih7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi5fKHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IHRjPSguLi5lKT0+cGgoe0NvZGVjOlB0LEJvb2xlYW46a3QsU3RyaW5nOmZ0fSwuLi5lKTtmdW5jdGlvbiBuYyhlKXtjb25zdCB0PUlyKCgpPT5FKFtmKGUpLFAoKSxqKCksQ24oKSx6KHQpLE8oZigpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIE1uKGUsdCl7cmV0dXJuIG5ldyB3cih7dHlwZToicGlwZSIsaW46Wm4oZSksb3V0OnR9KX1jb25zdCBydj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55OkdvLFpvZEFycmF5OmVyLFpvZEJhc2U2NDpUbixab2RCYXNlNjRVUkw6SW4sWm9kQmlnSW50Ond0LFpvZEJpZ0ludEZvcm1hdDpFbixab2RCb29sZWFuOmt0LFpvZENJRFJ2NDpTbixab2RDSURSdjY6em4sWm9kQ1VJRDp2bixab2RDVUlEMjpibixab2RDYXRjaDp5cixab2RDb2RlYzpQdCxab2RDcmVkaXRDYXJkOkJvLFpvZEN1c3RvbTp4dCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6TWUsWm9kRGF0ZTpSbixab2REZWZhdWx0OmhyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpucixab2RFMTY0OlBuLFpvZEVtYWlsOmhuLFpvZEVtb2ppOm1uLFpvZEVudW06S2UsWm9kRXhhY3RPcHRpb25hbDpObixab2RGaWxlOnVyLFpvZEZ1bmN0aW9uOnhyLFpvZEdVSUQ6Zm4sWm9kSUJBTjpWbyxab2RJUHY0OnduLFpvZElQdjY6JG4sWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LFpvZEluc3RhbmNlT2Y6UnIsWm9kSW50ZXJzZWN0aW9uOm9yLFpvZEpXVDp4bixab2RLU1VJRDprbixab2RMYXp5OlRyLFpvZExpdGVyYWw6Y3IsWm9kTUFDOkZvLFpvZE1hcDppcixab2ROYU46a3IsWm9kTmFub0lEOmduLFpvZE5ldmVyOllvLFpvZE5vbk9wdGlvbmFsOmpuLFpvZE51bGw6V28sWm9kTnVsbGFibGU6cHIsWm9kTnVtYmVyOl90LFpvZE51bWJlckZvcm1hdDpxZSxab2RPYmplY3Q6JHQsWm9kT3B0aW9uYWw6VHQsWm9kUGlwZTpJdCxab2RQcmVmYXVsdDptcixab2RQcmVwcm9jZXNzOndyLFpvZFByb21pc2U6UHIsWm9kUmVhZG9ubHk6JHIsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6ZnQsWm9kU3RyaW5nRm9ybWF0Ok0sWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDprZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpmcixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmZhLGJhc2U2NHVybDptYSxiaWdpbnQ6eGEsYm9vbGVhbjpqLGNhdGNoOl9yLGNoZWNrOlFhLGNpZHJ2NDpwYSxjaWRydjY6aGEsY29kZWM6SmEsY3JlZGl0Q2FyZDp2YSxjdWlkOnJhLGN1aWQyOnNhLGN1cnJlbmN5Q29kZTokYSxjdXN0b206RXIsZGF0ZTpBYSxkZXNjcmliZTpZYSxkaXNjcmltaW5hdGVkVW5pb246QW4sZTE2NDpnYSxlbWFpbDpLaSxlbW9qaTpuYSxlbnVtOlgsZXhhY3RPcHRpb25hbDpkcixmaWxlOkhhLGZsb2F0MzI6emEsZmxvYXQ2NDpUYSxmdW5jdGlvbjphdCxndWlkOldpLGhhc2g6U2EsaGV4OndhLGhvc3RuYW1lOmthLGh0dHBVcmw6dGEsaWJhbjpiYSxpbnN0YW5jZW9mOmVjLGludDpqdCxpbnQzMjpJYSxpbnQ2NDpFYSxpbnRlcnNlY3Rpb246enQsaW52ZXJ0Q29kZWM6S2EsaXB2NDp1YSxpcHY2OmRhLGpzb246bmMsand0OnlhLGtleW9mOlphLGtzdWlkOmNhLGxhenk6SXIsbGl0ZXJhbDptLGxvb3NlT2JqZWN0OlksbG9vc2VSZWNvcmQ6cWEsbWFjOmxhLG1hcDpEYSxtZXRhOlhhLG5hbjpWYSxuYW5vaWQ6b2EsbmF0aXZlRW51bTpVYSxuZXZlcjpWZSxub25vcHRpb25hbDp2cixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6RmEsbnVtYmVyOlAsb2JqZWN0Omcsb3B0aW9uYWw6VSxwYXJ0aWFsUmVjb3JkOk1hLHBpcGU6TXQscHJlZmF1bHQ6Z3IscHJlcHJvY2VzczpNbixwcm9taXNlOkdhLHJlYWRvbmx5OlNyLHJlY29yZDpPLHJlZmluZTpDcixzZXQ6TGEsc3RyaWN0T2JqZWN0Ok5hLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDpfYSxzdHJpbmdib29sOnRjLHN1Y2Nlc3M6QmEsc3VwZXJSZWZpbmU6T3Isc3ltYm9sOk9hLHRlbXBsYXRlTGl0ZXJhbDpXYSx0cmFuc2Zvcm06Wm4sdHVwbGU6c3IsdWludDMyOlBhLHVpbnQ2NDpDYSx1bGlkOmlhLHVuZGVmaW5lZDpzdCx1bmlvbjpFLHVua25vd246Wix1cmw6ZWEsdXVpZDpHaSx1dWlkdjQ6UWksdXVpZHY2OllpLHV1aWR2NzpYaSx2b2lkOlJhLHhpZDphYSx4b3I6amF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksX2g9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIGtoKGUpe0coe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiB3aCgpe3JldHVybiBHKCkuY3VzdG9tRXJyb3J9dmFyIGxvO2xvfHwobG89e30pO2Z1bmN0aW9uICRoKGUpe3JldHVybiB4aShtdCxlKX1mdW5jdGlvbiBzdihlKXtyZXR1cm4gRWkoZ3QsZSl9ZnVuY3Rpb24gaXYoZSl7cmV0dXJuIENpKHZ0LGUpfWZ1bmN0aW9uIGF2KGUpe3JldHVybiBPaShidCxlKX1jb25zdCBvYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LGRhdGU6c3YsZGF0ZXRpbWU6JGgsZHVyYXRpb246YXYsdGltZTppdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx3PXsuLi5ydiwuLi5udixpc286b2N9LGN2PW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIHV2KGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIG51KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIGx2KGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gZHYoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpsdihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIHB2KGUsdCl7cmV0dXJuIHcudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBpIG9mIHMpe2NvbnN0IGE9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGkpO2Euc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6YS5lcnJvci5pc3N1ZXMsaW5wdXQ6aSxwYXRoOltpXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gaXMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgYT1pcyhpLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChhKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgaT1pcyhlW3NdLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2l9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBodj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLGZ2PW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBSdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShSdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5odi5oYXModCk/UnQobik6IWZ2Lmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoUnQpKX1mdW5jdGlvbiBvdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gbXYoZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7Y29uc3QgYT1pcyhyW2ldLG5ldyBTZXQpO2lmKGE9PT1udWxsKWNvbnRpbnVlO2NvbnN0IGM9cy5nZXQoYSk7aWYoYz09PXZvaWQgMCl7cy5zZXQoYSxpKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7aX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7Y31gLGlucHV0OnIscGF0aDpbaV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGk9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBhPTA7Zm9yKGNvbnN0IGMgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZShjKS5zdWNjZXNzJiYrK2E+PWkpYnJlYWs7YTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7b3Uocyl9OyBmb3VuZCAke2F9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmYT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtvdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiBydShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP3cuYW55KCk6b2UoZSx0KX1jb25zdCBndj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIFNoKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiB3Lm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIHcubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPWR2KHIsdCksaT1vZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsaSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxpfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiB3Lm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIHcubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIHcuZW51bShyKTtjb25zdCBzPXIubWFwKGk9PncubGl0ZXJhbChpKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTp3LnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIHcubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBpPXsuLi5lLHR5cGU6c307cmV0dXJuIFNoKGksdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP3cubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTp3LnVuaW9uKHIpfWlmKCFuKXJldHVybiB3LmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPXcuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKHcuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayh3LnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayh3LnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayh3Lmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2sody5yZWdleChndikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayh3Lmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2sody5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayh3LmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2sody5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2sody5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2sody5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2sody5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayh3LmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKHcuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKHcuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2sody5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKHcuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKHcuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayh3LmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2sody5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2sody5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayh3LmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKHcudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKHcueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKHcua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP3cubnVtYmVyKCkuaW50KCk6dy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPXcuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289dy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxpPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGE9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP29lKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFtoLHZdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IGI9b2Uodix0KTtXZShyLGgsaS5oYXMoaCk/YjpiLm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IGg9ZS5wYXR0ZXJuUHJvcGVydGllcyx2PU9iamVjdC5rZXlzKGgpLGI9W107Zm9yKGNvbnN0ICQgb2Ygdil7Y29uc3QgVD1vZShoWyRdLHQpLGs9dy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKCQpKTtiLnB1c2gody5sb29zZVJlY29yZChrLFQpKX1jb25zdCB5PVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ5LnB1c2gody5vYmplY3QocikucGFzc3Rocm91Z2goKSkseS5wdXNoKC4uLmIpLHkubGVuZ3RoPT09MClvPXcub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoeS5sZW5ndGg9PT0xKW89eVswXTtlbHNle2xldCAkPXcuaW50ZXJzZWN0aW9uKHlbMF0seVsxXSk7Zm9yKGxldCBUPTI7VDx5Lmxlbmd0aDtUKyspJD13LmludGVyc2VjdGlvbigkLHlbVF0pO289JH1pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0ICQ9T2JqZWN0LmtleXMociksVD12Lm1hcChTPT5uZXcgUmVnRXhwKFMpKSxrPW87bz1vLmNoZWNrKFM9PntpZighTmUoUy52YWx1ZSkpcmV0dXJuO2NvbnN0IE49W107Zm9yKGNvbnN0IEsgb2YgT2JqZWN0LmtleXMoUy52YWx1ZSkpJC5pbmNsdWRlcyhLKXx8VC5zb21lKEg9PkgudGVzdChLKSl8fE4ucHVzaChLKTtOLmxlbmd0aCYmUy5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6TixpbnB1dDpTLnZhbHVlLGluc3Q6a30pfSl9fWVsc2V7Y29uc3QgaD13Lm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1oLnN0cmljdCgpOmE/bz1oLmNhdGNoYWxsKGEpOm89aC5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCx1PXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsbD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fHUhPT12b2lkIDB8fGwhPT12b2lkIDApe2xldCBoO2lmKGMpe2NvbnN0IHY9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO2g9b2Uodix0KX1vPXB2KG8se2tleVNjaGVtYTpoLG1pblByb3BlcnRpZXM6dSxtYXhQcm9wZXJ0aWVzOmx9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChoPT5vZShoLHQpKSxjPW51KGEsaSksdT1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpydShzLHQpLGw9dy50dXBsZShjKTtvPXU/bC5yZXN0KHUpOmwsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChoPT5vZShoLHQpKSxjPW51KGEsaSksdT1ydShlLmFkZGl0aW9uYWxJdGVtcyx0KSxsPXcudHVwbGUoYyk7bz11P2wucmVzdCh1KTpsLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT1vZShzLHQpO2xldCBhPXcuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz13LmFycmF5KHcuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1tdihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9vZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gb2UoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP3cuYW55KCk6dy5uZXZlcigpO2xldCBuPVNoKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKHU9Pm9lKHUsdCkpLGM9dy51bmlvbihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAodT0+b2UodSx0KSksYz13LnhvcihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOncuYW55KCk7ZWxzZXtsZXQgYT1vP246b2UoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgdT1jO3U8ZS5hbGxPZi5sZW5ndGg7dSsrKWE9dy5pbnRlcnNlY3Rpb24oYSxvZShlLmFsbE9mW3VdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj13Lm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPXcucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFSdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhUnQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSljdi5oYXMoYSl8fFdlKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiB6aChlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/dy5hbnkoKTp3Lm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz11dihuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/Z2V9O3JldHVybiBvZShuLHMpfWZ1bmN0aW9uIFRoKGUpe3JldHVybiBBaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6RShuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIHZ2KGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIFYoZSxuZShuLHtjaGVja3M6Wy4uLm4uY2hlY2tzPz9bXSwuLi50XX0pLHtwYXJlbnQ6ITB9KX1mdW5jdGlvbiBJaChlKXtyZXR1cm4gdnYoZS5vdXQsZS5jaGVja3MpfWZ1bmN0aW9uIGJ2KGUpe3JldHVybiBlLmluLl96b2QudHJhaXRzLmhhcygiJFpvZFRyYW5zZm9ybSIpP0loKGUpOmUuaW59ZnVuY3Rpb24gUGgoZSl7cmV0dXJuIEFpKGUse3BpcGU6dD0+YnYodC5fem9kLmRlZiksZGVmYXVsdDoodCxuKT0+bj9VKHQuX3pvZC5kZWYuaW5uZXJUeXBlKTp0LGNhdGNoOih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiB4aChlKXtyZXR1cm4gQWkoZSx7cGlwZTp0PT5JaCh0Ll96b2QuZGVmKSxwcmVmYXVsdDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24geXYoZSl7cmV0dXJuIENwKGZ0LGUpfWZ1bmN0aW9uIF92KGUpe3JldHVybiBOcChfdCxlKX1mdW5jdGlvbiBrdihlKXtyZXR1cm4gSHAoa3QsZSl9ZnVuY3Rpb24gd3YoZSl7cmV0dXJuIEJwKHd0LGUpfWZ1bmN0aW9uICR2KGUpe3JldHVybiBuaChSbixlKX1jb25zdCBFaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmlnaW50Ond2LGJvb2xlYW46a3YsZGF0ZTokdixudW1iZXI6X3Ysc3RyaW5nOnl2fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHN1PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6eXMsJGlucHV0OmVpLCRvdXRwdXQ6WHMsSU5WQUxJRDpuaSxORVZFUjpicyxUaW1lUHJlY2lzaW9uOlBpLFpvZEFueTpHbyxab2RBcnJheTplcixab2RCYXNlNjQ6VG4sWm9kQmFzZTY0VVJMOkluLFpvZEJpZ0ludDp3dCxab2RCaWdJbnRGb3JtYXQ6RW4sWm9kQm9vbGVhbjprdCxab2RDSURSdjQ6U24sWm9kQ0lEUnY2OnpuLFpvZENVSUQ6dm4sWm9kQ1VJRDI6Ym4sWm9kQ2F0Y2g6eXIsWm9kQ29kZWM6UHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6b2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6cmksWm9kQ3JlZGl0Q2FyZDpCbyxab2RDdXN0b206eHQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0Ok1lLFpvZERhdGU6Um4sWm9kRGVmYXVsdDpocixab2REaXNjcmltaW5hdGVkVW5pb246bnIsWm9kRTE2NDpQbixab2RFbWFpbDpobixab2RFbW9qaTptbixab2RFbnVtOktlLFpvZEVycm9yOnloLFpvZEV4YWN0T3B0aW9uYWw6Tm4sWm9kRmlsZTp1cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIGxvfSxab2RGdW5jdGlvbjp4cixab2RHVUlEOmZuLFpvZElCQU46Vm8sWm9kSVB2NDp3bixab2RJUHY2OiRuLFpvZElTT0RhdGU6Z3QsWm9kSVNPRGF0ZVRpbWU6bXQsWm9kSVNPRHVyYXRpb246YnQsWm9kSVNPVGltZTp2dCxab2RJbnN0YW5jZU9mOlJyLFpvZEludGVyc2VjdGlvbjpvcixab2RJc3N1ZUNvZGU6X2gsWm9kSldUOnhuLFpvZEtTVUlEOmtuLFpvZExhenk6VHIsWm9kTGl0ZXJhbDpjcixab2RNQUM6Rm8sWm9kTWFwOmlyLFpvZE5hTjprcixab2ROYW5vSUQ6Z24sWm9kTmV2ZXI6WW8sWm9kTm9uT3B0aW9uYWw6am4sWm9kTnVsbDpXbyxab2ROdWxsYWJsZTpwcixab2ROdW1iZXI6X3QsWm9kTnVtYmVyRm9ybWF0OnFlLFpvZE9iamVjdDokdCxab2RPcHRpb25hbDpUdCxab2RQaXBlOkl0LFpvZFByZWZhdWx0Om1yLFpvZFByZXByb2Nlc3M6d3IsWm9kUHJvbWlzZTpQcixab2RSZWFkb25seTokcixab2RSZWFsRXJyb3I6YWUsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6ZnQsWm9kU3RyaW5nRm9ybWF0Ok0sWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDprZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpmcixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmZhLGJhc2U2NHVybDptYSxiaWdpbnQ6eGEsYm9vbGVhbjpqLGNhdGNoOl9yLGNoZWNrOlFhLGNpZHJ2NDpwYSxjaWRydjY6aGEsY2xvbmU6Vixjb2RlYzpKYSxjb2VyY2U6RWgsY29tcGlsZTpzaSxjb25maWc6Ryxjb3JlOmdoLGNyZWRpdENhcmQ6dmEsY3VpZDpyYSxjdWlkMjpzYSxjdXJyZW5jeUNvZGU6JGEsY3VzdG9tOkVyLGRhdGU6QWEsZGVjb2RlOkxpLGRlY29kZUFzeW5jOkhpLGRlZXBQYXJ0aWFsOlRoLGRlc2NyaWJlOllhLGRpc2NyaW1pbmF0ZWRVbmlvbjpBbixlMTY0OmdhLGVtYWlsOktpLGVtb2ppOm5hLGVuY29kZTpEaSxlbmNvZGVBc3luYzpVaSxlbmRzV2l0aDpvbixlbnVtOlgsZXhhY3RPcHRpb25hbDpkcixmaWxlOkhhLGZsYXR0ZW5FcnJvcjpJbyxmbG9hdDMyOnphLGZsb2F0NjQ6VGEsZm9ybWF0RXJyb3I6UG8sZnJvbUpTT05TY2hlbWE6emgsZnVuY3Rpb246YXQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpWcyxnZXRFcnJvck1hcDp3aCxnbG9iYWxSZWdpc3RyeTpnZSxndDpFZSxndGU6ZGUsZ3VpZDpXaSxoYXNoOlNhLGhleDp3YSxob3N0bmFtZTprYSxodHRwVXJsOnRhLGliYW46YmEsaW5jbHVkZXM6dG4saW5wdXQ6UGgsaW5zdGFuY2VvZjplYyxpbnQ6anQsaW50MzI6SWEsaW50NjQ6RWEsaW50ZXJzZWN0aW9uOnp0LGludmVydENvZGVjOkthLGlwdjQ6dWEsaXB2NjpkYSxpc286b2MsanNvbjpuYyxqd3Q6eWEsa2V5b2Y6WmEsa3N1aWQ6Y2EsbGF6eTpJcixsZW5ndGg6cHQsbGl0ZXJhbDptLGxvY2FsZXM6WXMsbG9vc2VPYmplY3Q6WSxsb29zZVJlY29yZDpxYSxsb3dlcmNhc2U6WHQsbHQ6eGUsbHRlOmxlLG1hYzpsYSxtYXA6RGEsbWF4TGVuZ3RoOmR0LG1heFNpemU6R2UsbWVtb2l6ZXI6Wm8sbWV0YTpYYSxtaW1lOnNuLG1pbkxlbmd0aDpqZSxtaW5TaXplOkNlLG11bHRpcGxlT2Y6QmUsbmFuOlZhLG5hbm9pZDpvYSxuYXRpdmVFbnVtOlVhLG5lZ2F0aXZlOkRvLG5ldmVyOlZlLG5vbm5lZ2F0aXZlOlVvLG5vbm9wdGlvbmFsOnZyLG5vbnBvc2l0aXZlOkxvLG5vcm1hbGl6ZTphbixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6RmEsbnVtYmVyOlAsb2JqZWN0Omcsb3B0aW9uYWw6VSxvdXRwdXQ6eGgsb3ZlcndyaXRlOiRlLHBhcnNlOk5pLHBhcnNlQXN5bmM6amkscGFydGlhbFJlY29yZDpNYSxwaXBlOk10LHBvc2l0aXZlOnFvLHByZWZhdWx0OmdyLHByZXByb2Nlc3M6TW4scHJldHRpZnlFcnJvcjprcyxwcm9taXNlOkdhLHByb3BlcnRpZXM6cm4scHJvcGVydHk6SG8scmVhZG9ubHk6U3IscmVjb3JkOk8scmVmaW5lOkNyLHJlZ2V4Oll0LHJlZ2V4ZXM6Um8scmVnaXN0cnk6Tm8sc2FmZURlY29kZTpCaSxzYWZlRGVjb2RlQXN5bmM6Smksc2FmZUVuY29kZTpGaSxzYWZlRW5jb2RlQXN5bmM6Vmksc2FmZVBhcnNlOk1pLHNhZmVQYXJzZUFzeW5jOnFpLHNldDpMYSxzZXRFcnJvck1hcDpraCxzaXplOmx0LHNsdWdpZnk6ZG4sc3RhcnRzV2l0aDpubixzdHJpY3RPYmplY3Q6TmEsc3RyaW5nOmYsc3RyaW5nRm9ybWF0Ol9hLHN0cmluZ2Jvb2w6dGMsc3VjY2VzczpCYSxzdXBlclJlZmluZTpPcixzeW1ib2w6T2EsdGVtcGxhdGVMaXRlcmFsOldhLHRvSlNPTlNjaGVtYTpSaSx0b0xvd2VyQ2FzZTp1bix0b1VwcGVyQ2FzZTpsbix0b1pvZDpibyx0cmFuc2Zvcm06Wm4sdHJlZWlmeUVycm9yOl9zLHRyaW06Y24sdHVwbGU6c3IsdWludDMyOlBhLHVpbnQ2NDpDYSx1bGlkOmlhLHVuZGVmaW5lZDpzdCx1bmlvbjpFLHVua25vd246Wix1cHBlcmNhc2U6ZW4sdXJsOmVhLHV0aWw6dnMsdXVpZDpHaSx1dWlkdjQ6UWksdXVpZHY2OllpLHV1aWR2NzpYaSx2YWxpZGF0ZTpFbyx2YWxpZGF0ZUFzeW5jOkNvLHZvaWQ6UmEsd2l0aFBhcnNlcjppaSx4aWQ6YWEseG9yOmphfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFN2PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6eXMsJGlucHV0OmVpLCRvdXRwdXQ6WHMsSU5WQUxJRDpuaSxORVZFUjpicyxUaW1lUHJlY2lzaW9uOlBpLFpvZEFueTpHbyxab2RBcnJheTplcixab2RCYXNlNjQ6VG4sWm9kQmFzZTY0VVJMOkluLFpvZEJpZ0ludDp3dCxab2RCaWdJbnRGb3JtYXQ6RW4sWm9kQm9vbGVhbjprdCxab2RDSURSdjQ6U24sWm9kQ0lEUnY2OnpuLFpvZENVSUQ6dm4sWm9kQ1VJRDI6Ym4sWm9kQ2F0Y2g6eXIsWm9kQ29kZWM6UHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6b2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6cmksWm9kQ3JlZGl0Q2FyZDpCbyxab2RDdXN0b206eHQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0Ok1lLFpvZERhdGU6Um4sWm9kRGVmYXVsdDpocixab2REaXNjcmltaW5hdGVkVW5pb246bnIsWm9kRTE2NDpQbixab2RFbWFpbDpobixab2RFbW9qaTptbixab2RFbnVtOktlLFpvZEVycm9yOnloLFpvZEV4YWN0T3B0aW9uYWw6Tm4sWm9kRmlsZTp1cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIGxvfSxab2RGdW5jdGlvbjp4cixab2RHVUlEOmZuLFpvZElCQU46Vm8sWm9kSVB2NDp3bixab2RJUHY2OiRuLFpvZElTT0RhdGU6Z3QsWm9kSVNPRGF0ZVRpbWU6bXQsWm9kSVNPRHVyYXRpb246YnQsWm9kSVNPVGltZTp2dCxab2RJbnN0YW5jZU9mOlJyLFpvZEludGVyc2VjdGlvbjpvcixab2RJc3N1ZUNvZGU6X2gsWm9kSldUOnhuLFpvZEtTVUlEOmtuLFpvZExhenk6VHIsWm9kTGl0ZXJhbDpjcixab2RNQUM6Rm8sWm9kTWFwOmlyLFpvZE5hTjprcixab2ROYW5vSUQ6Z24sWm9kTmV2ZXI6WW8sWm9kTm9uT3B0aW9uYWw6am4sWm9kTnVsbDpXbyxab2ROdWxsYWJsZTpwcixab2ROdW1iZXI6X3QsWm9kTnVtYmVyRm9ybWF0OnFlLFpvZE9iamVjdDokdCxab2RPcHRpb25hbDpUdCxab2RQaXBlOkl0LFpvZFByZWZhdWx0Om1yLFpvZFByZXByb2Nlc3M6d3IsWm9kUHJvbWlzZTpQcixab2RSZWFkb25seTokcixab2RSZWFsRXJyb3I6YWUsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6ZnQsWm9kU3RyaW5nRm9ybWF0Ok0sWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDprZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpmcixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmZhLGJhc2U2NHVybDptYSxiaWdpbnQ6eGEsYm9vbGVhbjpqLGNhdGNoOl9yLGNoZWNrOlFhLGNpZHJ2NDpwYSxjaWRydjY6aGEsY2xvbmU6Vixjb2RlYzpKYSxjb2VyY2U6RWgsY29tcGlsZTpzaSxjb25maWc6Ryxjb3JlOmdoLGNyZWRpdENhcmQ6dmEsY3VpZDpyYSxjdWlkMjpzYSxjdXJyZW5jeUNvZGU6JGEsY3VzdG9tOkVyLGRhdGU6QWEsZGVjb2RlOkxpLGRlY29kZUFzeW5jOkhpLGRlZXBQYXJ0aWFsOlRoLGRlZmF1bHQ6c3UsZGVzY3JpYmU6WWEsZGlzY3JpbWluYXRlZFVuaW9uOkFuLGUxNjQ6Z2EsZW1haWw6S2ksZW1vamk6bmEsZW5jb2RlOkRpLGVuY29kZUFzeW5jOlVpLGVuZHNXaXRoOm9uLGVudW06WCxleGFjdE9wdGlvbmFsOmRyLGZpbGU6SGEsZmxhdHRlbkVycm9yOklvLGZsb2F0MzI6emEsZmxvYXQ2NDpUYSxmb3JtYXRFcnJvcjpQbyxmcm9tSlNPTlNjaGVtYTp6aCxmdW5jdGlvbjphdCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOlZzLGdldEVycm9yTWFwOndoLGdsb2JhbFJlZ2lzdHJ5OmdlLGd0OkVlLGd0ZTpkZSxndWlkOldpLGhhc2g6U2EsaGV4OndhLGhvc3RuYW1lOmthLGh0dHBVcmw6dGEsaWJhbjpiYSxpbmNsdWRlczp0bixpbnB1dDpQaCxpbnN0YW5jZW9mOmVjLGludDpqdCxpbnQzMjpJYSxpbnQ2NDpFYSxpbnRlcnNlY3Rpb246enQsaW52ZXJ0Q29kZWM6S2EsaXB2NDp1YSxpcHY2OmRhLGlzbzpvYyxqc29uOm5jLGp3dDp5YSxrZXlvZjpaYSxrc3VpZDpjYSxsYXp5OklyLGxlbmd0aDpwdCxsaXRlcmFsOm0sbG9jYWxlczpZcyxsb29zZU9iamVjdDpZLGxvb3NlUmVjb3JkOnFhLGxvd2VyY2FzZTpYdCxsdDp4ZSxsdGU6bGUsbWFjOmxhLG1hcDpEYSxtYXhMZW5ndGg6ZHQsbWF4U2l6ZTpHZSxtZW1vaXplcjpabyxtZXRhOlhhLG1pbWU6c24sbWluTGVuZ3RoOmplLG1pblNpemU6Q2UsbXVsdGlwbGVPZjpCZSxuYW46VmEsbmFub2lkOm9hLG5hdGl2ZUVudW06VWEsbmVnYXRpdmU6RG8sbmV2ZXI6VmUsbm9ubmVnYXRpdmU6VW8sbm9ub3B0aW9uYWw6dnIsbm9ucG9zaXRpdmU6TG8sbm9ybWFsaXplOmFuLG51bGw6Q24sbnVsbGFibGU6aXQsbnVsbGlzaDpGYSxudW1iZXI6UCxvYmplY3Q6ZyxvcHRpb25hbDpVLG91dHB1dDp4aCxvdmVyd3JpdGU6JGUscGFyc2U6TmkscGFyc2VBc3luYzpqaSxwYXJ0aWFsUmVjb3JkOk1hLHBpcGU6TXQscG9zaXRpdmU6cW8scHJlZmF1bHQ6Z3IscHJlcHJvY2VzczpNbixwcmV0dGlmeUVycm9yOmtzLHByb21pc2U6R2EscHJvcGVydGllczpybixwcm9wZXJ0eTpIbyxyZWFkb25seTpTcixyZWNvcmQ6TyxyZWZpbmU6Q3IscmVnZXg6WXQscmVnZXhlczpSbyxyZWdpc3RyeTpObyxzYWZlRGVjb2RlOkJpLHNhZmVEZWNvZGVBc3luYzpKaSxzYWZlRW5jb2RlOkZpLHNhZmVFbmNvZGVBc3luYzpWaSxzYWZlUGFyc2U6TWksc2FmZVBhcnNlQXN5bmM6cWksc2V0OkxhLHNldEVycm9yTWFwOmtoLHNpemU6bHQsc2x1Z2lmeTpkbixzdGFydHNXaXRoOm5uLHN0cmljdE9iamVjdDpOYSxzdHJpbmc6ZixzdHJpbmdGb3JtYXQ6X2Esc3RyaW5nYm9vbDp0YyxzdWNjZXNzOkJhLHN1cGVyUmVmaW5lOk9yLHN5bWJvbDpPYSx0ZW1wbGF0ZUxpdGVyYWw6V2EsdG9KU09OU2NoZW1hOlJpLHRvTG93ZXJDYXNlOnVuLHRvVXBwZXJDYXNlOmxuLHRvWm9kOmJvLHRyYW5zZm9ybTpabix0cmVlaWZ5RXJyb3I6X3MsdHJpbTpjbix0dXBsZTpzcix1aW50MzI6UGEsdWludDY0OkNhLHVsaWQ6aWEsdW5kZWZpbmVkOnN0LHVuaW9uOkUsdW5rbm93bjpaLHVwcGVyY2FzZTplbix1cmw6ZWEsdXRpbDp2cyx1dWlkOkdpLHV1aWR2NDpRaSx1dWlkdjY6WWksdXVpZHY3OlhpLHZhbGlkYXRlOkVvLHZhbGlkYXRlQXN5bmM6Q28sdm9pZDpSYSx3aXRoUGFyc2VyOmlpLHhpZDphYSx4b3I6amEsejpzdX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxVZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixBcj0iMi4wIixXPUVyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLENoPUUoW2YoKSxQKCkuaW50KCldKSxPaD1mKCk7WSh7dHRsOlAoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpQKCkub3B0aW9uYWwoKX0pO2NvbnN0IHp2PWcoe3R0bDpQKCkub3B0aW9uYWwoKX0pLFR2PWcoe3Rhc2tJZDpmKCl9KSxyYz1ZKHtwcm9ncmVzc1Rva2VuOkNoLm9wdGlvbmFsKCksW1VlXTpUdi5vcHRpb25hbCgpfSksaGU9Zyh7X21ldGE6cmMub3B0aW9uYWwoKX0pLHFuPWhlLmV4dGVuZCh7dGFzazp6di5vcHRpb25hbCgpfSksSXY9ZT0+cW4uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsZWU9Zyh7bWV0aG9kOmYoKSxwYXJhbXM6aGUubG9vc2UoKS5vcHRpb25hbCgpfSkseWU9Zyh7X21ldGE6cmMub3B0aW9uYWwoKX0pLF9lPWcoe21ldGhvZDpmKCkscGFyYW1zOnllLmxvb3NlKCkub3B0aW9uYWwoKX0pLHRlPVkoe19tZXRhOnJjLm9wdGlvbmFsKCl9KSxEbj1FKFtmKCksUCgpLmludCgpXSksUmg9Zyh7anNvbnJwYzptKEFyKSxpZDpEbiwuLi5lZS5zaGFwZX0pLnN0cmljdCgpLGl1PWU9PlJoLnNhZmVQYXJzZShlKS5zdWNjZXNzLEFoPWcoe2pzb25ycGM6bShBciksLi4uX2Uuc2hhcGV9KS5zdHJpY3QoKSxQdj1lPT5BaC5zYWZlUGFyc2UoZSkuc3VjY2VzcyxzYz1nKHtqc29ucnBjOm0oQXIpLGlkOkRuLHJlc3VsdDp0ZX0pLnN0cmljdCgpLHRvPWU9PnNjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBxOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkocXx8KHE9e30pKTtjb25zdCBpYz1nKHtqc29ucnBjOm0oQXIpLGlkOkRuLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpQKCkuaW50KCksbWVzc2FnZTpmKCksZGF0YTpaKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCkseHY9ZT0+aWMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsRXY9RShbUmgsQWgsc2MsaWNdKTtFKFtzYyxpY10pO2NvbnN0IGFjPXRlLnN0cmljdCgpLEN2PXllLmV4dGVuZCh7cmVxdWVzdElkOkRuLm9wdGlvbmFsKCkscmVhc29uOmYoKS5vcHRpb25hbCgpfSksY2M9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6Q3Z9KSxPdj1nKHtzcmM6ZigpLG1pbWVUeXBlOmYoKS5vcHRpb25hbCgpLHNpemVzOnooZigpKS5vcHRpb25hbCgpLHRoZW1lOlgoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLExuPWcoe2ljb25zOnooT3YpLm9wdGlvbmFsKCl9KSxjdD1nKHtuYW1lOmYoKSx0aXRsZTpmKCkub3B0aW9uYWwoKX0pLFpyPWN0LmV4dGVuZCh7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsdmVyc2lvbjpmKCksd2Vic2l0ZVVybDpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKX0pLFJ2PXp0KGcoe2FwcGx5RGVmYXVsdHM6aigpLm9wdGlvbmFsKCl9KSxPKGYoKSxaKCkpKSxBdj1NbihlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLHp0KGcoe2Zvcm06UnYub3B0aW9uYWwoKSx1cmw6Vy5vcHRpb25hbCgpfSksTyhmKCksWigpKS5vcHRpb25hbCgpKSksWnY9WSh7bGlzdDpXLm9wdGlvbmFsKCksY2FuY2VsOlcub3B0aW9uYWwoKSxyZXF1ZXN0czpZKHtzYW1wbGluZzpZKHtjcmVhdGVNZXNzYWdlOlcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246WSh7Y3JlYXRlOlcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksTnY9WSh7bGlzdDpXLm9wdGlvbmFsKCksY2FuY2VsOlcub3B0aW9uYWwoKSxyZXF1ZXN0czpZKHt0b29sczpZKHtjYWxsOlcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksanY9Zyh7ZXhwZXJpbWVudGFsOk8oZigpLFcpLm9wdGlvbmFsKCksc2FtcGxpbmc6Zyh7Y29udGV4dDpXLm9wdGlvbmFsKCksdG9vbHM6Vy5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpBdi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOmooKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpadi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6TyhmKCksVykub3B0aW9uYWwoKX0pLE12PWhlLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6anYsY2xpZW50SW5mbzpacn0pLHF2PWVlLmV4dGVuZCh7bWV0aG9kOm0oImluaXRpYWxpemUiKSxwYXJhbXM6TXZ9KSxEdj1nKHtleHBlcmltZW50YWw6TyhmKCksVykub3B0aW9uYWwoKSxsb2dnaW5nOlcub3B0aW9uYWwoKSxjb21wbGV0aW9uczpXLm9wdGlvbmFsKCkscHJvbXB0czpnKHtsaXN0Q2hhbmdlZDpqKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCkscmVzb3VyY2VzOmcoe3N1YnNjcmliZTpqKCkub3B0aW9uYWwoKSxsaXN0Q2hhbmdlZDpqKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdG9vbHM6Zyh7bGlzdENoYW5nZWQ6aigpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOk52Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpPKGYoKSxXKS5vcHRpb25hbCgpfSksTHY9dGUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246ZigpLGNhcGFiaWxpdGllczpEdixzZXJ2ZXJJbmZvOlpyLGluc3RydWN0aW9uczpmKCkub3B0aW9uYWwoKX0pLFV2PV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6eWUub3B0aW9uYWwoKX0pLE5yPWVlLmV4dGVuZCh7bWV0aG9kOm0oInBpbmciKSxwYXJhbXM6aGUub3B0aW9uYWwoKX0pLEh2PWcoe3Byb2dyZXNzOlAoKSx0b3RhbDpVKFAoKSksbWVzc2FnZTpVKGYoKSl9KSxGdj1nKHsuLi55ZS5zaGFwZSwuLi5Idi5zaGFwZSxwcm9ncmVzc1Rva2VuOkNofSksdWM9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpGdn0pLEJ2PWhlLmV4dGVuZCh7Y3Vyc29yOk9oLm9wdGlvbmFsKCl9KSxVbj1lZS5leHRlbmQoe3BhcmFtczpCdi5vcHRpb25hbCgpfSksSG49dGUuZXh0ZW5kKHtuZXh0Q3Vyc29yOk9oLm9wdGlvbmFsKCl9KSxWdj1YKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLEZuPWcoe3Rhc2tJZDpmKCksc3RhdHVzOlZ2LHR0bDpFKFtQKCksQ24oKV0pLGNyZWF0ZWRBdDpmKCksbGFzdFVwZGF0ZWRBdDpmKCkscG9sbEludGVydmFsOlUoUCgpKSxzdGF0dXNNZXNzYWdlOlUoZigpKX0pLGxjPXRlLmV4dGVuZCh7dGFzazpGbn0pLEp2PXllLm1lcmdlKEZuKSxwbz1fZS5leHRlbmQoe21ldGhvZDptKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpKdn0pLGRjPWVlLmV4dGVuZCh7bWV0aG9kOm0oInRhc2tzL2dldCIpLHBhcmFtczpoZS5leHRlbmQoe3Rhc2tJZDpmKCl9KX0pLHBjPXRlLm1lcmdlKEZuKSxoYz1lZS5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6aGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KTt0ZS5sb29zZSgpO2NvbnN0IGZjPVVuLmV4dGVuZCh7bWV0aG9kOm0oInRhc2tzL2xpc3QiKX0pLG1jPUhuLmV4dGVuZCh7dGFza3M6eihGbil9KSxnYz1lZS5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6aGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KSxLdj10ZS5tZXJnZShGbiksWmg9Zyh7dXJpOmYoKSxtaW1lVHlwZTpVKGYoKSksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksTmg9WmguZXh0ZW5kKHt0ZXh0OmYoKX0pLHZjPWYoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksamg9WmguZXh0ZW5kKHtibG9iOnZjfSksQm49WChbInVzZXIiLCJhc3Npc3RhbnQiXSksRXQ9Zyh7YXVkaWVuY2U6eihCbikub3B0aW9uYWwoKSxwcmlvcml0eTpQKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDokaCh7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLE1oPWcoey4uLmN0LnNoYXBlLC4uLkxuLnNoYXBlLHVyaTpmKCksZGVzY3JpcHRpb246VShmKCkpLG1pbWVUeXBlOlUoZigpKSxzaXplOlUoUCgpKSxhbm5vdGF0aW9uczpFdC5vcHRpb25hbCgpLF9tZXRhOlUoWSh7fSkpfSksV3Y9Zyh7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsdXJpVGVtcGxhdGU6ZigpLGRlc2NyaXB0aW9uOlUoZigpKSxtaW1lVHlwZTpVKGYoKSksYW5ub3RhdGlvbnM6RXQub3B0aW9uYWwoKSxfbWV0YTpVKFkoe30pKX0pLEd2PVVuLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy9saXN0Iil9KSxxaD1Ibi5leHRlbmQoe3Jlc291cmNlczp6KE1oKX0pLFF2PVVuLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksWXY9SG4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczp6KFd2KX0pLGJjPWhlLmV4dGVuZCh7dXJpOmYoKX0pLFh2PWJjLGViPWVlLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy9yZWFkIikscGFyYW1zOlh2fSksRGg9dGUuZXh0ZW5kKHtjb250ZW50czp6KEUoW05oLGpoXSkpfSksdGI9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KSxuYj1iYyxvYj1lZS5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOm5ifSkscmI9YmMsc2I9ZWUuZXh0ZW5kKHttZXRob2Q6bSgicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOnJifSksaWI9eWUuZXh0ZW5kKHt1cmk6ZigpfSksYWI9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczppYn0pLGNiPWcoe25hbWU6ZigpLGRlc2NyaXB0aW9uOlUoZigpKSxyZXF1aXJlZDpVKGooKSl9KSx1Yj1nKHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSxkZXNjcmlwdGlvbjpVKGYoKSksYXJndW1lbnRzOlUoeihjYikpLF9tZXRhOlUoWSh7fSkpfSksbGI9VW4uZXh0ZW5kKHttZXRob2Q6bSgicHJvbXB0cy9saXN0Iil9KSxkYj1Ibi5leHRlbmQoe3Byb21wdHM6eih1Yil9KSxwYj1oZS5leHRlbmQoe25hbWU6ZigpLGFyZ3VtZW50czpPKGYoKSxmKCkpLm9wdGlvbmFsKCl9KSxoYj1lZS5leHRlbmQoe21ldGhvZDptKCJwcm9tcHRzL2dldCIpLHBhcmFtczpwYn0pLHljPWcoe3R5cGU6bSgidGV4dCIpLHRleHQ6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksX2M9Zyh7dHlwZTptKCJpbWFnZSIpLGRhdGE6dmMsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksa2M9Zyh7dHlwZTptKCJhdWRpbyIpLGRhdGE6dmMsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksZmI9Zyh7dHlwZTptKCJ0b29sX3VzZSIpLG5hbWU6ZigpLGlkOmYoKSxpbnB1dDpPKGYoKSxaKCkpLF9tZXRhOk8oZigpLFooKSkub3B0aW9uYWwoKX0pLExoPWcoe3R5cGU6bSgicmVzb3VyY2UiKSxyZXNvdXJjZTpFKFtOaCxqaF0pLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksVWg9TWguZXh0ZW5kKHt0eXBlOm0oInJlc291cmNlX2xpbmsiKX0pLFZuPUUoW3ljLF9jLGtjLFVoLExoXSksbWI9Zyh7cm9sZTpCbixjb250ZW50OlZufSksZ2I9dGUuZXh0ZW5kKHtkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtZXNzYWdlczp6KG1iKX0pLHZiPV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6eWUub3B0aW9uYWwoKX0pLGJiPWcoe3RpdGxlOmYoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpqKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6aigpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6aigpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpqKCkub3B0aW9uYWwoKX0pLHliPWcoe3Rhc2tTdXBwb3J0OlgoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSx3Yz1nKHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTpnKHt0eXBlOm0oIm9iamVjdCIpLHByb3BlcnRpZXM6TyhmKCksVykub3B0aW9uYWwoKSxyZXF1aXJlZDp6KGYoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKFooKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6bSgib2JqZWN0IikscHJvcGVydGllczpPKGYoKSxXKS5vcHRpb25hbCgpLHJlcXVpcmVkOnooZigpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOmJiLm9wdGlvbmFsKCksZXhlY3V0aW9uOnliLm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksSGg9VW4uZXh0ZW5kKHttZXRob2Q6bSgidG9vbHMvbGlzdCIpfSksX2I9SG4uZXh0ZW5kKHt0b29sczp6KHdjKX0pLGpyPXRlLmV4dGVuZCh7Y29udGVudDp6KFZuKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpPKGYoKSxaKCkpLm9wdGlvbmFsKCksaXNFcnJvcjpqKCkub3B0aW9uYWwoKX0pO2pyLm9yKHRlLmV4dGVuZCh7dG9vbFJlc3VsdDpaKCl9KSk7Y29uc3Qga2I9cW4uZXh0ZW5kKHtuYW1lOmYoKSxhcmd1bWVudHM6TyhmKCksWigpKS5vcHRpb25hbCgpfSksRmg9ZWUuZXh0ZW5kKHttZXRob2Q6bSgidG9vbHMvY2FsbCIpLHBhcmFtczprYn0pLHdiPV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KTtnKHthdXRvUmVmcmVzaDpqKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpQKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCBCaD1YKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSwkYj1oZS5leHRlbmQoe2xldmVsOkJofSksU2I9ZWUuZXh0ZW5kKHttZXRob2Q6bSgibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczokYn0pLHpiPXllLmV4dGVuZCh7bGV2ZWw6QmgsbG9nZ2VyOmYoKS5vcHRpb25hbCgpLGRhdGE6WigpfSksVGI9X2UuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOnpifSksSWI9Zyh7bmFtZTpmKCkub3B0aW9uYWwoKX0pLFBiPWcoe2hpbnRzOnooSWIpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OlAoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpQKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OlAoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSx4Yj1nKHttb2RlOlgoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSxFYj1nKHt0eXBlOm0oInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmYoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDp6KFZuKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpqKCkub3B0aW9uYWwoKSxfbWV0YTpPKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxDYj1BbigidHlwZSIsW3ljLF9jLGtjXSksaG89QW4oInR5cGUiLFt5YyxfYyxrYyxmYixFYl0pLE9iPWcoe3JvbGU6Qm4sY29udGVudDpFKFtobyx6KGhvKV0pLF9tZXRhOk8oZigpLFooKSkub3B0aW9uYWwoKX0pLFJiPXFuLmV4dGVuZCh7bWVzc2FnZXM6eihPYiksbW9kZWxQcmVmZXJlbmNlczpQYi5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpmKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDpYKFsibm9uZSIsInRoaXNTZXJ2ZXIiLCJhbGxTZXJ2ZXJzIl0pLm9wdGlvbmFsKCksdGVtcGVyYXR1cmU6UCgpLm9wdGlvbmFsKCksbWF4VG9rZW5zOlAoKS5pbnQoKSxzdG9wU2VxdWVuY2VzOnooZigpKS5vcHRpb25hbCgpLG1ldGFkYXRhOlcub3B0aW9uYWwoKSx0b29sczp6KHdjKS5vcHRpb25hbCgpLHRvb2xDaG9pY2U6eGIub3B0aW9uYWwoKX0pLEFiPWVlLmV4dGVuZCh7bWV0aG9kOm0oInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6UmJ9KSxWaD10ZS5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOlUoWChbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoZigpKSkscm9sZTpCbixjb250ZW50OkNifSksSmg9dGUuZXh0ZW5kKHttb2RlbDpmKCksc3RvcFJlYXNvbjpVKFgoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIiwidG9vbFVzZSJdKS5vcihmKCkpKSxyb2xlOkJuLGNvbnRlbnQ6RShbaG8seihobyldKX0pLFpiPWcoe3R5cGU6bSgiYm9vbGVhbiIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGRlZmF1bHQ6aigpLm9wdGlvbmFsKCl9KSxOYj1nKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbkxlbmd0aDpQKCkub3B0aW9uYWwoKSxtYXhMZW5ndGg6UCgpLm9wdGlvbmFsKCksZm9ybWF0OlgoWyJlbWFpbCIsInVyaSIsImRhdGUiLCJkYXRlLXRpbWUiXSkub3B0aW9uYWwoKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksamI9Zyh7dHlwZTpYKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5pbXVtOlAoKS5vcHRpb25hbCgpLG1heGltdW06UCgpLm9wdGlvbmFsKCksZGVmYXVsdDpQKCkub3B0aW9uYWwoKX0pLE1iPWcoe3R5cGU6bSgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZW51bTp6KGYoKSksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLHFiPWcoe3R5cGU6bSgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksb25lT2Y6eihnKHtjb25zdDpmKCksdGl0bGU6ZigpfSkpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSxEYj1nKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGVudW06eihmKCkpLGVudW1OYW1lczp6KGYoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksTGI9RShbTWIscWJdKSxVYj1nKHt0eXBlOm0oImFycmF5IiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluSXRlbXM6UCgpLm9wdGlvbmFsKCksbWF4SXRlbXM6UCgpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTptKCJzdHJpbmciKSxlbnVtOnooZigpKX0pLGRlZmF1bHQ6eihmKCkpLm9wdGlvbmFsKCl9KSxIYj1nKHt0eXBlOm0oImFycmF5IiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluSXRlbXM6UCgpLm9wdGlvbmFsKCksbWF4SXRlbXM6UCgpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6eihnKHtjb25zdDpmKCksdGl0bGU6ZigpfSkpfSksZGVmYXVsdDp6KGYoKSkub3B0aW9uYWwoKX0pLEZiPUUoW1ViLEhiXSksQmI9RShbRGIsTGIsRmJdKSxWYj1FKFtCYixaYixOYixqYl0pLEpiPXFuLmV4dGVuZCh7bW9kZTptKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmYoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTptKCJvYmplY3QiKSxwcm9wZXJ0aWVzOk8oZigpLFZiKSxyZXF1aXJlZDp6KGYoKSkub3B0aW9uYWwoKX0pfSksS2I9cW4uZXh0ZW5kKHttb2RlOm0oInVybCIpLG1lc3NhZ2U6ZigpLGVsaWNpdGF0aW9uSWQ6ZigpLHVybDpmKCkudXJsKCl9KSxXYj1FKFtKYixLYl0pLEdiPWVlLmV4dGVuZCh7bWV0aG9kOm0oImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpXYn0pLFFiPXllLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpmKCl9KSxZYj1fZS5leHRlbmQoe21ldGhvZDptKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOlFifSksWGI9dGUuZXh0ZW5kKHthY3Rpb246WChbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDpNbihlPT5lPT09bnVsbD92b2lkIDA6ZSxPKGYoKSxFKFtmKCksUCgpLGooKSx6KGYoKSldKSkub3B0aW9uYWwoKSl9KSxleT1nKHt0eXBlOm0oInJlZi9yZXNvdXJjZSIpLHVyaTpmKCl9KSx0eT1nKHt0eXBlOm0oInJlZi9wcm9tcHQiKSxuYW1lOmYoKX0pLG55PWhlLmV4dGVuZCh7cmVmOkUoW3R5LGV5XSksYXJndW1lbnQ6Zyh7bmFtZTpmKCksdmFsdWU6ZigpfSksY29udGV4dDpnKHthcmd1bWVudHM6TyhmKCksZigpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLG95PWVlLmV4dGVuZCh7bWV0aG9kOm0oImNvbXBsZXRpb24vY29tcGxldGUiKSxwYXJhbXM6bnl9KSxyeT10ZS5leHRlbmQoe2NvbXBsZXRpb246WSh7dmFsdWVzOnooZigpKS5tYXgoMTAwKSx0b3RhbDpVKFAoKS5pbnQoKSksaGFzTW9yZTpVKGooKSl9KX0pLHN5PWcoe3VyaTpmKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6ZigpLm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksaXk9ZWUuZXh0ZW5kKHttZXRob2Q6bSgicm9vdHMvbGlzdCIpLHBhcmFtczpoZS5vcHRpb25hbCgpfSksYXk9dGUuZXh0ZW5kKHtyb290czp6KHN5KX0pLGN5PV9lLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KTtFKFtOcixxdixveSxTYixoYixsYixHdixRdixlYixvYixzYixGaCxIaCxkYyxoYyxmYyxnY10pO0UoW2NjLHVjLFV2LGN5LHBvXSk7RShbYWMsVmgsSmgsWGIsYXkscGMsbWMsbGNdKTtFKFtOcixBYixHYixpeSxkYyxoYyxmYyxnY10pO0UoW2NjLHVjLFRiLGFiLHRiLHdiLHZiLHBvLFliXSk7RShbYWMsTHYscnksZ2IsZGIscWgsWXYsRGgsanIsX2IscGMsbWMsbGNdKTtjbGFzcyBSIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKGBNQ1AgZXJyb3IgJHt0fTogJHtufWApLHRoaXMuY29kZT10LHRoaXMuZGF0YT1vLHRoaXMubmFtZT0iTWNwRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCxuLG8pe2lmKHQ9PT1xLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQmJm8pe2NvbnN0IHI9bztpZihyLmVsaWNpdGF0aW9ucylyZXR1cm4gbmV3IHV5KHIuZWxpY2l0YXRpb25zLG4pfXJldHVybiBuZXcgUih0LG4sbyl9fWNsYXNzIHV5IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcih0LG49YFVSTCBlbGljaXRhdGlvbiR7dC5sZW5ndGg+MT8icyI6IiJ9IHJlcXVpcmVkYCl7c3VwZXIocS5VcmxFbGljaXRhdGlvblJlcXVpcmVkLG4se2VsaWNpdGF0aW9uczp0fSl9Z2V0IGVsaWNpdGF0aW9ucygpe3JldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucz8/W119fWZ1bmN0aW9uIExlKGUpe3JldHVybiBlPT09ImNvbXBsZXRlZCJ8fGU9PT0iZmFpbGVkInx8ZT09PSJjYW5jZWxsZWQifW5ldyBTZXQoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OSIpO2Z1bmN0aW9uIGF1KGUpe2NvbnN0IG49ZXYoZSk/Lm1ldGhvZDtpZighbil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBpcyBtaXNzaW5nIGEgbWV0aG9kIGxpdGVyYWwiKTtjb25zdCBvPXR2KG4pO2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBtZXRob2QgbGl0ZXJhbCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIG99ZnVuY3Rpb24gY3UoZSx0KXtjb25zdCBuPXZoKGUsdCk7aWYoIW4uc3VjY2Vzcyl0aHJvdyBuLmVycm9yO3JldHVybiBuLmRhdGF9Y29uc3QgbHk9NmU0O2NsYXNzIGR5e2NvbnN0cnVjdG9yKHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkPTAsdGhpcy5fcmVxdWVzdEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzPW5ldyBNYXAsdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3RpbWVvdXRJbmZvPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnM9bmV3IFNldCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzPW5ldyBNYXAsdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKGNjLG49Pnt0aGlzLl9vbmNhbmNlbChuKX0pLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih1YyxuPT57dGhpcy5fb25wcm9ncmVzcyhuKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoTnIsbj0+KHt9KSksdGhpcy5fdGFza1N0b3JlPXQ/LnRhc2tTdG9yZSx0aGlzLl90YXNrTWVzc2FnZVF1ZXVlPXQ/LnRhc2tNZXNzYWdlUXVldWUsdGhpcy5fdGFza1N0b3JlJiYodGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihkYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBSKHEuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuey4uLnJ9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihoYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hc3luYygpPT57Y29uc3Qgcz1uLnBhcmFtcy50YXNrSWQ7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7bGV0IGE7Zm9yKDthPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZShzLG8uc2Vzc2lvbklkKTspe2lmKGEudHlwZT09PSJyZXNwb25zZSJ8fGEudHlwZT09PSJlcnJvciIpe2NvbnN0IGM9YS5tZXNzYWdlLHU9Yy5pZCxsPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHUpO2lmKGwpaWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUodSksYS50eXBlPT09InJlc3BvbnNlIilsKGMpO2Vsc2V7Y29uc3QgaD1jLHY9bmV3IFIoaC5lcnJvci5jb2RlLGguZXJyb3IubWVzc2FnZSxoLmVycm9yLmRhdGEpO2wodil9ZWxzZXtjb25zdCBoPWEudHlwZT09PSJyZXNwb25zZSI/IlJlc3BvbnNlIjoiRXJyb3IiO3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke2h9IGhhbmRsZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3V9YCkpfWNvbnRpbnVlfWF3YWl0IHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLm1lc3NhZ2Use3JlbGF0ZWRSZXF1ZXN0SWQ6by5yZXF1ZXN0SWR9KX19Y29uc3QgaT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhzLG8uc2Vzc2lvbklkKTtpZighaSl0aHJvdyBuZXcgUihxLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke3N9YCk7aWYoIUxlKGkuc3RhdHVzKSlyZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclRhc2tVcGRhdGUocyxvLnNpZ25hbCksYXdhaXQgcigpO2lmKExlKGkuc3RhdHVzKSl7Y29uc3QgYT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdChzLG8uc2Vzc2lvbklkKTtyZXR1cm4gdGhpcy5fY2xlYXJUYXNrUXVldWUocyksey4uLmEsX21ldGE6ey4uLmEuX21ldGEsW1VlXTp7dGFza0lkOnN9fX19cmV0dXJuIGF3YWl0IHIoKX07cmV0dXJuIGF3YWl0IHIoKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoZmMsYXN5bmMobixvKT0+e3RyeXtjb25zdHt0YXNrczpyLG5leHRDdXJzb3I6c309YXdhaXQgdGhpcy5fdGFza1N0b3JlLmxpc3RUYXNrcyhuLnBhcmFtcz8uY3Vyc29yLG8uc2Vzc2lvbklkKTtyZXR1cm57dGFza3M6cixuZXh0Q3Vyc29yOnMsX21ldGE6e319fWNhdGNoKHIpe3Rocm93IG5ldyBSKHEuSW52YWxpZFBhcmFtcyxgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihnYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgUihxLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke24ucGFyYW1zLnRhc2tJZH1gKTtpZihMZShyLnN0YXR1cykpdGhyb3cgbmV3IFIocS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Iuc3RhdHVzfWApO2F3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKG4ucGFyYW1zLnRhc2tJZCwiY2FuY2VsbGVkIiwiQ2xpZW50IGNhbmNlbGxlZCB0YXNrIGV4ZWN1dGlvbi4iLG8uc2Vzc2lvbklkKSx0aGlzLl9jbGVhclRhc2tRdWV1ZShuLnBhcmFtcy50YXNrSWQpO2NvbnN0IHM9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcyl0aHJvdyBuZXcgUihxLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kIGFmdGVyIGNhbmNlbGxhdGlvbjogJHtuLnBhcmFtcy50YXNrSWR9YCk7cmV0dXJue19tZXRhOnt9LC4uLnN9fWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBSP3I6bmV3IFIocS5JbnZhbGlkUmVxdWVzdCxgRmFpbGVkIHRvIGNhbmNlbCB0YXNrOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pKX1hc3luYyBfb25jYW5jZWwodCl7aWYoIXQucGFyYW1zLnJlcXVlc3RJZClyZXR1cm47dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LnBhcmFtcy5yZXF1ZXN0SWQpPy5hYm9ydCh0LnBhcmFtcy5yZWFzb24pfV9zZXR1cFRpbWVvdXQodCxuLG8scixzPSExKXt0aGlzLl90aW1lb3V0SW5mby5zZXQodCx7dGltZW91dElkOnNldFRpbWVvdXQocixuKSxzdGFydFRpbWU6RGF0ZS5ub3coKSx0aW1lb3V0Om4sbWF4VG90YWxUaW1lb3V0Om8scmVzZXRUaW1lb3V0T25Qcm9ncmVzczpzLG9uVGltZW91dDpyfSl9X3Jlc2V0VGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtpZighbilyZXR1cm4hMTtjb25zdCBvPURhdGUubm93KCktbi5zdGFydFRpbWU7aWYobi5tYXhUb3RhbFRpbWVvdXQmJm8+PW4ubWF4VG90YWxUaW1lb3V0KXRocm93IHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSxSLmZyb21FcnJvcihxLlJlcXVlc3RUaW1lb3V0LCJNYXhpbXVtIHRvdGFsIHRpbWVvdXQgZXhjZWVkZWQiLHttYXhUb3RhbFRpbWVvdXQ6bi5tYXhUb3RhbFRpbWVvdXQsdG90YWxFbGFwc2VkOm99KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSxuLnRpbWVvdXRJZD1zZXRUaW1lb3V0KG4ub25UaW1lb3V0LG4udGltZW91dCksITB9X2NsZWFudXBUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO24mJihjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSl9YXN5bmMgY29ubmVjdCh0KXtpZih0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uIik7dGhpcy5fdHJhbnNwb3J0PXQ7Y29uc3Qgbj10aGlzLnRyYW5zcG9ydD8ub25jbG9zZTt0aGlzLl90cmFuc3BvcnQub25jbG9zZT0oKT0+e24/LigpLHRoaXMuX29uY2xvc2UoKX07Y29uc3Qgbz10aGlzLnRyYW5zcG9ydD8ub25lcnJvcjt0aGlzLl90cmFuc3BvcnQub25lcnJvcj1zPT57bz8uKHMpLHRoaXMuX29uZXJyb3Iocyl9O2NvbnN0IHI9dGhpcy5fdHJhbnNwb3J0Py5vbm1lc3NhZ2U7dGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZT0ocyxpKT0+e3I/LihzLGkpLHRvKHMpfHx4dihzKT90aGlzLl9vbnJlc3BvbnNlKHMpOml1KHMpP3RoaXMuX29ucmVxdWVzdChzLGkpOlB2KHMpP3RoaXMuX29ubm90aWZpY2F0aW9uKHMpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2UgdHlwZTogJHtKU09OLnN0cmluZ2lmeShzKX1gKSl9LGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zdGFydCgpfV9vbmNsb3NlKCl7Y29uc3QgdD10aGlzLl9yZXNwb25zZUhhbmRsZXJzO3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmNsZWFyKCksdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl90aW1lb3V0SW5mby52YWx1ZXMoKSljbGVhclRpbWVvdXQoby50aW1lb3V0SWQpO3RoaXMuX3RpbWVvdXRJbmZvLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnZhbHVlcygpKW8uYWJvcnQoKTt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtjb25zdCBuPVIuZnJvbUVycm9yKHEuQ29ubmVjdGlvbkNsb3NlZCwiQ29ubmVjdGlvbiBjbG9zZWQiKTt0aGlzLl90cmFuc3BvcnQ9dm9pZCAwLHRoaXMub25jbG9zZT8uKCk7Zm9yKGNvbnN0IG8gb2YgdC52YWx1ZXMoKSlvKG4pfV9vbmVycm9yKHQpe3RoaXMub25lcnJvcj8uKHQpfV9vbm5vdGlmaWNhdGlvbih0KXtjb25zdCBuPXRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tOb3RpZmljYXRpb25IYW5kbGVyO24hPT12b2lkIDAmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm4odCkpLmNhdGNoKG89PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtvfWApKSl9X29ucmVxdWVzdCh0LG4pe2NvbnN0IG89dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcixyPXRoaXMuX3RyYW5zcG9ydCxzPXQucGFyYW1zPy5fbWV0YT8uW1VlXT8udGFza0lkO2lmKG89PT12b2lkIDApe2NvbnN0IGw9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpxLk1ldGhvZE5vdEZvdW5kLG1lc3NhZ2U6Ik1ldGhvZCBub3QgZm91bmQifX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT90aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKS5jYXRjaChoPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGVucXVldWUgZXJyb3IgcmVzcG9uc2U6ICR7aH1gKSkpOnI/LnNlbmQobCkuY2F0Y2goaD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGFuIGVycm9yIHJlc3BvbnNlOiAke2h9YCkpKTtyZXR1cm59Y29uc3QgaT1uZXcgQWJvcnRDb250cm9sbGVyO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5zZXQodC5pZCxpKTtjb25zdCBhPUl2KHQucGFyYW1zKT90LnBhcmFtcy50YXNrOnZvaWQgMCxjPXRoaXMuX3Rhc2tTdG9yZT90aGlzLnJlcXVlc3RUYXNrU3RvcmUodCxyPy5zZXNzaW9uSWQpOnZvaWQgMCx1PXtzaWduYWw6aS5zaWduYWwsc2Vzc2lvbklkOnI/LnNlc3Npb25JZCxfbWV0YTp0LnBhcmFtcz8uX21ldGEsc2VuZE5vdGlmaWNhdGlvbjphc3luYyBsPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgaD17cmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYoaC5yZWxhdGVkVGFzaz17dGFza0lkOnN9KSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihsLGgpfSxzZW5kUmVxdWVzdDphc3luYyhsLGgsdik9PntpZihpLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBSKHEuQ29ubmVjdGlvbkNsb3NlZCwiUmVxdWVzdCB3YXMgY2FuY2VsbGVkIik7Y29uc3QgYj17Li4udixyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJiFiLnJlbGF0ZWRUYXNrJiYoYi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KTtjb25zdCB5PWIucmVsYXRlZFRhc2s/LnRhc2tJZD8/cztyZXR1cm4geSYmYyYmYXdhaXQgYy51cGRhdGVUYXNrU3RhdHVzKHksImlucHV0X3JlcXVpcmVkIiksYXdhaXQgdGhpcy5yZXF1ZXN0KGwsaCxiKX0sYXV0aEluZm86bj8uYXV0aEluZm8scmVxdWVzdElkOnQuaWQscmVxdWVzdEluZm86bj8ucmVxdWVzdEluZm8sdGFza0lkOnMsdGFza1N0b3JlOmMsdGFza1JlcXVlc3RlZFR0bDphPy50dGwsY2xvc2VTU0VTdHJlYW06bj8uY2xvc2VTU0VTdHJlYW0sY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtOm4/LmNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2EmJnRoaXMuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQubWV0aG9kKX0pLnRoZW4oKCk9Pm8odCx1KSkudGhlbihhc3luYyBsPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgaD17cmVzdWx0OmwsanNvbnJwYzoiMi4wIixpZDp0LmlkfTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJyZXNwb25zZSIsbWVzc2FnZTpoLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQoaCl9LGFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBoPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TnVtYmVyLmlzU2FmZUludGVnZXIobC5jb2RlKT9sLmNvZGU6cS5JbnRlcm5hbEVycm9yLG1lc3NhZ2U6bC5tZXNzYWdlPz8iSW50ZXJuYWwgZXJyb3IiLC4uLmwuZGF0YSE9PXZvaWQgMCYme2RhdGE6bC5kYXRhfX19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmgsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChoKX0pLmNhdGNoKGw9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCByZXNwb25zZTogJHtsfWApKSkuZmluYWxseSgoKT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5pZCk9PT1pJiZ0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZGVsZXRlKHQuaWQpfSl9X29ucHJvZ3Jlc3ModCl7Y29uc3R7cHJvZ3Jlc3NUb2tlbjpuLC4uLm99PXQucGFyYW1zLHI9TnVtYmVyKG4pLHM9dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQocik7aWYoIXMpe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5rbm93biB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufWNvbnN0IGk9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQociksYT10aGlzLl90aW1lb3V0SW5mby5nZXQocik7aWYoYSYmaSYmYS5yZXNldFRpbWVvdXRPblByb2dyZXNzKXRyeXt0aGlzLl9yZXNldFRpbWVvdXQocil9Y2F0Y2goYyl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUociksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUociksdGhpcy5fY2xlYW51cFRpbWVvdXQociksaShjKTtyZXR1cm59cyhvKX1fb25yZXNwb25zZSh0KXtjb25zdCBuPU51bWJlcih0LmlkKSxvPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KG4pO2lmKG8pe2lmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG4pLHRvKHQpKW8odCk7ZWxzZXtjb25zdCBpPW5ldyBSKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtvKGkpfXJldHVybn1jb25zdCByPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KG4pO2lmKHI9PT12b2lkIDApe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhbiB1bmtub3duIG1lc3NhZ2UgSUQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl9jbGVhbnVwVGltZW91dChuKTtsZXQgcz0hMTtpZih0byh0KSYmdC5yZXN1bHQmJnR5cGVvZiB0LnJlc3VsdD09Im9iamVjdCIpe2NvbnN0IGk9dC5yZXN1bHQ7aWYoaS50YXNrJiZ0eXBlb2YgaS50YXNrPT0ib2JqZWN0Iil7Y29uc3QgYT1pLnRhc2s7dHlwZW9mIGEudGFza0lkPT0ic3RyaW5nIiYmKHM9ITAsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldChhLnRhc2tJZCxuKSl9fWlmKHN8fHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRvKHQpKXIodCk7ZWxzZXtjb25zdCBpPVIuZnJvbUVycm9yKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtyKGkpfX1nZXQgdHJhbnNwb3J0KCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH1hc3luYyBjbG9zZSgpe2F3YWl0IHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKX1hc3luYypyZXF1ZXN0U3RyZWFtKHQsbixvKXtjb25zdHt0YXNrOnJ9PW8/P3t9O2lmKCFyKXt0cnl7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5yZXF1ZXN0KHQsbixvKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBSP2k6bmV3IFIocS5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fXJldHVybn1sZXQgczt0cnl7Y29uc3QgaT1hd2FpdCB0aGlzLnJlcXVlc3QodCxsYyxvKTtpZihpLnRhc2spcz1pLnRhc2sudGFza0lkLHlpZWxke3R5cGU6InRhc2tDcmVhdGVkIix0YXNrOmkudGFza307ZWxzZSB0aHJvdyBuZXcgUihxLkludGVybmFsRXJyb3IsIlRhc2sgY3JlYXRpb24gZGlkIG5vdCByZXR1cm4gYSB0YXNrIik7Zm9yKDs7KXtjb25zdCBhPWF3YWl0IHRoaXMuZ2V0VGFzayh7dGFza0lkOnN9LG8pO2lmKHlpZWxke3R5cGU6InRhc2tTdGF0dXMiLHRhc2s6YX0sTGUoYS5zdGF0dXMpKXthLnN0YXR1cz09PSJjb21wbGV0ZWQiP3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9OmEuc3RhdHVzPT09ImZhaWxlZCI/eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBSKHEuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IGZhaWxlZGApfTphLnN0YXR1cz09PSJjYW5jZWxsZWQiJiYoeWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBSKHEuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IHdhcyBjYW5jZWxsZWRgKX0pO3JldHVybn1pZihhLnN0YXR1cz09PSJpbnB1dF9yZXF1aXJlZCIpe3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9O3JldHVybn1jb25zdCBjPWEucG9sbEludGVydmFsPz90aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO2F3YWl0IG5ldyBQcm9taXNlKHU9PnNldFRpbWVvdXQodSxjKSksbz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIFI/aTpuZXcgUihxLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19fXJlcXVlc3QodCxuLG8pe2NvbnN0e3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppLHRhc2s6YSxyZWxhdGVkVGFzazpjfT1vPz97fTtyZXR1cm4gbmV3IFByb21pc2UoKHUsbCk9Pntjb25zdCBoPVM9PntsKFMpfTtpZighdGhpcy5fdHJhbnNwb3J0KXtoKG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpKTtyZXR1cm59aWYodGhpcy5fb3B0aW9ucz8uZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcz09PSEwKXRyeXt0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodC5tZXRob2QpLGEmJnRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkodC5tZXRob2QpfWNhdGNoKFMpe2goUyk7cmV0dXJufW8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtjb25zdCB2PXRoaXMuX3JlcXVlc3RNZXNzYWdlSWQrKyxiPXsuLi50LGpzb25ycGM6IjIuMCIsaWQ6dn07bz8ub25wcm9ncmVzcyYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuc2V0KHYsby5vbnByb2dyZXNzKSxiLnBhcmFtcz17Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30scHJvZ3Jlc3NUb2tlbjp2fX0pLGEmJihiLnBhcmFtcz17Li4uYi5wYXJhbXMsdGFzazphfSksYyYmKGIucGFyYW1zPXsuLi5iLnBhcmFtcyxfbWV0YTp7Li4uYi5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOmN9fSk7Y29uc3QgeT1TPT57dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUodiksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUodiksdGhpcy5fY2xlYW51cFRpbWVvdXQodiksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKHtqc29ucnBjOiIyLjAiLG1ldGhvZDoibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiLHBhcmFtczp7cmVxdWVzdElkOnYscmVhc29uOlN0cmluZyhTKX19LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKEs9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7S31gKSkpO2NvbnN0IE49UyBpbnN0YW5jZW9mIFI/UzpuZXcgUihxLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhTKSk7bChOKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQodixTPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoUyBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBsKFMpO3RyeXtjb25zdCBOPXZoKG4sUy5yZXN1bHQpO04uc3VjY2Vzcz91KE4uZGF0YSk6bChOLmVycm9yKX1jYXRjaChOKXtsKE4pfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e3kobz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3QgJD1vPy50aW1lb3V0Pz9seSxUPSgpPT55KFIuZnJvbUVycm9yKHEuUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDokfSkpO3RoaXMuX3NldHVwVGltZW91dCh2LCQsbz8ubWF4VG90YWxUaW1lb3V0LFQsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IGs9Yz8udGFza0lkO2lmKGspe2NvbnN0IFM9Tj0+e2NvbnN0IEs9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQodik7Sz9LKE4pOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHt2fWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQodixTKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uoayx7dHlwZToicmVxdWVzdCIsbWVzc2FnZTpiLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goTj0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGwoTil9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGIse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goUz0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGwoUyl9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LHBjLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSxtYyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSxLdixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKGM9PnRoaXMuX29uZXJyb3IoYykpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89YXUodCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1jdSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89YXUodCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9Y3UodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJml1KHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgUihxLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBSKHEuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBSKHEuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgUihxLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCBjPXBvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGMpLExlKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgUihxLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKExlKGEuc3RhdHVzKSl0aHJvdyBuZXcgUihxLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCBjPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGMpe2NvbnN0IHU9cG8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczpjfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24odSksTGUoYy5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gdXUoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHB5KGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTt1dShpKSYmdXUocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgaHkgZXh0ZW5kcyBkeXtfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgYyBvZlsuLi5zLmxpc3RlbmVyc10pYyhhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgZnk9IjIwMjYtMDEtMjYiLG15PSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3MgZ3l7ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPUV2LnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09bXkmJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciB2eT1FKFttKCJsaWdodCIpLG0oImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxxdD1FKFttKCJpbmxpbmUiKSxtKCJmdWxsc2NyZWVuIiksbSgicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIiksYnk9RShbbSgiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksbSgiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxtKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksbSgiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksbSgiLS1jb2xvci10ZXh0LWludmVyc2UiKSxtKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxtKCItLWNvbG9yLXRleHQtaW5mbyIpLG0oIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxtKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLG0oIi0tY29sb3ItdGV4dC13YXJuaW5nIiksbSgiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksbSgiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLG0oIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLG0oIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksbSgiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLG0oIi0tY29sb3ItYm9yZGVyLWdob3N0IiksbSgiLS1jb2xvci1ib3JkZXItaW5mbyIpLG0oIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLG0oIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxtKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksbSgiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxtKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLG0oIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxtKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLG0oIi0tY29sb3ItcmluZy1pbmZvIiksbSgiLS1jb2xvci1yaW5nLWRhbmdlciIpLG0oIi0tY29sb3ItcmluZy1zdWNjZXNzIiksbSgiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxtKCItLWZvbnQtc2FucyIpLG0oIi0tZm9udC1tb25vIiksbSgiLS1mb250LXdlaWdodC1ub3JtYWwiKSxtKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLG0oIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxtKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxtKCItLWZvbnQtdGV4dC14cy1zaXplIiksbSgiLS1mb250LXRleHQtc20tc2l6ZSIpLG0oIi0tZm9udC10ZXh0LW1kLXNpemUiKSxtKCItLWZvbnQtdGV4dC1sZy1zaXplIiksbSgiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksbSgiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksbSgiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLG0oIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksbSgiLS1ib3JkZXItcmFkaXVzLXhzIiksbSgiLS1ib3JkZXItcmFkaXVzLXNtIiksbSgiLS1ib3JkZXItcmFkaXVzLW1kIiksbSgiLS1ib3JkZXItcmFkaXVzLWxnIiksbSgiLS1ib3JkZXItcmFkaXVzLXhsIiksbSgiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxtKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksbSgiLS1zaGFkb3ctaGFpcmxpbmUiKSxtKCItLXNoYWRvdy1zbSIpLG0oIi0tc2hhZG93LW1kIiksbSgiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIikseXk9TyhieS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxFKFtmKCksc3QoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTtnKHttZXRob2Q6bSgidWkvb3Blbi1saW5rIikscGFyYW1zOmcoe3VybDpmKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgX3k9Zyh7aXNFcnJvcjpqKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksa3k9Zyh7aXNFcnJvcjpqKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLHd5PWcoe2lzRXJyb3I6aigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO2coe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6Zyh7fSl9KTt2YXIgJGM9Zyh7Y29ubmVjdERvbWFpbnM6eihmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOnooZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczp6KGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczp6KGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksU2M9Zyh7Y2FtZXJhOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTtnKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6Zyh7d2lkdGg6UCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OlAoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyICR5PWcoe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOk8oZigpLFooKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSxTeT1nKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOk8oZigpLFooKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksenk9Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6Zyh7cmVhc29uOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLFR5PWcoe2ZvbnRzOmYoKS5vcHRpb25hbCgpfSksSXk9Zyh7dmFyaWFibGVzOnl5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6VHkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLFB5PWcoe21ldGhvZDptKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczpnKHt9KX0pO08oZigpLFooKSk7dmFyIGx1PWcoe3RleHQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTtnKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTt2YXIgeHk9Zyh7ZXhwZXJpbWVudGFsOk8oZigpLE8oZigpLE9uKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOmcoe2xpc3RDaGFuZ2VkOmooKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6Zyh7bGlzdENoYW5nZWQ6aigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6Zyh7cGVybWlzc2lvbnM6U2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOiRjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0Omx1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTpsdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOmcoe3Rvb2xzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLEV5PWcoe2V4cGVyaW1lbnRhbDpPKGYoKSxPKGYoKSxPbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOmooKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6eihxdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6Zyh7fSkub3B0aW9uYWwoKX0pO2coe2NzcDokYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6U2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpmKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpqKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO2coe21ldGhvZDptKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczpnKHttb2RlOnF0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIEN5PWcoe21vZGU6cXQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLE95PUUoW20oIm1vZGVsIiksbSgiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7Zyh7cmVzb3VyY2VVcmk6ZigpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTp6KE95KS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOlZlKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpWZSgpLm9wdGlvbmFsKCl9KTtnKHttaW1lVHlwZXM6eihmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTtnKHttZXRob2Q6bSgidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczpnKHtjb250ZW50czp6KEUoW0xoLFVoXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTtnKHttZXRob2Q6bSgidWkvbWVzc2FnZSIpLHBhcmFtczpnKHtyb2xlOm0oInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6eihWbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczpnKHtodG1sOmYoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOiRjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6U2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgUnk9Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6anIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxLaD1nKHt0b29sSW5mbzpnKHtpZDpEbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6d2MuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6dnkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczpJeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6cXQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2Rlczp6KHF0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6RShbZyh7aGVpZ2h0OlAoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSxnKHttYXhIZWlnaHQ6RShbUCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoRShbZyh7d2lkdGg6UCgpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksZyh7bWF4V2lkdGg6RShbUCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpFKFttKCJ3ZWIiKSxtKCJkZXNrdG9wIiksbSgibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOmcoe3RvdWNoOmooKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6aigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOmcoe3RvcDpQKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OlAoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206UCgpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OlAoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCksQXk9Zyh7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6S2guZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7Zyh7bWV0aG9kOm0oInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOmcoe2NvbnRlbnQ6eihWbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50Ok8oZigpLFooKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7Zyh7bWV0aG9kOm0oInVpL2luaXRpYWxpemUiKSxwYXJhbXM6Zyh7YXBwSW5mbzpaci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6RXkuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmYoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIFp5PWcoe3Byb3RvY29sVmVyc2lvbjpmKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86WnIuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczp4eS5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDpLaC5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxOeT17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gZHUoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShOeSk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgbGYoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlN2KSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIHB1KGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBqeShlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBNeShlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gcXkoZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyB6YyBleHRlbmRzIGh5e19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDokeSx0b29saW5wdXRwYXJ0aWFsOlN5LHRvb2xyZXN1bHQ6UnksdG9vbGNhbmNlbGxlZDp6eSxob3N0Y29udGV4dGNoYW5nZWQ6QXl9O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIXpjLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxHKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihOcixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1weSh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUoYyl7T2JqZWN0LmFzc2lnbih0aGlzLGMpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhjLHUpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGw7aWYoaSl7bGV0IGg9YS5pbnB1dFNjaGVtYSx2PWg/YXdhaXQgcHUoaCxjPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpjPz97fTtsPWF3YWl0IG8odix1KX1lbHNlIGw9YXdhaXQgbyh1KTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFsLmlzRXJyb3ImJihsLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IHB1KGEub3V0cHV0U2NoZW1hLGwuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxsfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IGR1KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IGR1KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihQeSwobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoRmgsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihIaCwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LGpyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LERoLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSxxaCxuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9KaDpWaDtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sd3ksbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sYWMsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LF95LG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSxreSxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LEN5LG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGM9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxjIT09bykmJihuPXUsbz1jLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpjfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgZ3kod2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpmeX19LFp5LG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgaHU9IiI7Y29uc3QgV2g9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PWh1JiYodC5hcHBseUhvc3RGb250cyhyKSxodT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxPZT1uZXcgemMoe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLEdoPXthcHBseURvY3VtZW50VGhlbWU6anksYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6TXksYXBwbHlIb3N0Rm9udHM6cXl9LHVlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGQ9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IHR0PSIiLFZyPSIiLFFoPXt9LFloPSExLFhoPSIiLEE9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LHdlPTE7Y29uc3QgRHk9NTtsZXQgUT1udWxsLHV0PVtdLEhlPSIiLHplPVtdLGNlPW51bGwsZm89MDtjb25zdCBMeT1uZXcgU2V0KFsiZm9yZ2V0UHJlZmVyZW5jZXMiLCJhZGRUb1RyaXAiLCJjbGVhclRyaXAiLCJyZXF1ZXN0Qm9va2luZyIsImNhbmNlbEJvb2tpbmciLCJjaGFuZ2VCb29raW5nIiwic2lnbkluIiwic2lnbk91dCJdKSxmdT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO3JldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP2Bob3RlbDoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGV4dHJhczpib29raW5nOiR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgZXh0cmFzOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzInx8dD09PSJwb2xpY3ktbWlzc2luZyI/YHBvbGljeToke2UuaG90ZWw/LmlkPz8iIn06JHtlLnRvcGljPz8iIn1gOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciP2BjYW5jZWw6JHtlLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJjaGFuZ2UtcHJldmlldyI/YGNoYW5nZToke2UuY29uZmlybWF0aW9uQ29kZT8/ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iaG90ZWxzInx8dD09PSJuby1ob3RlbHMiP2Bob3RlbHM6JHtlLmFzaz8uY2l0eT8/IiJ9OiR7ZS5hc2s/LnF1ZXJ5Pz9lLnF1ZXJ5Pz8iIn1gOnR9LGFzPWU9PnshY2V8fEh5LmhhcyhTdHJpbmcoY2UudmlldykpfHxmdShlKSE9PWZ1KGNlKSYmKHplPVsuLi56ZSx7cGF5bG9hZDpjZSxsYWJlbDpGeShjZSksdmVyc2lvbjpmb31dLnNsaWNlKC02KSl9LFV5PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToiZ2V0SG90ZWwiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubiwuLi5lLnJvb21zX3dhbnRlZD97cm9vbXM6ZS5yb29tc193YW50ZWR9Ont9fX07aWYodD09PSJleHRyYXMiJiZlLmZvckJvb2tpbmcpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7Ym9va2luZzplLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5ufX07aWYodD09PSJpdGluZXJhcnkiKXJldHVybntrZXk6Iml0aW5lcmFyeSIsYXJnczp7dGl0bGU6ZS50aXRsZSwuLi5uLGRheXM6KGUuZGF5cz8/W10pLm1hcChvPT4oe2xhYmVsOm8ubGFiZWwsLi4uby5ub3RlP3tub3RlOm8ubm90ZX06e30saXRlbXM6KG8uaXRlbXM/P1tdKS5tYXAocj0+ci5pZCl9KSl9fX0sbXU9ZT0+e3plPXplLmZpbHRlcih0PT4hZS5pbmNsdWRlcyhTdHJpbmcodC5wYXlsb2FkPy52aWV3KSkpfSxIeT1uZXcgU2V0KFsiYm9va2luZyIsImNhbmNlbGxlZCIsImNoYW5nZWQiLCJlcnJvciIsIm5lZWRzLWd1ZXN0Iiwic2lnbmVkLW91dCIsIm1lbWJlci1zaWduLWluIl0pLEZ5PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJob3RlbHMiKXtpZihlLmFzaz8uY2l0eSlyZXR1cm4gU3RyaW5nKGUuYXNrLmNpdHkpO2NvbnN0IG49Wy4uLm5ldyBTZXQoKGUuaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLmNpdHkpKSldO3JldHVybiBuLmxlbmd0aD09PTE/U3RyaW5nKG5bMF0pOmAke2UudG90YWw/PzB9IGhvdGVsc2B9cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKTp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij8idGhlIGNhbmNlbGxhdGlvbiI6dD09PSJjaGFuZ2UtcHJldmlldyI/InRoZSBjaGFuZ2UiOnQ9PT0ibWVtYmVyIj8ieW91ciBtZW1iZXJzaGlwIjp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BhZGQtb25zIGZvciAke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YCR7U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKX0gYWRkLW9uc2A6dD09PSJ0cmlwIj8idGhlIHRyaXAiOnQ9PT0iYm9va2luZ3MiPyJ5b3VyIGJvb2tpbmdzIjp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMiPyJ0aGUgcG9saWNpZXMiOiJiYWNrIn0sQnk9KCk9Pntjb25zdCBlPXVlKCJiYWNrYnRuIiksdD16ZS5hdCgtMSk7ZS5oaWRkZW49IXQsdCYmKGUudGV4dENvbnRlbnQ9YOKAuSAke3QubGFiZWx9YCl9O2xldCBBdD0iIixjcz0iIixEdD0wLFRjPSExO2NvbnN0IGVmPWU9Pntjb25zdCB0PWU/LlsiY3VybGVzcy90cmlwIl07dCYmKHR5cGVvZiB0LnRyaXBJZD09InN0cmluZyImJnQudHJpcElkJiYoY3M9dC50cmlwSWQpLER0PU51bWJlcih0LmNvdW50Pz8wKSxBcnJheS5pc0FycmF5KHQubGluZXMpJiYodXQ9dC5saW5lcyxUYz0hMCkpfSxWeT1lPT5jcz97Li4uZSx0cmlwOmNzfTplLEp5PWU9PlFoW2VdPz8iIjtsZXQgTXI9ITE7Y29uc3QgZ3U9ZT0+e01yPWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9O2xldCBtbz0wLHVzPSIiO2NvbnN0IEo9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89SnkoZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihNcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2d1KCEwKTtjb25zdCByPW1vO3JldHVybiBPZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpWeSh0KX0pLmZpbmFsbHkoKCk9Pmd1KCExKSkudGhlbihzPT57ZWYocz8uX21ldGEpO2NvbnN0IGk9cz8uc3RydWN0dXJlZENvbnRlbnQsYT1pJiZuLmZvbGQ/bi5mb2xkKGkpOmk7dXM9aT9KU09OLnN0cmluZ2lmeShpKToiIjtjb25zdCBjPUx5LmhhcyhlKSYmYSYmYS52aWV3IT09ImVycm9yIjtyZXR1cm4gcj09PW1vJiZhPyhuLnB1c2ghPT0hMSYmYXMoYSksYyYmKGZvKz0xKSxhLnZpZXc9PT0iYm9va2luZyImJihtdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLFNlPW51bGwpLChhLnZpZXc9PT0iY2FuY2VsbGVkInx8YS52aWV3PT09ImNoYW5nZWQiKSYmbXUoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLGV0KGEpKTpjJiYoZm8rPTEpLEt5KHMpLHN9KX0sS3k9ZT0+e2NvbnN0IHQ9KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG49Pm4/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyF0fHwhT2UuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fE9lLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHQpfV19KS5jYXRjaCgoKT0+e30pfSxKbj1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxLbj1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksV3k9Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+JyxHeT1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke1d5fSR7ZChlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7ZChlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixzZT0oKT0+WWg/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtkKFhofHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsTHQ9ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LGxzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxEZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtMdChlLmNoZWNrSW4pfSDigJMgJHtMdChlLmNoZWNrT3V0KX0gwrcgJHtscyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7bHMoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsUXk9KGUsdCxuKT0+e2NvbnN0IG89dXQuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LFl5PShlLHQpPT57Y29uc3Qgbj11dC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sZ289KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7ZChuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7ZChuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Qobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsdGY9KGUsdCk9Pntjb25zdCBuPXR8fFh5KCk7cmV0dXJuKCFBLmNoZWNrSW58fEEuY2hlY2tJbjxuKSYmKEEuY2hlY2tJbj1uKSwoIUEuY2hlY2tPdXR8fEEuY2hlY2tPdXQ8PUEuY2hlY2tJbikmJihBLmNoZWNrT3V0PWRzKEEuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7ZChBLmNoZWNrSW4pfSIgbWluPSIke2Qobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2QoQS5jaGVja091dCl9IiBtaW49IiR7ZChkcyhBLmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxsYWJlbCBjbGFzcz0iZ3Vlc3RzIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2Qod2UpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvbGFiZWw+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke2QoSWMoKSl9PC9zcGFuPgogIDwvZGl2PmB9LEljPSgpPT57Y29uc3QgZT1BLmNoZWNrSW4mJkEuY2hlY2tPdXQ/bHMoQS5jaGVja0luLEEuY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj13ZT4xP2Ake3dlfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sZHM9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxYeT0oKT0+bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLEpyPTgsZV89ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAobD0+U3RyaW5nKGwuY2l0eSkpKV0sbz1sPT57Y29uc3QgaD10LmZpbmQodj0+di5jaXR5PT09bCk/LmNvdW50cnk7cmV0dXJuIGgmJiFTdHJpbmcoaCkuc3RhcnRzV2l0aChsKT9TdHJpbmcoaCk6IiJ9LHI9bD0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHtkKGwpfSR7byhsKT9gPHNtYWxsPiDCtyAke2QobyhsKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKGg9PmguY2l0eT09PWwpLm1hcChoPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZChoLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtKbihTdHJpbmcoaC5pZCkpfSI+CiAgICAgICAgICAgICAgJHtoLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtkKGguaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtkKEtuKFN0cmluZyhoLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7aC5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7ZChoLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2QoaC5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7ZChuLmxlbmd0aD4xP2guYXJlYT8/aC5jaXR5OltoLmFyZWEsaC5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2guZnJvbU5pZ2h0bHk/YCR7ZChoLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJHtHeShoLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLHM9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxpPXMtdC5sZW5ndGgsYT1lLnBsYWNlcz8/W10sYz0hIWUuYXNrPy5jaXR5LHU9YS5sZW5ndGh8fGM/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2M/JzxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iIj5BbGwgcGxhY2VzPC9idXR0b24+JzoiIn0KICAgICAgICAgICAke2EubWFwKChsLGgpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2QobC5wbGFjZSl9IiR7aD49SnI/IiBoaWRkZW4iOiIifT4ke2QobC5sYWJlbCl9IDxzbWFsbD4ke2QobC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke2EubGVuZ3RoPkpyP2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7YS5sZW5ndGgtSnJ9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiO3JldHVybltzZSgpLHUsZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7ZChlLndpZGVuZWQuZnJvbSl9LiBUaGVzZSBhcmUgJHtkKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiIsYDxkaXY+JHtuLm1hcChyKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7ZChlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke2QoZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIixpPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt0Lmxlbmd0aH0gb2YgJHtzfS48L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMjAsaSl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKX0sdF89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXTtyZXR1cm4gdC5sZW5ndGg/W3NlKCksYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7ZCh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobj0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKG4uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7Sm4oU3RyaW5nKG4uaWQpKX0iPgogICAgICAgICAgJHtuLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtkKG4uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2QoS24oU3RyaW5nKG4ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtkKG4ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7ZChbbi5hcmVhLG4uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7bi5mcm9tTmlnaHRseT9gJHtkKG4uZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtkKGUucXVlcnkpfSJgOiIifS4gVHJ5IGEgY2l0eS48L2Rpdj5gfSxuZj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7Sm4oU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtkKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2QoS24oU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2QoZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtkKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7ZChlLnJhdGluZy52YWx1ZSl94piFICgke2QoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtkKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2QodCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxuXz0oZSx0LG4pPT57Y29uc3Qgbz1ReShTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke0puKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7ZCh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmQoS24oU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2QodC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Qocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHtkKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7ZCh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHtkKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZCh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7ZCh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHt3ZT4xP2AgwrcgJHt3ZX0gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7ZCh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2dvKGBkYXRhLWFkZC1yb29tPSIke2QodC5pZCl9IiBkYXRhLWhvdGVsPSIke2QoZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSx3ZSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxvXz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZChlKX0iIGRhdGEtY2k9IiR7ZChuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtkKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7ZChMdChTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtkKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtkKEx0KFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/ZChuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsdnU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/QTtyZXR1cm5bc2UoKSxuZih0KSx0ZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxvXyhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZChlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+bl8odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7ZCh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7ZChyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7ZCh0LmlkKX0iPiR7ZChyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0scl89ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W3NlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Qoby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QodC5uYW1lKX0gwrcgJHtkKERlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZChyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Qoci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7ZChyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtnbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Qoci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7ZChvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W3NlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2QodC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7ZChyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtkKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZChyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7ZChyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2dvKGBkYXRhLWFkZC1leHRyYT0iJHtkKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtkKHQuaWQpfSJgLFl5KFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKHQuaWQpfSI+QmFjayB0byAke2QodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sc189ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2QoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7ZChlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtkKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2QoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2QoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtkKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtkKGUuaG90ZWxJZCl9ImA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKGUudGl0bGUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZChlLmtpbmQ9PT0icm9vbSI/YCR7ZS5ob3RlbE5hbWV9IMK3ICR7RGUoZS5zdGF5KX0ke2UucmVmdW5kYWJsZT09PSExPyIgwrcgbm9uLXJlZnVuZGFibGUiOiIifWA6YCR7ZS5ob3RlbE5hbWV9JHtlLmRldGFpbD9gIMK3ICR7ZS5kZXRhaWx9YDoiIn1gKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2QoZS50b3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2QoZS51bml0KX0ke2Uua2luZD09PSJyb29tIj8iIC8gbmlnaHQiOiIgZWFjaCJ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Z28odCxOdW1iZXIoZS5xdWFudGl0eT8/MSksU3RyaW5nKGUudGl0bGUpKX08L2Rpdj4KICAgIDwvZGl2PmB9LGJ1PShlLHQpPT5gPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke2QoZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+VGF4ZXMgYW5kIGZlZXM8L3NwYW4+PHNwYW4+JHtkKGUudGF4ZXNBbmRGZWVzKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIGdvb2QiPjxzcGFuPiR7ZChlLm1lbWJlclNhdmluZy50aWVyKX0gbWVtYmVyIHJhdGU8L3NwYW4+PHNwYW4+4oiSICR7ZChlLm1lbWJlclNhdmluZy5zYXZlZCl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2QodCl9PC9zcGFuPjxzcGFuPiR7ZChlLnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyBlYXJuczwvc3Bhbj48c3Bhbj4ke2QoTnVtYmVyKGUubWVtYmVyU2F2aW5nLnBvaW50cykudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfTwvc3Bhbj48L2Rpdj5gOiIifQogICA8L2Rpdj5gLGlfPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bc2UoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtkKHR0KX0gaG90ZWxzPC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW3NlKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtkKEx0KG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKHNfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtkKG8udGl0bGUpfTogJHtkKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIiwuLi5BcnJheS5pc0FycmF5KGUuZ3JvdXBzKSYmZS5ncm91cHMubGVuZ3RoPjE/W2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZWQgaW4gJHtkKChlLmN1cnJlbmNpZXM/P1tdKS5qb2luKCIgYW5kICIpKX0sIHNlcGFyYXRlbHkuIE5vdGhpbmcgaGVyZSBjb252ZXJ0cyBvbmUgaW50byB0aGUgb3RoZXI7IGVhY2ggaG90ZWwgaXMgYm9va2VkIGFuZCBwYWlkIGluIGl0cyBvd24uPC9kaXY+YCwuLi5lLmdyb3Vwcy5tYXAobz0+YnUobyxgVG90YWwgaW4gJHtvLmN1cnJlbmN5fWApKV06W2J1KGUsIlRvdGFsIildLC4uLkFycmF5LmlzQXJyYXkoZS5uZWVkc1Jvb20pJiZlLm5lZWRzUm9vbS5sZW5ndGg/ZS5uZWVkc1Jvb20ubWFwKG89PmA8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgICA8Yj5Hb2VzIHdpdGggYSBzdGF5PC9iPgogICAgICAgICAgICAgPHNwYW4+JHtkKChvLmV4dHJhcz8/W10pLmpvaW4oIiBhbmQgIikpfSBpcyAke2Qoby5ob3RlbE5hbWUpfSdzIHNlcnZpY2UgZm9yIGl0cyBndWVzdHMsIHNvIGl0IGlzIGJvb2tlZCB3aXRoIGEgcm9vbSB0aGVyZSAtIG9yIGFkZGVkIHRvIGEgYm9va2luZyB5b3UgYWxyZWFkeSBoYXZlLjwvc3Bhbj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Qoby5ob3RlbElkKX0iPlJvb21zIGF0ICR7ZChvLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDwvZGl2PmApOlsnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke2QodHQpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxvZigpXSxRPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7ZCh0dCl9IENpcmNsZSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7dm8oKX1gXS5qb2luKCIiKX0sUGM9W3tpZDoia2luZy1iZWQiLGxhYmVsOiJLaW5nIGJlZCJ9LHtpZDoidHdpbi1iZWRzIixsYWJlbDoiVHdpbiBiZWRzIn0se2lkOiJoaWdoLWZsb29yIixsYWJlbDoiSGlnaCBmbG9vciJ9LHtpZDoibG93LWZsb29yIixsYWJlbDoiTG93IGZsb29yIn0se2lkOiJxdWlldC1yb29tIixsYWJlbDoiUXVpZXQgcm9vbSJ9LHtpZDoiY29ubmVjdGluZy1yb29tcyIsbGFiZWw6IkNvbm5lY3Rpbmcgcm9vbXMifSx7aWQ6ImVhcmx5LWNoZWNrLWluIixsYWJlbDoiRWFybHkgY2hlY2staW4ifSx7aWQ6ImxhdGUtYXJyaXZhbCIsbGFiZWw6IkxhdGUgYXJyaXZhbCJ9LHtpZDoiYWNjZXNzaWJsZS1yb29tIixsYWJlbDoiQWNjZXNzaWJsZSByb29tIn1dLGFfPXsia2luZy1iZWQiOiJ0d2luLWJlZHMiLCJ0d2luLWJlZHMiOiJraW5nLWJlZCIsImhpZ2gtZmxvb3IiOiJsb3ctZmxvb3IiLCJsb3ctZmxvb3IiOiJoaWdoLWZsb29yIn07bGV0IFNlPW51bGw7Y29uc3Qgb2Y9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciIHZhbHVlPSIke2QoU2U/Lm5hbWU/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIiB2YWx1ZT0iJHtkKFNlPy5lbWFpbD8/IiIpfSI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYXNrcyI+CiAgICAgIDxkaXYgY2xhc3M9ImFza3MtdCI+QXNrIHRoZSBkZXNrIGZvcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaGlwcyI+JHtQYy5tYXAodD0+YDxidXR0b24gY2xhc3M9ImNoaXAgYXNrIiB0eXBlPSJidXR0b24iIGRhdGEtYXNrPSIke2QodC5pZCl9IiBhcmlhLXByZXNzZWQ9IiR7KFNlP1NlLnJlcXVlc3RzOlE/LnByZWZlcmVuY2VzPz9bXSkuaW5jbHVkZXModC5pZCk/InRydWUiOiJmYWxzZSJ9Ij4ke2QodC5sYWJlbCl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgPGxhYmVsPkFycml2aW5nIGF0PGlucHV0IGlkPSJndGltZSIgdHlwZT0idGltZSIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSIke2QoU2U/LmFycml2aW5nQXQ/PyIiKX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkFueXRoaW5nIGVsc2U8aW5wdXQgaWQ9Imdub3RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkluIHlvdXIgb3duIHdvcmRzIOKAlCBvcHRpb25hbCIgdmFsdWU9IiR7ZChTZT8ubm90ZXM/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj5UaGVzZSBnbyB0byB0aGUgZGVzayBhcyByZXF1ZXN0cy4gJHtkKHR0KX0gbWVldHMgd2hhdCBpdCBjYW4gb24gdGhlIGRheTsgbm9uZSBvZiBpdCBpcyBoZWxkLjwvZGl2PgogICAgICAke1E/YDxsYWJlbCBjbGFzcz0icmVtZW1iZXIiPjxpbnB1dCBpZD0iZ3JlbWVtYmVyIiB0eXBlPSJjaGVja2JveCIke1NlPy5yZW1lbWJlcj8iIGNoZWNrZWQiOiIifT4gUmVtZW1iZXIgdGhlIGJlZCwgZmxvb3IgYW5kIHJvb20gcmVxdWVzdHMgb24gbXkgJHtkKFEucHJvZ3JhbW1lPz8ibWVtYmVyc2hpcCIpfSBmb3IgbmV4dCB0aW1lPC9sYWJlbD5gOiIifQogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9vayI+SG9sZCB0aGVzZSByb29tczwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+CiAgPC9kaXY+YCxjXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+VGhlIGJvb2tpbmcgbmVlZHMgJHtkKChlLm1pc3Npbmc/P1tdKS5qb2luKCIgYW5kICIpfHwiYSBuYW1lIGFuZCBhbiBlbWFpbCIpfS48L2Rpdj5gLG9mKCEwKSwnPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+J10uam9pbigiIiksdV89ZT0+e2NvbnN0IHQ9ZS5tZW1iZXI/P3t9O3JldHVybltzZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7ZCh0LnByb2dyYW1tZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtkKHQubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7ZCh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtkKE51bWJlcih0LnBvaW50cz8/MCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPjxiPiR7ZChNYXRoLnJvdW5kKCh0LnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApKX0lIG9mZjwvYj48c3Bhbj5Sb29tIHJhdGVzIGFuZCB0cmlwIHRvdGFscyBub3cgc2hvdyB0aGUgJHtkKHQudGllcj8ubmFtZSl9IG1lbWJlciByYXRlLiBOb3RoaW5nIGlzIGNoYXJnZWQgYnkgc2lnbmluZyBpbi48L3NwYW4+PC9kaXY+YCwodC5wcmVmZXJlbmNlcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgIDxiPlNhdmVkIGZvciB5b3VyIG5leHQgc3RheXM8L2I+CiAgICAgICAgICAgPHNwYW4+JHtkKHQucHJlZmVyZW5jZXMubWFwKG49PlBjLmZpbmQobz0+by5pZD09PW4pPy5sYWJlbD8/bikuam9pbigiLCAiKSl9IC0gdGlja2VkIG9uIHRoZSBib29raW5nIGZvcm0sIGFuZCBhc2tlZCBmb3Igb25seSB3aGVuIHlvdSBib29rIHdpdGggdGhlbS48L3NwYW4+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZvcmdldC1wcmVmcyI+Rm9yZ2V0IHRoZW08L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1vdXQiPlNpZ24gb3V0PC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LGxfPSgpPT5bJzxkaXYgY2xhc3M9ImVyciI+Tm8gbWVtYmVyc2hpcCBtYXRjaGVzIHRoYXQgbnVtYmVyIGFuZCBzdXJuYW1lLiBDaGVjayBib3RoIGFzIHRoZXkgYXJlIHByaW50ZWQg4oCUIG5vdGhpbmcgZWxzZSBpcyBuZWVkZWQsIHRoaXMgY29ubmVjdG9yIG5ldmVyIGFza3MgZm9yIGEgcGFzc3dvcmQuPC9kaXY+Jyx2byghMCldLmpvaW4oIiIpLHZvPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJzaWduaW4iJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+TWVtYmVyc2hpcCBudW1iZXI8aW5wdXQgaWQ9Im1udW0iIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgaXMgcHJpbnRlZCI+PC9sYWJlbD4KICAgICAgPGxhYmVsPlN1cm5hbWU8aW5wdXQgaWQ9Im1zdXIiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIHN1cm5hbWUgb24gaXQiPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLWluIj5TaWduIGluPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBwYXNzd29yZCBpcyBhc2tlZCBmb3IgYW5kIG5vbmUgaXMgc3RvcmVkLiBTaWduaW5nIGluIHNob3dzIHRoZSBtZW1iZXIgcmF0ZTsgbm90aGluZyBpcyBjaGFyZ2VkLjwvZGl2PgogIDwvZGl2PmAsZF89ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0ZWQ/P1tdO3JldHVybiB0Lmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQke2UuYWNjZXNzaWJpbGl0eT8iIGZsYWciOiIifSI+CiAgICA8Yj5SZXF1ZXN0ZWQsIG5vdCBoZWxkPC9iPgogICAgJHt0Lm1hcChuPT5gPHNwYW4+JHtkKG4pfTwvc3Bhbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gOiIifSx5dT1lPT5TdHJpbmcoZS5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpLHBfPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5ib29raW5ncykmJmUuYm9va2luZ3MubGVuZ3RoP2UuYm9va2luZ3M6W2UuYm9va2luZz8/e31dLG49dC5sZW5ndGg+MSxvPShyLHMsaSk9PltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7ZChyLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtkKHIuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtkKERlKHIuc3RheSkpfSDCtyAke2Qoci5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgICAgPC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJub3RlIj5IZWxkIHVudGlsICR7ZCh5dShyKSl9IFVUQy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJtb25leS1vdXQiPjxzcGFuPlRvdGFsIGZvciB0aGUgc3RheTwvc3Bhbj48c3Bhbj4ke2Qocyl9PC9zcGFuPjwvZGl2PmAsZF8oaSksYDxkaXYgY2xhc3M9InJvd3MiPiR7KHIucXVvdGU/LmxpbmVzPz9bXSkubWFwKGZfKS5qb2luKCIiKX08L2Rpdj5gLG4/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtkKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtkKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtkKHIuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bc2UoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwgaG9sZHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyBjaGFuZ2VkIG9yIGNhbmNlbGxlZCBvbiBpdHMgb3duLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgdGhlIHRpbWUgdW5kZXIgZWFjaCBjb2RlLiI6YFRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke2QoeXUodFswXSkpfSBVVEMuYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAocj0+bj9vKHIsU3RyaW5nKHIudG90YWw/PyIiKSxyKTpvKHIsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2QodFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7ZCh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGlzIGJvb2tpbmc8L2J1dHRvbj5gfQogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxoXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+JHtkKGUuZGV0YWlsPz9lLndoeT8/IlRoYXQgY291bGQgbm90IGJlIGRvbmUuIil9PC9kaXY+YCxEdD4wPyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCI+VmlldyB0aGUgdHJpcDwvYnV0dG9uPjwvZGl2Pic6IiJdLmpvaW4oIiIpLGZfPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7ZChlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtkKGUua2luZD09PSJyb29tIj9EZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2QoZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxtXz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQifSxnXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RzPy5raW5kcz8/W107aWYoIXQubGVuZ3RoKXJldHVybiIiO2NvbnN0IG49dC5tYXAobz0+UGMuZmluZChyPT5yLmlkPT09byk/LmxhYmVsPz9vKTtyZXR1cm5gPGRpdiBjbGFzcz0ibWV0YSBhc2tlZC1saW5lIj5Bc2tlZCBmb3IgJHtkKG4uam9pbigiLCAiKS50b0xvd2VyQ2FzZSgpKX08L2Rpdj5gfSx2Xz1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXTtyZXR1cm4gdC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W3NlKCksYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKG4uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZChuLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2QoRGUobi5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke2dfKG4pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHttX1tTdHJpbmcobi5zdGF0dXMpXT8/IiJ9Ij4ke2Qobi5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtkKG4ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke24uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG4uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7ZChuLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtkKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sX3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtkKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2QoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2QoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2Qobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxrdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89KHIscyxpKT0+cz9gPGRpdiBjbGFzcz0ibGVnJHtpPyIgd2FzIjoiIn0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2siPiR7ZChyKX08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWd2Ij4ke2Qocy5jaGVja0luKX0g4oaSICR7ZChzLmNoZWNrT3V0KX0gwrcgJHtkKHMubmlnaHRzKX0gJHtOdW1iZXIocy5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ20iPiR7ZChzLnJvb21OYW1lKX0ke051bWJlcihzLnJvb21zKT4xP2AgwrcgJHtkKHMucm9vbXMpfSByb29tc2A6IiJ9IMK3ICR7ZChzLnRvdGFsKX08L2Rpdj4KICAgICAgICAgPC9kaXY+YDoiIjtyZXR1cm5bc2UoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Qobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7byh0PyJXYXMiOiJOb3ciLGUuZnJvbSwhMCl9JHtvKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtkKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7ZChlLmFkZE9uLmZyb20pfSDihpIgJHtkKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7ZChlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2QoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Qobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sS3I9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7ZChlLnRpdGxlKX08L2g0PiR7ZChlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtkKG8udGl0bGUpfTwvaDQ+JHtkKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtkKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtkKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKHQuaWQpfSI+QmFjayB0byAke2QodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sYl89ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtkKHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7Sm4oU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7ZChyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7ZChLbihTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtkKHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7ZChyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke2Qoci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7ZChyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7ZChyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2Qocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2Qocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW3NlKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2QoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7ZChEZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7ZChlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHtkKHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke2QoaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHtkKHIubmFtZSl9OiAke2Qoci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHtkKGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LHlfPWU9Pntjb25zdCB0PWUuZGF5cz8/W107cmV0dXJuW3NlKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7ZChlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QoRGUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7ZChOdW1iZXIoZS5pblRyaXA/PzApK051bWJlcihlLmJvb2tlZD8/MCkpfS8ke2QoZS5wbGFubmVkKX08L2I+PHNwYW4+JHtkKGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKG4sbyk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bysxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHtkKG4ubGFiZWwpfSR7bi5kYXRlP2A8c21hbGw+IMK3ICR7ZChTdHJpbmcobi5kYXRlKS5zbGljZSg1KSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtuLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7ZChuLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAkeyhuLml0ZW1zPz9bXSkubWFwKHI9PmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIiR7ci5raW5kPT09ImhvdGVsIj9gIGRhdGEtaG90ZWw9IiR7ZChyLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtyLmNoZWNrSW4/YCBkYXRhLWNpPSIke2Qoci5jaGVja0luKX0iIGRhdGEtY289IiR7ZChyLmNoZWNrT3V0KX0iYDoiIn1gOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2QoW3IuZGV0YWlsLHIubmlnaHRzP051bWJlcihyLm5pZ2h0Pz8xKT4xP2BuaWdodCAke3IubmlnaHR9IG9mICR7ci5uaWdodHN9YDpgJHtyLm5pZ2h0c30gJHtyLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiIsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmJvb2tlZHx8ci5pblRyaXA/InllcyI6Im5vIn0iPiR7ci5ib29rZWQ/YEJvb2tlZCDCtyAke2Qoci5ib29rZWQpfWA6ci5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG49PmAke2Qobi5uYW1lKX06ICR7ZChuLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxldD1lPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47ZS50b29sTmFtZXMmJihRaD1lLnRvb2xOYW1lcyksZS5icmFuZCYmKHR0PVN0cmluZyhlLmJyYW5kKSksZS5sb2dvVXJsJiYoVnI9U3RyaW5nKGUubG9nb1VybCkpLHR5cGVvZiBlLmRlbW89PSJib29sZWFuIiYmKFloPWUuZGVtbyksZS5kZW1vTm90ZSYmKFhoPVN0cmluZyhlLmRlbW9Ob3RlKSksdHlwZW9mIGUucm9vbXNfd2FudGVkPT0ibnVtYmVyIiYmKHdlPWUucm9vbXNfd2FudGVkKSxlLnZpZXc9PT0ibWVtYmVyIiYmZS5tZW1iZXI/LnRpZXI/Lm5hbWU/UT1lLm1lbWJlcjplLm1lbWJlcj8udGllcj8ubmFtZSYmKFE9UT8ucHJvZ3JhbW1lPT09ZS5tZW1iZXIucHJvZ3JhbW1lJiZRPy50aWVyPy5uYW1lPT09ZS5tZW1iZXIudGllci5uYW1lP3suLi5RLC4uLmUubWVtYmVyfTplLm1lbWJlciksKGUudmlldz09PSJzaWduZWQtb3V0Inx8ZS5zaWduZWRJbj09PSExKSYmKFE9bnVsbCksZS5zdGF5Py5jaGVja0luJiYhWnQmJihBPXtjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn0pLCFUYyYmKGUudmlldz09PSJ0cmlwInx8ZS52aWV3PT09Im5lZWRzLWRhdGVzIikmJih1dD1lLmxpbmVzPz9bXSksKGUudmlldz09PSJib29raW5nInx8ZS52aWV3PT09ImVtcHR5LXRyaXAiKSYmKHV0PVtdLER0PTApLEhlPVN0cmluZyhlLnZpZXc/PyIiKSxCeSgpO2NvbnN0IHQ9dWUoImJyYW5kIik7VnI/KHQuc3JjPVZyLHQuaGlkZGVuPSExLHVlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KHQuaGlkZGVuPSEwLHVlKCJ0aXRsZSIpLmhpZGRlbj0hMSx1ZSgidGl0bGUiKS50ZXh0Q29udGVudD10dHx8IkhvdGVscyIpLHVlKCJzdWIiKS50ZXh0Q29udGVudD13XyhlKSxTXygpLCRfKCk7Y29uc3Qgbj17aG90ZWxzOmVfLCJuby1ob3RlbHMiOnRfLGhvdGVsOnZ1LCJuby1yb29tcyI6dnUsImhvdGVsLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhhdCBob3RlbCBpcyBub3QgaW4gdGhpcyBjb25uZWN0b3IuPC9kaXY+JyxleHRyYXM6cl8sdHJpcDppXywibmVlZHMtZGF0ZXMiOmtfLGJvb2tpbmc6cF8sIm5lZWRzLWd1ZXN0IjpjXyxtZW1iZXI6dV8sIm1lbWJlci1ub3QtZm91bmQiOmxfLCJzaWduZWQtb3V0IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5TaWduZWQgb3V0LiBSYXRlcyBhcmUgdGhlIHB1YmxpYyBvbmVzIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj48L2Rpdj4nLCJlbXB0eS10cmlwIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGVyZSBpcyBub3RoaW5nIGluIHRoZSB0cmlwIHlldC48L2Rpdj4nLGJvb2tpbmdzOnZfLCJjYW5jZWxsYXRpb24tcHJldmlldyI6X3UsY2FuY2VsbGVkOl91LCJjaGFuZ2UtcHJldmlldyI6a3UsY2hhbmdlZDprdSwiYm9va2luZy1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmcgaGVyZSBtYXRjaGVzIHRoYXQgY29kZS48L2Rpdj4nLGNvbXBhcmlzb246Yl8sIm5vdGhpbmctdG8tY29tcGFyZSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9uZSBvZiB0aG9zZSBhcmUgaG90ZWxzIHRoaXMgY29ubmVjdG9yIGtub3dzLjwvZGl2PicsaXRpbmVyYXJ5OnlfLCJlbXB0eS1pdGluZXJhcnkiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPkFuIGl0aW5lcmFyeSBuZWVkcyBhdCBsZWFzdCBvbmUgZGF5LjwvZGl2PicscG9saWN5OktyLHBvbGljaWVzOktyLCJwb2xpY3ktbWlzc2luZyI6S3IsZXJyb3I6aF8sIm5vLW1lbWJlciI6KCk9PmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9ib2R5IGlzIHNpZ25lZCBpbiwgc28gdGhlcmUgaXMgbm90aGluZyBzYXZlZCB0byBmb3JnZXQuPC9kaXY+JHt2byghMCl9YCwibWVtYmVyLXNpZ24taW4iOigpPT5bc2UoKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+Jyx2byghMCldLmpvaW4oIiIpfTsoSGU9PT0iaG90ZWwifHxIZT09PSJuby1yb29tcyJ8fEhlPT09Im5lZWRzLWRhdGVzIikmJmUuaG90ZWw/LmlkPyhBdD1TdHJpbmcoZS5ob3RlbC5pZCksZS5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5xcigpLDApKTooQXQ9IiIseGMoKSksY2U9ZTtjb25zdCBvPW5bSGVdO3VlKCJjb250ZW50IikuaW5uZXJIVE1MPShvP28oZSk6YDxkaXYgY2xhc3M9ImVyciI+JHtkKGUuZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtlLmRldGFpbD9gPGJyPiR7ZChlLmRldGFpbCl9YDoiIn08L2Rpdj5gKStfXyhlKX0sX189ZT0+e2NvbnN0IHQ9ISFPZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2Usbj0oZS5zdWdnZXN0aW9ucz8/W10pLm1hcCgobyxyKT0+bz8uYXNrP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtkKG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7ZChvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LGtfPWU9PltzZSgpLGUuaG90ZWw/bmYoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtkKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLHRmKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSx3Xz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/RGUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIiwkXz0oKT0+e2NvbnN0IGU9dWUoIm1lbWJlcmNoaXAiKTtRPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1EudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoUS50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixgJHtRLm5hbWV9IMK3ICR7US5wcm9ncmFtbWV9YCkpOihlLmhpZGRlbj1IZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LFNfPSgpPT57Y29uc3QgZT11ZSgiaGVhZHRyaXAiKSx0PVRjP0R0OkR0fHx1dC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fEhlPT09InRyaXAiLHVlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LHpfPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7QT17Y2hlY2tJbjplPy52YWx1ZT8/QS5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9BLmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P0EuZ3Vlc3RzKXx8Mn19LG9vPShlPXt9KT0+QS5jaGVja0luJiZBLmNoZWNrT3V0P3tjaGVja0luOkEuY2hlY2tJbixjaGVja091dDpBLmNoZWNrT3V0LGd1ZXN0czpBLmd1ZXN0cywuLi5lfTplO2xldCBwcyxadD0hMTtjb25zdCB4Yz0oKT0+e2NsZWFyVGltZW91dChwcyksWnQ9ITF9LHFyPShlPTApPT57QXQmJihjbGVhclRpbWVvdXQocHMpLFp0PSEwLHBzPXNldFRpbWVvdXQoKCk9PntpZighQXQpe1p0PSExO3JldHVybn1pZihNcil7cXIoMTUwKTtyZXR1cm59WnQ9ITEsSigiZ2V0SG90ZWwiLHtob3RlbDpBdCxyb29tczp3ZSwuLi5vbygpfSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIG5pZ2h0cy4iKSl9LGUpKX0sQj1lPT57dWUoImNvbnRlbnQiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGA8ZGl2IGNsYXNzPSJlcnIiPiR7ZChlKX08L2Rpdj5gKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1ob3RlbF0sW2RhdGEtYWN0XSxbZGF0YS1wb2xpY3ldLFtkYXRhLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2hhbmdlXSxbZGF0YS1leHRyYXNdLFtkYXRhLXJvb21zLW5dLFtkYXRhLWFza10sW2RhdGEtYm9va2luZy1leHRyYXNdLFtkYXRhLWJvb2tpbmctZXh0cmFdLFtkYXRhLXN1Z2dlc3RdLFtkYXRhLXBsYWNlXSIpO2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFzayIpO2lmKG4hPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJ0cnVlIjt0LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIixTdHJpbmcoaykpO2NvbnN0IFM9YV9bbl07ayYmUyYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmFza1tkYXRhLWFzaz0iJHtTfSJdYCk/LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKTtyZXR1cm59Y29uc3Qgbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYobyE9PW51bGwpe3pfKCksd2U9TWF0aC5taW4oRHksTWF0aC5tYXgoMSx3ZStOdW1iZXIobykpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO2smJihrLnRleHRDb250ZW50PVN0cmluZyh3ZSkpO2NvbnN0IFM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO1MmJihTLnRleHRDb250ZW50PUljKCkpLHFyKDQ1MCk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihyIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixTPU51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLE49dC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT97Y2hlY2tJbjp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpPz8iIixjaGVja091dDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpPz8iIixndWVzdHM6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWd1Iik/PzIpfTpvbygpO0ooImFkZFRvVHJpcCIse2hvdGVsOmsscm9vbTpyLHJvb21zOlMsLi4uTn0pLmNhdGNoKCgpPT5CKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihzIT09bnVsbCl7SigiYWRkVG9UcmlwIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZXh0cmE6cyxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5CKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZSIpO2lmKGkhPT1udWxsKXtjb25zdCBrPWNlPy5hc2s/LnNvcnQ7SigibGlzdEhvdGVscyIsey4uLmk/e2NpdHk6aX06e30sLi4uaz97c29ydDprfTp7fX0pLmNhdGNoKCgpPT5CKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmFzIik7aWYoYSE9PW51bGwpe0ooImxpc3RFeHRyYXMiLHtib29raW5nOmF9KS5jYXRjaCgoKT0+QigiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBjPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmEiKTtpZihjIT09bnVsbCl7SigicHJldmlld0NoYW5nZSIse2Jvb2tpbmc6dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZyIpPz8iIixleHRyYTpjLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpfSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCB3b3JrIG91dCB0aGF0IGNoYW5nZS4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZXh0cmFzIik7aWYodSE9PW51bGwpe0ooImxpc3RFeHRyYXMiLHtob3RlbDp1LC4uLm9vKCl9KS5jYXRjaCgoKT0+QigiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBsPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBvbGljeSIpO2lmKGwhPT1udWxsKXtKKCJwb2xpY2llcyIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHRvcGljOmx9KS5jYXRjaCgoKT0+QigiQ291bGQgbm90IGxvYWQgdGhhdCBwb2xpY3kuIikpO3JldHVybn1jb25zdCBoPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNhbmNlbCIpO2lmKGghPT1udWxsKXtKKCJwcmV2aWV3Q2FuY2VsbGF0aW9uIix7Ym9va2luZzpofSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCB3b3JrIG91dCB0aGUgZmVlLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNhbmNlbCIpO2lmKHYhPT1udWxsKXtKKCJjYW5jZWxCb29raW5nIix7Ym9va2luZzp2LGNvbmZpcm1lZDohMH0pLmNhdGNoKCgpPT5CKCJDb3VsZCBub3QgY2FuY2VsIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IGI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jaGFuZ2UiKTtpZihiIT09bnVsbCl7Y29uc3Qgaz1jZT8udG8/P3t9LFM9Y2U/LmZyb20/P3t9LE49Y2U/LmFkZE9uLEs9ay5jaGVja0luJiYoay5jaGVja0luIT09Uy5jaGVja0lufHxrLmNoZWNrT3V0IT09Uy5jaGVja091dCk7SigiY2hhbmdlQm9va2luZyIse2Jvb2tpbmc6Yixjb25maXJtZWQ6ITAsLi4uSz97Y2hlY2tJbjprLmNoZWNrSW4sY2hlY2tPdXQ6ay5jaGVja091dH06e30sLi4uTj8uaWQ/e2V4dHJhOk4uaWQscXVhbnRpdHk6TnVtYmVyKE4udG8pfTp7fSwuLi5rLnJvb21zIT09dm9pZCAwJiZOdW1iZXIoay5yb29tcykhPT1OdW1iZXIoUy5yb29tcyk/e3Jvb21zOk51bWJlcihrLnJvb21zKX06e30sLi4uay5yb29tTmFtZSYmay5yb29tTmFtZSE9PVMucm9vbU5hbWU/e3Jvb206ay5yb29tTmFtZX06e319KS5jYXRjaCgoKT0+QigiQ291bGQgbm90IGNoYW5nZSB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCB5PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKHk9PT0iYmFjayIpe2NvbnN0IGs9emUuYXQoLTEpO2lmKCFrfHxNcilyZXR1cm47emU9emUuc2xpY2UoMCwtMSksbW8rPTEseGMoKTtjb25zdCBTPWsudmVyc2lvbj09PWZvP3ZvaWQgMDpVeShrLnBheWxvYWQpO1M/KGNlPWsucGF5bG9hZCxKKFMua2V5LFMuYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT5ldChrLnBheWxvYWQpKSk6ZXQoay5wYXlsb2FkKTtyZXR1cm59aWYoeT09PSJtb3JlLXBsYWNlcyIpe2Zvcihjb25zdCBrIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5jaGlwLnBsYWNlW2hpZGRlbl0iKSlrLmhpZGRlbj0hMTt0LnJlbW92ZSgpO3JldHVybn1pZih5PT09Im1vcmUtaG90ZWxzIil7Y29uc3Qgaz1jZTtpZigha3x8ay52aWV3IT09ImhvdGVscyIpcmV0dXJuO0ooImxpc3RIb3RlbHMiLHsuLi5rLmFzaz8/e30sb2Zmc2V0OihrLmhvdGVscz8/W10pLmxlbmd0aCxsaW1pdDoyMH0se2ZvbGQ6Uz0+Uz8udmlldz09PSJob3RlbHMiP3suLi5TLGhvdGVsczpbLi4uay5ob3RlbHM/P1tdLC4uLlMuaG90ZWxzPz9bXV0sc2hvd246KGsuaG90ZWxzPz9bXSkubGVuZ3RoKyhTLmhvdGVscz8/W10pLmxlbmd0aCxvZmZzZXQ6MCxwbGFjZXM6ay5wbGFjZXN9OlN9KS5jYXRjaCgoKT0+QigiQ291bGQgbm90IGxvYWQgbW9yZSBob3RlbHMuIikpO3JldHVybn1pZih5PT09ImhvbWUiKXtKKCJsaXN0SG90ZWxzIix7fSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZih5PT09Im1lbWJlciIpe2lmKCFRKXJldHVybjtjb25zdCBrPXt2aWV3OiJtZW1iZXIiLG1lbWJlcjpRfTthcyhrKSxldChrKTtyZXR1cm59aWYoeT09PSJhc2stc2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNpZ25pbiIpO2lmKGspay5oaWRkZW49ITE7ZWxzZXtjb25zdCBTPXt2aWV3OiJtZW1iZXItc2lnbi1pbiJ9O2FzKFMpLGV0KFMpfWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKHk9PT0ic2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIixTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCFTKXtCKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59Sigic2lnbkluIix7bnVtYmVyOmssc3VybmFtZTpTfSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCBzaWduIGluLiIpKTtyZXR1cm59aWYoeT09PSJmb3JnZXQtcHJlZnMiKXtKKCJmb3JnZXRQcmVmZXJlbmNlcyIse30pLmNhdGNoKCgpPT5CKCJDb3VsZCBub3QgZm9yZ2V0IHRoZW0uIikpO3JldHVybn1jb25zdCAkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXN1Z2dlc3QiKTtpZigkIT09bnVsbCl7Y29uc3Qgaz0oY2U/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKCQpXTtrPy5hc2s/LnRvb2w/SihTdHJpbmcoay5hc2sudG9vbCksay5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5CKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6az8uc2F5JiZPZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKGsuc2F5KX1dfSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZih5PT09InNpZ24tb3V0Iil7UT1udWxsLEooInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+QigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoeT09PSJhc2stYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7ayYmKGsuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoeT09PSJib29rIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIixTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLE49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiIsSz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3RpbWUiKT8udmFsdWUudHJpbSgpPz8iIixIPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcChmZT0+ZmUuZGF0YXNldC5hc2s/PyIiKSxMPSEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkO2lmKFNlPXtuYW1lOmssZW1haWw6Uyxub3RlczpOLGFycml2aW5nQXQ6SyxyZXF1ZXN0czpILHJlbWVtYmVyOkx9LCFrfHwhUy5pbmNsdWRlcygiQCIpKXtCKGs/J1RoYXQgZW1haWwgaGFzIG5vICJAIiBpbiBpdCAtIHRoZSBjb25maXJtYXRpb24gbmVlZHMgYW4gYWRkcmVzcyBpdCBjYW4gcmVhY2guJzoiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufUooInJlcXVlc3RCb29raW5nIix7bmFtZTprLGVtYWlsOlMsLi4uTj97bm90ZXM6Tn06e30sLi4uSz97YXJyaXZpbmdBdDpLfTp7fSwuLi5ILmxlbmd0aD97cmVxdWVzdHM6SH06e30sLi4uTD97cmVtZW1iZXJSZXF1ZXN0czohMH06e319KS5jYXRjaCgoKT0+QigiQ291bGQgbm90IGFzayBmb3IgdGhvc2Ugcm9vbXMuIikpO3JldHVybn1pZih5PT09ImJvb2tpbmdzIil7SigibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZih5PT09InRyaXAiKXtKKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5CKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IFQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihUKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIiksUz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpO2smJlMmJihBLmNoZWNrSW49ayxBLmNoZWNrT3V0PVMpLEooImdldEhvdGVsIix7aG90ZWw6VCwuLi5vbygpfSkuY2F0Y2goKCk9PkIoIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGU9Pntjb25zdCB0PWUudGFyZ2V0OyF0fHx0LmdldEF0dHJpYnV0ZSgicm9sZSIpIT09ImJ1dHRvbiJ8fGUua2V5IT09IkVudGVyIiYmZS5rZXkhPT0iICJ8fChlLnByZXZlbnREZWZhdWx0KCksdC5jbGljaygpKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ7aWYodD8uaWQhPT0iY2kiJiZ0Py5pZCE9PSJjbyIpcmV0dXJuO2NvbnN0IG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKTtpZighbnx8IW8pcmV0dXJuO2lmKHQuaWQ9PT0iY2kiJiZuLnZhbHVlKXtjb25zdCBzPWRzKG4udmFsdWUsMSk7by5taW49cywoIW8udmFsdWV8fG8udmFsdWU8PW4udmFsdWUpJiYoby52YWx1ZT1zKX1BLmNoZWNrSW49bi52YWx1ZXx8QS5jaGVja0luLEEuY2hlY2tPdXQ9by52YWx1ZXx8QS5jaGVja091dDtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTtyJiYoci50ZXh0Q29udGVudD1JYygpKSxxcigpfSk7Y29uc3QgcmY9KGUsdCk9Pnt0cnl7aWYoZWYodCksZSYmdXMmJkpTT04uc3RyaW5naWZ5KGUpPT09dXMpcmV0dXJuO3plPVtdLG1vKz0xLHhjKCksZXQoZSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcigiW2NhcmRdIHJlbmRlciBmYWlsZWQiLG4pLHVlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhpcyBjYXJkIGNvdWxkIG5vdCBiZSBkcmF3bi4gQXNrIGFnYWluIGluIHRoZSBjaGF0LjwvZGl2Pid9fTtPZS5vbnRvb2xyZXN1bHQ9ZT0+cmYoZT8uc3RydWN0dXJlZENvbnRlbnQsZT8uX21ldGEpO09lLm9uaG9zdGNvbnRleHRjaGFuZ2VkPWU9PldoKGUsR2gpO09lLmNvbm5lY3QoKS50aGVuKCgpPT57Y29uc3QgZT1PZS5nZXRIb3N0Q29udGV4dCgpO1doKGUsR2gpO2NvbnN0IHQ9ZT8udG9vbEluZm8/LnJlc3VsdD8uc3RydWN0dXJlZENvbnRlbnQ7dCYmcmYodCxlPy50b29sSW5mbz8ucmVzdWx0Py5fbWV0YSl9KS5jYXRjaCgoKT0+e3VlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+Q291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGhvc3QuPC9kaXY+J30pOzwvc2NyaXB0PgogICAgPHN0eWxlIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4+OnJvb3R7LS1raXQtYmc6ICNmZmZmZmY7LS1raXQtYmctc29mdDogI2Y2ZjdmOTstLWtpdC1mZzogIzFhMWYyYjstLWtpdC1mZy1zb2Z0OiAjNjI2YjdhOy0ta2l0LWZnLWZhaW50OiAjOGE5M2ExOy0ta2l0LWxpbmU6ICNlM2U3ZWQ7LS1raXQtYWNjZW50OiAjMWExZjJiOy0ta2l0LWFjY2VudC1mZzogI2ZmZmZmZjstLWtpdC1saW5rOiAjMjU2M2ViOy0ta2l0LWdvb2Q6ICMxYTdmNWE7LS1raXQtZ29vZC1iZzogI2RkZjNlNDstLWtpdC1iYWQ6ICNiMzI2MWU7LS1raXQtYmFkLWJnOiAjZmJlNmU0Oy0ta2l0LXdhcm46ICM4YTVhMDA7LS1raXQtd2Fybi1iZzogI2ZkZjBkNTstLWtpdC1yaW5nOiAjMjU2M2VifVtkYXRhLXRoZW1lPWRhcmtdey0ta2l0LWJnOiAjMWQxZjIzOy0ta2l0LWJnLXNvZnQ6ICMyNjI5MmU7LS1raXQtZmc6ICNlY2VlZjE7LS1raXQtZmctc29mdDogI2E0YWJiNjstLWtpdC1mZy1mYWludDogIzdjODQ5MTstLWtpdC1saW5lOiAjMzYzYTQxOy0ta2l0LWFjY2VudDogI2VjZWVmMTstLWtpdC1hY2NlbnQtZmc6ICMxZDFmMjM7LS1raXQtbGluazogIzdhYTdmZjstLWtpdC1nb29kOiAjNmZkM2EyOy0ta2l0LWdvb2QtYmc6ICMxZjNhMmQ7LS1raXQtYmFkOiAjZmY4YTgwOy0ta2l0LWJhZC1iZzogIzNkMjMyMjstLWtpdC13YXJuOiAjZjJjNDZiOy0ta2l0LXdhcm4tYmc6ICMzYTMwMjA7LS1raXQtcmluZzogIzdhYTdmZn06cm9vdHstLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnksIHZhcigtLWtpdC1iZykpOy0tYmctc29mdDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnksIHZhcigtLWtpdC1iZy1zb2Z0KSk7LS1mZzogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5LCB2YXIoLS1raXQtZmcpKTstLWZnLXNvZnQ6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtZmctc29mdCkpOy0tZmctZmFpbnQ6IHZhcigtLWNvbG9yLXRleHQtdGVydGlhcnksIHZhcigtLWtpdC1mZy1mYWludCkpOy0tbGluZTogdmFyKC0tY29sb3ItYm9yZGVyLXByaW1hcnksIHZhcigtLWtpdC1saW5lKSk7LS1hY2NlbnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudCkpOy0tYWNjZW50LWZnOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQtZmcpKTstLWxpbms6IHZhcigtLWNvbG9yLXRleHQtaW5mbywgdmFyKC0ta2l0LWxpbmspKTstLWdvb2Q6IHZhcigtLWNvbG9yLXRleHQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QpKTstLWdvb2QtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QtYmcpKTstLWJhZDogdmFyKC0tY29sb3ItdGV4dC1kYW5nZXIsIHZhcigtLWtpdC1iYWQpKTstLWJhZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIsIHZhcigtLWtpdC1iYWQtYmcpKTstLXdhcm46IHZhcigtLWNvbG9yLXRleHQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4pKTstLXdhcm4tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4tYmcpKTstLXJpbmc6IHZhcigtLWNvbG9yLXJpbmctcHJpbWFyeSwgdmFyKC0ta2l0LXJpbmcpKTstLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sZywgMTRweCk7LS1yYWRpdXMtc206IHZhcigtLWJvcmRlci1yYWRpdXMtc20sIDlweCk7LS1mb250OiB2YXIoLS1mb250LXNhbnMsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBzYW5zLXNlcmlmKTstLW1vbm86IHZhcigtLWZvbnQtbW9ubywgdWktbW9ub3NwYWNlLCAiU0YgTW9ubyIsIE1lbmxvLCBtb25vc3BhY2UpOy0tc2hhZG93OiB2YXIoLS1zaGFkb3ctc20sIDAgMXB4IDJweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCksIDAgMnB4IDVweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCkpfSp7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uY2FyZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3gtc2hhZG93OnZhcigtLXNoYWRvdyk7bWF4LXdpZHRoOjU2MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0taW5zZXQtbGVmdCwgMHB4KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWluc2V0LXJpZ2h0LCAwcHgpfS5oZWFke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjE0cHggMThweCAwfS5oZWFkIC50aXRsZXtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC50aXRsZVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0jY29udGVudHtwYWRkaW5nOjEwcHggMThweCAxOHB4fS5yZWZyZXNoe21hcmdpbi1sZWZ0OjhweDthbGlnbi1zZWxmOmNlbnRlcjtmbGV4Om5vbmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O3BhZGRpbmc6MDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjEycyxjb2xvciAuMTJzfS5yZWZyZXNoOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLWZnKTtib3JkZXItY29sb3I6dmFyKC0tZmctc29mdCl9LnJlZnJlc2g6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNn0ucmVmcmVzaFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ucmVmcmVzaCBzdmd7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtkaXNwbGF5OmJsb2NrfS5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpraXQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMga2l0LXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uZW1wdHl7cGFkZGluZzoxOHB4IDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHh9LmhpbnR7bWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vdGV7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nOjAgMCAxMHB4fS5tb25ve2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctZmFpbnQpfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcH0uYmFkZ2Uub2t7Y29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uYmFkZ2Uud2FybiwuYmFkZ2UudG9kb3tjb2xvcjp2YXIoLS13YXJuKTtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpfS5iYWRnZS5lcnJ7Y29sb3I6dmFyKC0tYmFkKTtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyl9LmJ1eXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ0cHg7cGFkZGluZzoxMXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NTA7Y3Vyc29yOnBvaW50ZXJ9LmJ1eTpkaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1jb2xvcjp2YXIoLS1saW5lKTtjb2xvcjp2YXIoLS1mZy1mYWludCk7Y3Vyc29yOmRlZmF1bHR9LmJ1eS5hbHQsLmdob3N0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSl9Lmdob3N0e2ZsZXg6MTttaW4taGVpZ2h0OjQwcHg7cGFkZGluZzo5cHggMTBweDtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXJ9Lmxpbmt7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6NnB4IDAgMDtjb2xvcjp2YXIoLS1saW5rKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnF0eXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHh9LnF0eSBidXR0b257d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0ucXR5IHNwYW57bWluLXdpZHRoOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTB9YnV0dG9uOmZvY3VzLXZpc2libGUsYTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLXJpbmcpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEobWF4LXdpZHRoOjQzMHB4KXsuY2FyZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LmhlYWR7cGFkZGluZzoxMnB4IDE0cHggMH0jY29udGVudHtwYWRkaW5nOjhweCAxNHB4IDE0cHh9LmJ1eXttaW4taGVpZ2h0OjQ4cHg7Zm9udC1zaXplOjE1cHh9Lmdob3N0e21pbi1oZWlnaHQ6NDRweDtmb250LXNpemU6MTMuNXB4fS5xdHkgYnV0dG9ue3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7Zm9udC1zaXplOjE5cHh9LnJlZnJlc2h7d2lkdGg6MzRweDtoZWlnaHQ6MzRweH0uaGludCwubm90ZSwuZW1wdHl7Zm9udC1zaXplOjEzcHh9fUBtZWRpYShwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOm5vbmV9Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSNjb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHh9LmhlYWR7bWluLWhlaWdodDoyOHB4fS5ob21le2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MH0uaG9tZTpob3ZlcntvcGFjaXR5Oi43Mn0uaGVhZCAuYnJhbmR7bWF4LWhlaWdodDozNHB4O21heC13aWR0aDoxNTBweDtvYmplY3QtZml0OmNvbnRhaW59LmhlYWQgLnRpdGxle2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTVweDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmJhY2tidG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDExcHggNHB4IDhweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDttYXgtd2lkdGg6NDIlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2N1cnNvcjpwb2ludGVyfS5iYWNrYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmcpfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uY2FyZC5idXN5e29wYWNpdHk6LjYyfS5jYXJkLmJ1c3kgYnV0dG9uLC5jYXJkLmJ1c3kgaW5wdXQsLmNhcmQuYnVzeSBzZWxlY3R7cG9pbnRlci1ldmVudHM6bm9uZX0ubWVtYmVyY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5tZW1iZXJjaGlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lmxpbmt5e2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2NvbG9yOnZhcigtLWxpbmspO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LnAtd2Fze2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucC1tZW1iZXJ7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uc3VtLmdvb2Qgc3BhbjpsYXN0LWNoaWxke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmRlbW97ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LmRlbW8gYntmb250LXdlaWdodDo3MDB9LmNpdHlncm91cCsuY2l0eWdyb3Vwe21hcmdpbi10b3A6MTRweH0uY2l0eW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tYm90dG9tOjhweH0uY2l0eW5hbWUgc21hbGx7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwO29wYWNpdHk6Ljc1fS50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE5NnB4LDFmcikpO2dhcDoxMHB4fS50aWxle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tYmcpO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7cGFkZGluZzowfS50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1mZy1mYWludCl9LnQtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTthc3BlY3QtcmF0aW86MTYgLyAxMDtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnQtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnQtbWFya3tmb250LXNpemU6MzBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07b3BhY2l0eTouOTI7dGV4dC1zaGFkb3c6MCAxcHggMTJweCByZ2IoMCAwIDAgLyAyMiUpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udC1zaG90IGltZywuaGVybyBpbWd7ei1pbmRleDoxfS50LWJyYW5ke3otaW5kZXg6Mjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgxMTJweCwxZnIpIG1pbm1heCgxMTJweCwxZnIpIGF1dG8gMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3RheSBpbnB1dCwuc3RheSBzZWxlY3R7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6N3B4IDZweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5uaWdodHN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZy1ib3R0b206OHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RheSAuZ297d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTRweDtjdXJzb3I6cG9pbnRlcn0uc3RheSAuZ29bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOmRlZmF1bHR9LmZsZXgtZGF0ZXN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MnB4O3Njcm9sbGJhci13aWR0aDp0aGluOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5mZHtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDttaW4td2lkdGg6NzhweDtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250OmluaGVyaXQ7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyfS5mZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uZmQtZGF5e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpub3dyYXB9LmZkLXByaWNle2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjUwO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmZkLm9ue2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2N1cnNvcjpkZWZhdWx0fS5mZC5vbiAuZmQtZGF5e2NvbG9yOnZhcigtLWFjY2VudC1mZyk7b3BhY2l0eTouODV9LmZkLmJlc3R7Ym9yZGVyLWNvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmZkLmJlc3QgLmZkLXByaWNlLC5mZC5iZXN0IC5mZC1kYXl7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZmQub3V0IC5mZC1wcmljZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXdlaWdodDo1MDB9LnRodW1ie2dyaWQtYXJlYTp0aHVtYjt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtmbGV4OjAgMCBhdXRvfS50aHVtYiBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LmxlZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5sZWd7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzo5cHggMTFweH0ubGVnLndhc3tvcGFjaXR5Oi43Mn0ubGVnLndhcyAubGVndnt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5sZWdre2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmxlZ3Z7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjQwO21hcmdpbi10b3A6MnB4fS5sZWdte2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDoycHh9LnJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgcHJpY2UgYWN0aW9uIjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4IDExcHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IHByaWNlIGFjdGlvbiJ9LnJvdyAuYm9keXtncmlkLWFyZWE6Ym9keTttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHh9LnJvdyAubmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnJvdyAubWV0YXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNDtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDozO2xpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS5yb3cgLnByaWNle2dyaWQtYXJlYTpwcmljZTt0ZXh0LWFsaWduOmVuZDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnJvdyAucC10b3RhbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY2MH0ucm93IC5wLXVuaXR7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJvdyAuYWN0aW9ue2dyaWQtYXJlYTphY3Rpb259LmJhZGdlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDttYXJnaW4tdG9wOjJweH0uYmFkZ2V7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2MjA7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYmFkZ2UuZ29vZHtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmJhZGdlLndhcm57YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKX0uYmFkZ2UuYmFke2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpfS5hZGR7ZGlzcGxheTppbmxpbmUtZ3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MzhweDtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdH0uYWRkOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5hZGRbZGlzYWJsZWRde29wYWNpdHk6LjQ7Y3Vyc29yOmRlZmF1bHR9LnN0ZXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4fS5zdGVwIGJ1dHRvbnt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5zdGVwIGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZmZmYyZX0uc3RlcCAubnttaW4td2lkdGg6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2ODA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXl7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbjoxMnB4IDAgNnB4fS5zdW1ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjVweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTttYXJnaW4tdG9wOjEycHg7cGFkZGluZy10b3A6MTBweDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnN1bXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3VtLnRvdGFse2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmZvb3R7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi10b3A6MTJweH0uZ297ZmxleDoxO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MTFweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MTJweCAxNnB4O2N1cnNvcjpwb2ludGVyfS5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTU7Y3Vyc29yOmRlZmF1bHR9LmdvLnF1aWV0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NjIwfS5nby5kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1iYWQpO2NvbG9yOnZhcigtLWJnKX0ubm90ZXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNX0uZm9ybXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMXB4O21hcmdpbi10b3A6MTBweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZm9ybSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo4cHggOXB4fS5mb3JtIC50d297ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHh9LmNvbmZ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjE2cHggMTJweH0uY29uZiAuY29kZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MjA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb25mIC53aGVyZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMH0uY29uZiAud2hlbntmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS51bnBhaWR7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS51bnBhaWQgYntmb250LXdlaWdodDo3MjB9Lndhcm5ub3Rle2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6OXB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnRpbGUub3ZlcntvcGFjaXR5Oi44Mn0uYXNrZWQtbGluZXtmb250LXN0eWxlOml0YWxpY30uYXNrZWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmFza2VkIGJ7Zm9udC13ZWlnaHQ6NzIwO2NvbG9yOnZhcigtLWZnKX0uYXNrZWQuZmxhZ3tiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS13YXJuKX0uYXNrZWQuZmxhZyBie2NvbG9yOnZhcigtLXdhcm4pfS5hc2tze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0uYXNrcy10e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXAuYXNre2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4fS5jaGlwLmFza1thcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9Lm1vbmV5LW91dHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjYwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucHJvc2V7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOnByZS13cmFwfS5wcm9zZSBoNHttYXJnaW46MTRweCAwIDRweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmVtcHR5e2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MThweCA0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVycntiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey50aWxlc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjhweH0udC1tYXJre2ZvbnQtc2l6ZToyNHB4fS5zdGF5e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zdGF5IC5ndWVzdHN7Z3JpZC1jb2x1bW46MX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uc3RheSAuZ297Z3JpZC1jb2x1bW46Mjt3aWR0aDoxMDAlfS5yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgYWN0aW9uIiAicHJpY2UgYWN0aW9uIjtyb3ctZ2FwOjZweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IGFjdGlvbiIgInRodW1iIHByaWNlIGFjdGlvbiJ9LnJvdy53aXRodGh1bWIgLnRodW1ie3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7YWxpZ24tc2VsZjpzdGFydH0ucm93IC5wcmljZXt0ZXh0LWFsaWduOnN0YXJ0fS5mb3JtIC50d297Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19LmNtcC13cmFwe292ZXJmbG93LXg6YXV0bzttYXJnaW4taW5saW5lOi0ycHg7cGFkZGluZzoycHh9LmNtcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg3NnB4LDk2cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTEycHgsMWZyKSk7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOjhweH0uY21wLWNvcm5lcntncmlkLWNvbHVtbjoxfS5jbXAtaGVhZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjttaW4td2lkdGg6MH0uY21wLWhlYWQucGlja3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQpfS5jbXAtaGVhZCAudC1zaG90e2FzcGVjdC1yYXRpbzoxNiAvIDk7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmNvbC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nOjEwcHggMTFweCAxMnB4fS5jb2wtbmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmNvbC1wcmljZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb2wtcHJpY2Ugc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS53aHl7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLWlubGluZS1zdGFydDoycHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZy1pbmxpbmUtc3RhcnQ6OHB4fS5wY3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHg7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1fS5wYyBkaXZ7ZGlzcGxheTpmbGV4O2dhcDo1cHh9LnBjIC5te2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NzAwfS5wYyAucHJvIC5te2NvbG9yOnZhcigtLWdvb2QpfS5wYyAuY29uIC5te2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jbXAgLmssLmNtcCAudntmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDU7cGFkZGluZzo2cHggOHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNtcCAua3tncmlkLWNvbHVtbjoxO2NvbG9yOnZhcigtLWZnLXNvZnQpO3Bvc2l0aW9uOnN0aWNreTtpbnNldC1pbmxpbmUtc3RhcnQ6MDtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uY21wIC52e2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY21wIC52LmFsdCwuY21wIC5rOmhhcygrLnYuYWx0KXtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6NnB4fS5waWNrbWFya3tiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7cGFkZGluZzozcHggOHB4O3RleHQtYWxpZ246Y2VudGVyfS5kYXlze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH0uZGF5cm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MjhweCAxZnI7Z2FwOjEwcHh9LmRheW51bXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4fS5kYXludW0gYntkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheW51bSBpe2ZsZXg6MTt3aWR0aDoxcHg7YmFja2dyb3VuZDp2YXIoLS1saW5lKX0uZGF5cm93Omxhc3QtY2hpbGQgLmRheW51bSBpe2Rpc3BsYXk6bm9uZX0uZGF5Ym9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTRweDttaW4td2lkdGg6MH0uZGF5bGFiZWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5kYXlub3Rle2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19LnN1Z2dlc3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWFyZ2luLXRvcDoxNHB4fS5zdWdnZXN0IC5jaGlwe2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweCAxMXB4O2NvbG9yOnZhcigtLWZnKX0uc3VnZ2VzdCAuY2hpcDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uc3VnZ2VzdCAuY2hpcDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb3JtIGxhYmVsLnJlbWVtYmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Zm9udC13ZWlnaHQ6NDAwO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowfS5mb3JtIGxhYmVsLnJlbWVtYmVyIGlucHV0e21hcmdpbjoycHggMCAwfS5wbGFjZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXAucGxhY2V7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4IDEwcHg7Y29sb3I6dmFyKC0tZmcpfS5jaGlwLnBsYWNlIHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY2hpcC5wbGFjZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uY2hpcC5wbGFjZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5zdWdnZXN0IC5jaGlwLnNheSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
|
|
6
6
|
/** sha256 of widget/src + widget/index.html at build time - the drift guard reads this. */
|
|
7
|
-
export const HOTEL_CARD_SOURCE_SHA = '
|
|
7
|
+
export const HOTEL_CARD_SOURCE_SHA = 'c88aab66a7deffbbdf12010e4746274a36e3596a0889b4ef5e8073bdbfed4656';
|
|
8
8
|
//# sourceMappingURL=card.generated.js.map
|