@curless/hotel-storefront 0.19.1 → 0.19.2

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.
@@ -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+Y29uc3QgQ2Y9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLEVmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxVYz17fSxPZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAoZD0+e2lmKGQ9RWYoZCxvKSxkIGluIFVjKXJldHVybjtVY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOkNmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBBZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBSZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBPbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIFpmKGUpe31mdW5jdGlvbiBOZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIGpmKGUpe31mdW5jdGlvbiBjcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiB1cyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+UHMobikpLmpvaW4odCl9ZnVuY3Rpb24gdm8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIE1me2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gWHQoZSl7cmV0dXJuIG5ldyBNZihlKX1mdW5jdGlvbiBUcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBxZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gUnUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgRmM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gWnUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1GYylyZXR1cm4gbz09PXZvaWQgMCYmKG89RmMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHFmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gbnQoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBBbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBFZShlKXtyZXR1cm4gQW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gTnUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBudCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBqdShlLHQsbil7dCBpbiBlP250KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gUWUoZSx0LG4sbyl7Y29uc3Qgcj1FZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9OdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpqdShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBEZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/TnUoZSxuLCgpPT50W25dKTpqdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBMZihlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gVWYoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gRmYoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIEhmKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gTXUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIHF1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgSXM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IER1PVh0KCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gTGUoZSl7aWYoZHQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKGR0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIExlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gQmYoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgVmY9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LHlvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksTHU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBHKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBKZihlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBQcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBVdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEZ1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxIdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gQnUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gUWUocyxlLFpvKGUsdCkpLEcoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBabyhlLHQpe2NvbnN0IG49RWUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBWdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoWm8oZSx0KSksaT17fTtyZXR1cm4gUWUoaSxlLFJlZmxlY3Qub3duS2V5cyhFZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEcoZSx1ZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBKdShlLHQpe2lmKCFMZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1FZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gRyhlLHVlKGUuX3pvZC5kZWYse3NoYXBlOkt1KGUsdCl9KSl9ZnVuY3Rpb24gS3UoZSx0KXtjb25zdCBuPXt9O3JldHVybiBRZShuLGUsUmVmbGVjdC5vd25LZXlzKEVlKGUpKSksRGYobix0KSxufWZ1bmN0aW9uIFd1KGUsdCl7aWYoIUxlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBHKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6S3UoZSx0KX0pKX1mdW5jdGlvbiBHdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtRZShuLGUsUmVmbGVjdC5vd25LZXlzKEVlKGUpKSksUWUobix0LFJlZmxlY3Qub3duS2V5cyhFZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBHKGUsbyl9ZnVuY3Rpb24gbHMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KFpvKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBRZShjLHQsUmVmbGVjdC5vd25LZXlzKEVlKHQpKSxlJiYoKGwsZCk9PmEmJiFhLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLEcodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBRdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoWm8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIFFlKHIsdCxSZWZsZWN0Lm93bktleXMoRWUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEcodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGhlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWXUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIGl0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIGRzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiAkZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOml0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9pdChzPy4oZSkpPz9pdCh0Py5lcnJvcj8uKGUpKT8/aXQobi5jdXN0b21FcnJvcj8uKGUpKT8/aXQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IEtmPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIGpvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIUtmLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIFh1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gcHQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBXZihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gZWwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIHRsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gR2YoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gZWwodCtuKX1mdW5jdGlvbiBRZihlKXtyZXR1cm4gdGwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIFlmKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBYZihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBlbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIG5sKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6dG0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBBZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBxbyhlLHQsbil7cmV0dXJuIEFlKGUsdCxuLCExKX1mdW5jdGlvbiBlbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gQWUodGhpcyxuLG8odGhpcykpfSxzZXQocil7QWUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIHRtKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpBZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe0FlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBubShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IG5zLE1lPSExO2NvbnN0IG9tPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7TWU9ITB9fTtmdW5jdGlvbiBBKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmbnMhPT1lLl96b2Qpe25zPXZvaWQgMDtyZXR1cm59bnM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LG9tKTtjb25zdCByPU1lO01lPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIE1lP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksTWU9TWV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxNZT1NZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gb2woZSx0LG4sbyl7Y29uc3Qgcj1ubShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IHJsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24geHMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtybF09ITAsdH1jb25zdCBDcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6SHUsQ09OU1RBTlRfQ0FUQ0g6cmwsQ2xhc3M6ZW0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6RnUsYWJvcnRlZDpoZSxhbGxvd3NFdmFsOkR1LGFzc2VydDpqZixhc3NlcnRFcXVhbDpBZixhc3NlcnRJczpaZixhc3NlcnROZXZlcjpOZixhc3NlcnROb3RFcXVhbDpSZixhc3NpZ25Qcm9wOm50LGF0dGFjaFNjaGVtYTpkcyxiYXNlNjRUb1VpbnQ4QXJyYXk6ZWwsYmFzZTY0dXJsVG9VaW50OEFycmF5OkdmLGNhY2hlZDpYdCxjYXB0dXJlU3RhY2tUcmFjZTpJcyxjbGVhbkVudW06V2YsY2xlYW5SZWdleDpxZSxjbG9uZTpHLGNsb25lRGVmOkxmLGNvZGVQb2ludExlbmd0aDpqbyxjb25zdGFudENhdGNoOnhzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6SmYsZGVmaW5lTGF6eTpadSxkZWZpbmVMYXp5SW50ZXJuYWw6QSxkZXJpdmVkOmVuLGVzYzpNdSxlc2NhcGVSZWdleDpPZSxleHBsaWNpdGx5QWJvcnRlZDpZdSxleHRlbmQ6SnUsZmluYWxpemVJc3N1ZTokZSxmbG9hdFNhZmVSZW1haW5kZXI6UnUsZ2V0RWxlbWVudEF0UGF0aDpVZixnZXRFbnVtVmFsdWVzOmNzLGdldExlbmd0aGFibGVPcmlnaW46TW8sZ2V0UGFyc2VkVHlwZTpWZixnZXRTaXphYmxlT3JpZ2luOk5vLGhleFRvVWludDhBcnJheTpZZixoaWRlOnFvLGluc3RhbGxMYXp5UHJvcDpvbCxpc09iamVjdDpkdCxpc1BsYWluT2JqZWN0OkxlLGlzc3VlOnB0LGpvaW5WYWx1ZXM6dXMsanNvblN0cmluZ2lmeVJlcGxhY2VyOnZvLG1lbWJlcnM6bmwsbWVyZ2U6R3UsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6VHMsbnVtS2V5czpCZixvYmplY3RDbG9uZTpxZixvbWl0OlZ1LG9wdGlvbmFsS2V5czpVdSxvd246QWUscGFyc2VkVHlwZTpYdSxwYXJ0aWFsOmxzLHBpY2s6QnUscHJlZml4SXNzdWVzOl9lLHByaW1pdGl2ZVR5cGVzOkx1LHByb21pc2VBbGxPYmplY3Q6RmYscHJvcGVydHlLZXlUeXBlczp5byxyYW5kb21TdHJpbmc6SGYscmF3U2hhcGU6QW8scmVxdWlyZWQ6UXUsc2FmZUV4dGVuZDpXdSxzaGFsbG93Q2xvbmU6Um8sc2x1Z2lmeTpxdSxzdHJpbmdpZnlQcmltaXRpdmU6UHMsdG9ab2Q6T28sdWludDhBcnJheVRvQmFzZTY0OnRsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpRZix1aW50OEFycmF5VG9IZXg6WGYsdW53cmFwTWVzc2FnZTppdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgSGM7Y29uc3QgRXM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLG9zPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IEJjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIHJtKGUpe2NvbnN0IHQ9QmM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBCYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyhiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7b3MudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixvcyl9ZmluYWxseXtvcy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxhKXtjb25zdCBrPU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBaPWs7Zm9yKDtaJiZaIT09JDspWj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoWik7Y29uc3QgVD1aPz9rO2EuaGFzKFQpfHwoYS5hZGQoVCksbmwoVCxpKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgayBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLGspJiYoayBpbiBifHwoYltrXT1fW2tdLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P3JtKGQpOnRoaXM7Yyh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgaz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gayYmayh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBPcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIERlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIERvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShIYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhIYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIGVlKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIHNtKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZix2bywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIGltKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgYW09e2dldDpzbSxzZXQ6aW0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHJzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sVmM9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksc2w9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIscnMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixycykscnMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixhbSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7VmMuaGFzKG4pfHwoVmMuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LGlsPXAoIiRab2RFcnJvciIsc2wpLHZlPXAoIiRab2RFcnJvciIsc2wsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiBjbShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIExvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/Y20obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIFVvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAoYT0+byh7aXNzdWVzOmF9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCBhPVsuLi5zLC4uLmkucGF0aF07aWYoYS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoaSkpO2Vsc2V7bGV0IGM9bixsPTA7Zm9yKDtsPGEubGVuZ3RoOyl7Y29uc3QgZD1hW2xdLG09bD09PWEubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmYy5fZXJyb3JzLnB1c2godChpKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPWNbZF07bSYmYi5fZXJyb3JzLnB1c2godChpKSksYz1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBBcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgaTtmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoYz0+byh7aXNzdWVzOmN9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBjPVsuLi5zLC4uLmEucGF0aF07aWYoYy5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoYSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDxjLmxlbmd0aDspe2NvbnN0IG09Y1tkXSxiPWQ9PT1jLmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGk9bC5pdGVtcylbbV0/PyhpW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChhKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gYWwoZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIFJzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke2FsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIEZvKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgdG49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGE9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGkpO2lmKGEgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBEZTtpZihhLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IGM9bmV3KHM/LkVycj8/ZSkoYS5pc3N1ZXMubWFwKGw9PiRlKGwsaSxlZSgpKSkpO3Rocm93IElzKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0scHM9dG4odmUpLG5uPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSYmKGE9YXdhaXQgYSksYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcChsPT4kZShsLGksZWUoKSkpKTt0aHJvdyBJcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LGhzPW5uKHZlKSxvbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBEZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP3VsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sY2w9b24odmUpO2Z1bmN0aW9uIHVsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+JGUocixuLGVlKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBybj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP3VsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sdW09cm4odmUpLGxtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSxkbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLEhvPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09bG0pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBwbShlLHQsbil9KTtmdW5jdGlvbiBwbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1tkbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBEZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBCbz1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LFpzPWU9Pntjb25zdCB0PXRuKGUpLG49KG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixhLEZvKG4saSkpfTtyZXR1cm4gbn0saG09WnModmUpLE5zPWU9Pntjb25zdCB0PXRuKGUpLG49KG8scixzLGkpPT50KG8scixzLEZvKG4saSkpO3JldHVybiBufSxmbT1Ocyh2ZSksanM9ZT0+e2NvbnN0IHQ9bm4oZSksbj1hc3luYyhvLHIscyxpKT0+e2NvbnN0IGE9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsYSxGbyhuLGkpKX07cmV0dXJuIG59LG1tPWpzKHZlKSxNcz1lPT57Y29uc3QgdD1ubihlKSxuPWFzeW5jKG8scixzLGkpPT5hd2FpdCB0KG8scixzLEZvKG4saSkpO3JldHVybiBufSxnbT1Ncyh2ZSkscXM9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gb24oZSkodCxuLHIpfSxibT1xcyh2ZSksRHM9ZT0+KHQsbixvKT0+b24oZSkodCxuLG8pLHZtPURzKHZlKSxMcz1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHJuKGUpKHQsbixyKX0seW09THModmUpLFVzPWU9PmFzeW5jKHQsbixvKT0+cm4oZSkodCxuLG8pLF9tPVVzKHZlKSxsbD0vXltjQ11bMC05YS16XXs2LH0kLyxkbD0vXlswLTlhLXpdKyQvLHBsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLGhsPS9eWzAtOWEtdkEtVl17MjB9JC8sZmw9L15bQS1aYS16MC05XXsyN30kLyxtbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gZ2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IGJsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLGttPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sdmw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLGh0PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyx3bT1odCg0KSwkbT1odCg2KSxTbT1odCg3KSx5bD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyx6bT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxUbT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxfbD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxJbT1fbCxQbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyx4bT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIGtsKCl7cmV0dXJuIG5ldyBSZWdFeHAoeG0sInUiKX1jb25zdCB3bD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sJGw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxTbD1lPT57Y29uc3QgdD1PZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSx6bD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sVGw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sQ209L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sRW09L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLElsPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxQbD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sRnM9L15odHRwcz8kLyx4bD0vXlwrWzEtOV1cZHs2LDE0fSQvLEhzPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxDbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxCcz0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxFbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gT20oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IE9sPU9tKEVsKTtmdW5jdGlvbiBmcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIEFsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtmcyhlKX0kYCl9ZnVuY3Rpb24gUmwoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke2ZzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7ZnMoe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7RWx9VCg/OiR7b30pJGApfWNvbnN0IFpsPS9eW1xzXFNdezAsfSQvLE5sPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LGpsPS9eLT9cZCtuPyQvLE1sPS9eLT9cZCskLyxWbz0vXi0/XGQrKD86XC5cZCspPyQvLHFsPS9eKD86dHJ1ZXxmYWxzZSkkL2ksRGw9L15udWxsJC9pLExsPS9edW5kZWZpbmVkJC9pLFVsPS9eW15BLVpdKiQvLEZsPS9eW15hLXpdKiQvLEhsPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gc24oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIGFuKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBBbT0vXlswLTlhLWZBLUZdezMyfSQvLFJtPXNuKDIyLCI9PSIpLFptPWFuKDIyKSxObT0vXlswLTlhLWZBLUZdezQwfSQvLGptPXNuKDI3LCI9IiksTW09YW4oMjcpLHFtPS9eWzAtOWEtZkEtRl17NjR9JC8sRG09c24oNDMsIj0iKSxMbT1hbig0MyksVW09L15bMC05YS1mQS1GXXs5Nn0kLyxGbT1zbig2NCwiIiksSG09YW4oNjQpLEJtPS9eWzAtOWEtZkEtRl17MTI4fSQvLFZtPXNuKDg2LCI9PSIpLEptPWFuKDg2KSxKbz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOlpsLGJhc2U2NDpDbSxiYXNlNjR1cmw6RW0sYmlnaW50OmpsLGJvb2xlYW46cWwsYnJvd3NlckVtYWlsOlBtLGNpZHJ2NDp6bCxjaWRydjY6VGwsY3JlZGl0Q2FyZDpIcyxjdWlkOmxsLGN1aWQyOmRsLGN1cnJlbmN5Q29kZTpDbCxkYXRlOk9sLGRhdGV0aW1lOlJsLGRvbWFpbjpQbCxkdXJhdGlvbjpibCxlMTY0OnhsLGVtYWlsOnlsLGVtb2ppOmtsLGV4dGVuZGVkRHVyYXRpb246a20sZ3VpZDp2bCxoZXg6SGwsaG9zdG5hbWU6SWwsaHRtbDVFbWFpbDp6bSxodHRwUHJvdG9jb2w6RnMsaWJhbjpCcyxpZG5FbWFpbDpJbSxpbnRlZ2VyOk1sLGlwdjQ6d2wsaXB2NjokbCxrc3VpZDpmbCxsb3dlcmNhc2U6VWwsbWFjOlNsLG1kNV9iYXNlNjQ6Um0sbWQ1X2Jhc2U2NHVybDpabSxtZDVfaGV4OkFtLG5hbm9pZDptbCxuYW5vaWRPZkxlbmd0aDpnbCxudWxsOkRsLG51bWJlcjpWbyxyZmM1MzIyRW1haWw6VG0sc2hhMV9iYXNlNjQ6am0sc2hhMV9iYXNlNjR1cmw6TW0sc2hhMV9oZXg6Tm0sc2hhMjU2X2Jhc2U2NDpEbSxzaGEyNTZfYmFzZTY0dXJsOkxtLHNoYTI1Nl9oZXg6cW0sc2hhMzg0X2Jhc2U2NDpGbSxzaGEzODRfYmFzZTY0dXJsOkhtLHNoYTM4NF9oZXg6VW0sc2hhNTEyX2Jhc2U2NDpWbSxzaGE1MTJfYmFzZTY0dXJsOkptLHNoYTUxMl9oZXg6Qm0sc3RyaW5nOk5sLHRpbWU6QWwsdWxpZDpwbCx1bmRlZmluZWQ6TGwsdW5pY29kZUVtYWlsOl9sLHVwcGVyY2FzZTpGbCx1dWlkOmh0LHV1aWQ0OndtLHV1aWQ2OiRtLHV1aWQ3OlNtLHhpZDpobH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxKPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxWcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFUcyh0KSYmdC5zaXplIT09dm9pZCAwfSxKcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFUcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LF9vPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LEtzPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49X29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOl9vW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFdzPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49X29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOl9vW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksQmw9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6UnUobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxWbD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Si5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPUZ1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9aT0+e2NvbnN0IGE9aS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihhKSl7aS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDphLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoYSkpe2E+MD9pLmlzc3Vlcy5wdXNoKHtpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTppLmlzc3Vlcy5wdXNoKHtpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19YTxyJiZpLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksYT5zJiZpLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEpsPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdFtuLG9dPUh1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksS2w9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVZzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOk5vKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFdsPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1WcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpObyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEdsPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1WcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgaT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Tm8ociksLi4uaT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxRbD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1KcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9qbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBhPU1vKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjphLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFlsPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUpzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9qbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBhPU1vKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWGw9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49SnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsaT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP2pvKHIpOnM7aWYoaT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBhPU1vKHIpLGM9aT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSwuLi5jP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxjbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztKLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSxlZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pntjbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx0ZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVsKSxjbi5pbml0KGUsdCl9KSxuZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUZsKSxjbi5pbml0KGUsdCl9KSxvZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPU9lKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxyZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7T2UodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxzZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtPZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBrbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLl9lKG4sZS5pc3N1ZXMpKX1jb25zdCBpZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5rbyhyLG4sdC5wcm9wZXJ0eSkpO2tvKG8sbix0LnByb3BlcnR5KX19KSxhZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e0ouaW5pdChlLHQpLHFvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChpPT5baSx0LnNoYXBlW2ldXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbaSxhXW9mIG4pe2NvbnN0IGM9YS5fem9kLnJ1bih7dmFsdWU6cltpXSxpc3N1ZXM6W119LHt9KTtjIGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaChjLnRoZW4obD0+a28obCxvLGkpKSkpOmtvKGMsbyxpKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksY2Q9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx1ZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Si5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgbGR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihpPT5pKSxyPU1hdGgubWluKC4uLm8ubWFwKGk9PmkubGVuZ3RoLWkudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChpPT5pLnNsaWNlKHIpKS5tYXAoaT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKStpKTtmb3IoY29uc3QgaSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGkpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCBkZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LHg9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPWRkO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgaSBvZiBzLl96b2Qub25hdHRhY2gpaShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShhLGMsbCk9PntpZihhLm1lbW8pcmV0dXJuIGE7bGV0IGQ9aGUoYSksbTtmb3IoY29uc3QgYiBvZiBjKXtpZihiLl96b2QuZGVmLndoZW4pe2lmKFl1KGEpfHwhYi5fem9kLmRlZi53aGVuKGEpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWEuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhhKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgRGU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8sYS5pc3N1ZXMubGVuZ3RoIT09diYmKGRzKGEuaXNzdWVzLHYsZSksZHx8KGQ9aGUoYSx2KSkpfSk7ZWxzZXtpZihhLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO2RzKGEuaXNzdWVzLHYsZSksZHx8KGQ9aGUoYSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+YSk6YX0saT0oYSxjLGwpPT57aWYoaGUoYSkpcmV0dXJuIGEuYWJvcnRlZD0hMCxhO2NvbnN0IGQ9cyhjLHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRGU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShhLGMpPT57aWYoYy5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoYSxjKTtpZihjLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTphLnZhbHVlLGlzc3VlczpbXX0sey4uLmMsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+aShtLGEsYykpOmkoZCxhLGMpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGEsYyk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGMuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRGU7cmV0dXJuIGwudGhlbihkPT5zKGQscixjKSl9cmV0dXJuIHMobCxyLGMpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBxbyh0aGlzLCJ+c3RhbmRhcmQiLEdzKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7QWUodGhpcywifnN0YW5kYXJkIixlKX19KSxwZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PiRlKG4sdCxlZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBLbShlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gcGQoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIEdzKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gcGQobyxuKX1jYXRjaHt9cmV0dXJuIEttKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IHVuPXAoIiRab2RTdHJpbmciLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9abCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEY9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pntjbi5pbml0KGUsdCksdW4uaW5pdChlLHQpfSksaGQ9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXZsKSxGLmluaXQoZSx0KX0pLGZkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aHQobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWh0KCkpO0YuaW5pdChlLHQpfSksbWQ9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj15bCksRi5pbml0KGUsdCl9KSxRcz0xLEp0PTI7ZnVuY3Rpb24gWXMoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBnZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP1lzKGUpfHxKdDpiZChlLHQpfWZ1bmN0aW9uIGJkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1Gcy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gUXM7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/SnR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIEp0fX1jb25zdCBXbT0vW1x0XG5ccl0vZztmdW5jdGlvbiBtcyhlKXtyZXR1cm4gZS5yZXBsYWNlKFdtLCIiKX1mdW5jdGlvbiB2ZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiB5ZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBfZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1nZChvLHQpO2lmKHI9PT1Rcyl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1KdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9bXMobyk7cmV0dXJufXQuaG9zdG5hbWUmJiF2ZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYheWQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6bXMobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksa2Q9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1rbCgpKSxGLmluaXQoZSx0KX0pLHdkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9tbDpnbCh0Lmxlbmd0aCkpLEYuaW5pdChlLHQpfSksJGQ9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWxsKSxGLmluaXQoZSx0KX0pLFNkPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZGwpLEYuaW5pdChlLHQpfSksemQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXBsKSxGLmluaXQoZSx0KX0pLFRkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWhsKSxGLmluaXQoZSx0KX0pLElkPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZmwpLEYuaW5pdChlLHQpfSksUGQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1SbCh0KSksRi5pbml0KGUsdCl9KSx4ZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49T2wpLEYuaW5pdChlLHQpfSksQ2Q9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUFsKHQpKSxGLmluaXQoZSx0KX0pLEVkPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YmwpLEYuaW5pdChlLHQpfSksT2Q9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXdsKSxGLmluaXQoZSx0KX0pLEdtPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBYcyhlKXtyZXR1cm4gR20udGVzdChlKT9ZcyhgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IEFkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj0kbCksRi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntYcyhuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxSZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1TbCh0LmRlbGltaXRlcikpLEYuaW5pdChlLHQpfSksWmQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49emwpLEYuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTmQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOlhzKG4pfWNvbnN0IGpkPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVRsKSxGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e05kKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gZWkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBNZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8scWQ9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TWQpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57ZWkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx0aT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gRGQoZSl7aWYoIXRpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gZWkobil9Y29uc3QgTGQ9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dGkpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxVZD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eGwpLEYuaW5pdChlLHQpfSksUW09L1stIF0vZztmdW5jdGlvbiBZbShlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBGZChlKXtyZXR1cm4gSHMudGVzdChlKT9ZbShlLnJlcGxhY2UoUW0sIiIpKTohMX1jb25zdCBIZD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SHMpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RmQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIFhtKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIEJkKGUpe3JldHVybiBCcy50ZXN0KGUpP1htKGUpOiExfWNvbnN0IFZkPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1CcyksRi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntCZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBKZChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IEtkPXAoIiRab2RKV1QiLChlLHQpPT57Ri5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntKZChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFdkPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57Ri5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbmk9cCgiJFpvZE51bWJlciIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1WbyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxHZD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e1ZsLmluaXQoZSx0KSxuaS5pbml0KGUsdCl9KSxvaT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1xbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHJpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49amwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxRZD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0psLmluaXQoZSx0KSxyaS5pbml0KGUsdCl9KSxZZD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxYZD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPUxsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGVwPXAoIiRab2ROdWxsIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPURsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx0cD1wKCIkWm9kQW55IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksbnA9cCgiJFpvZFVua25vd24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxvcD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxycD1wKCIkWm9kVm9pZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHNwPXAoIiRab2REYXRlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gSmMoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5fZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IGlwPXAoIiRab2RBcnJheSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgaT1bXSxhPXI/LmFib3J0RWFybHk7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspe2NvbnN0IGw9c1tjXSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaChkLnRoZW4obT0+SmMobSxvLGMpKSk7ZWxzZSBpZihKYyhkLG8sYyksYSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmaGUoZCkpYnJlYWt9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gd28oZSx0LG4sbyxyLHMpe2NvbnN0IGk9biBpbiBvLGE9cz09PSJvcHRpb25hbCI7aWYoISghaSYmYSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmEmJiFpKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLl9lKG4sZS5pc3N1ZXMpKX1pZighaSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGl8fHI9PT0iZGVmYXVsdGVkIiYmIWEpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgZWc9W107ZnVuY3Rpb24gYXAoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOmVnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgaSBvZiByKWlmKCFlLnNoYXBlPy5baV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoaSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1VdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIGNwKGUsdCxuLG8scixzLGkpe2NvbnN0IGE9W10sYz1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihpJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihoZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKGMuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmEucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7YS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IGs9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2goay50aGVuKCQ9PndvKCQsbixfLHQsbSxiKSkpOndvKGssbixfLHQsbSxiKX1yZXR1cm4gYS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmEsaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IHVwPXAoIiRab2RPYmplY3QiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9WHQoKCk9PmFwKHQpKTtBKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHxudChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPWR0LGk9dC5jYXRjaGFsbDtsZXQgYTtjb25zdCBjPWRlLm1lbW9pemVyO2M/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PnthPz8oYT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9Yz9jLmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9YS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IGs9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGEuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09ayl7aWYoaGUobCxrKSlicmVhaztrPWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgWj12WyRdLFQ9Wi5fem9kLm9wdGluLEs9Wi5fem9kLm9wdG91dCxuZT1aLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7bmUgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChuZS50aGVuKFc9PndvKFcsbCwkLG0sVCxLKSkpOndvKG5lLGwsJCxtLFQsSyl9cmV0dXJuIGk/Y3AoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLGxwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57dXAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89WHQoKCk9PmFwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSxrPV8uc3ltYm9sS2V5cywkPW5ldyBsZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6a30pLFo9Vz0+YHNoYXBlWyR7V31dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7V31dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFQ9KFcsSCk9PmAKICAgICAgICAgIGxldCAke1d9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7V30uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7V30uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7SH0sIC4uLmlzcy5wYXRoXSA6IFske0h9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke1d9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke1d9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBLPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG5lPTA7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKUtbV109YGtleV8ke25lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKXtpZihXPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgSD1LW1ddLHc9dHlwZW9mIFc9PSJzeW1ib2wiP2BzeW1zWyR7ay5pbmRleE9mKFcpfV1gOk11KFcpLEk9YCR7d30gaW4gaW5wdXRgLGFlPXZbV10sY2U9YWU/Ll96b2Q/Lm9wdGluLFBlPWNlIT09dm9pZCAwLHN0PWFlPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7SH0gPSAke1oodyl9O2ApLFBlJiZzdCl7Y29uc3QgdHM9Y2U9PT0ib3B0aW9uYWwiP2Ake0h9X3ByZXNlbnRgOmAke0h9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtIfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0h9X3ByZXNlbnQgPSAke0l9OwogICAgICAgIGlmICghJHtIfS5pc3N1ZXMubGVuZ3RoIHx8ICR7SH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7VChILHcpfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke3RzfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHt3fV0gPSAke0h9LnZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGApfWVsc2UgUGU/KCQud3JpdGUoYAogICAgICAgIGlmICgke0h9Lmlzc3Vlcy5sZW5ndGgpIHske1QoSCx3KX0KICAgICAgICB9CiAgICAgIGApLGNlPT09ImRlZmF1bHRlZCI/JC53cml0ZShgbmV3UmVzdWx0WyR7d31dID0gJHtIfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtIfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7SX0pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske3d9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtIfV9wcmVzZW50ID0gJHtJfTsKICAgICAgICBpZiAoJHtIfS5pc3N1ZXMubGVuZ3RoKSB7JHtUKEgsdyl9CiAgICAgICAgfQogICAgICAgIGlmICghJHtIfV9wcmVzZW50ICYmICEke0h9Lmlzc3Vlcy5sZW5ndGgpIHsKICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goewogICAgICAgICAgICBjb2RlOiAiaW52YWxpZF90eXBlIiwKICAgICAgICAgICAgZXhwZWN0ZWQ6ICJub25vcHRpb25hbCIsCiAgICAgICAgICAgIGlucHV0OiB1bmRlZmluZWQsCiAgICAgICAgICAgIHBhdGg6IFske3d9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7SH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7d31dID0gJHtIfS52YWx1ZTsKICAgICAgICB9CgogICAgICBgKX1yZXR1cm4gJC53cml0ZSgicGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsiKSwkLndyaXRlKCJyZXR1cm4gcGF5bG9hZDsiKSwkLmNvbXBpbGUoKX07bGV0IGk7Y29uc3QgYT1kdCxjPSFkZS5qaXRsZXNzLGQ9YyYmRHUudmFsdWUsbT10LmNhdGNoYWxsO2xldCBiO2UuX3pvZC5wYXJzZT0odixfKT0+e2I/PyhiPW8udmFsdWUpO2NvbnN0IGs9di52YWx1ZTtyZXR1cm4gYShrKT9jJiZkJiZfPy5hc3luYz09PSExJiZfLmppdGxlc3MhPT0hMD8oaXx8KGk9cyh0LnNoYXBlKSksdj1pKHYsXyksbT9jcChbXSxrLHYsXyxiLGUsXz8uYWJvcnRFYXJseT09PSEwKTp2KTpuKHYsXyk6KHYuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ayxpbnN0OmV9KSx2KX19KTtmdW5jdGlvbiBLYyhlLHQsbixvKXtmb3IoY29uc3QgcyBvZiBlKWlmKHMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHQudmFsdWU9cy52YWx1ZSx0O2NvbnN0IHI9ZS5maWx0ZXIocz0+IWhlKHMpKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPXJbMF0udmFsdWUsclswXSk6KHQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+JGUoaSxvLGVlKCkpKSl9KSx0KX1jb25zdCBLbz1wKCIkWm9kVW5pb24iLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksQShlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEEoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksQShlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+cWUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2kucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5LYyhhLG8sZSxyKSk6S2MoaSxvLGUscil9fSk7ZnVuY3Rpb24gV2MoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT4kZShpLG8sZWUoKSkpKX0pOnQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczpbXSxpbmNsdXNpdmU6ITEsbWF0Y2hlczpyfSksdCl9Y29uc3QgZHA9cCgiJFpvZFhvciIsKGUsdCk9PntLby5pbml0KGUsdCksdC5pbmNsdXNpdmU9ITE7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgaT1bXTtmb3IoY29uc3QgYSBvZiB0Lm9wdGlvbnMpe2NvbnN0IGM9YS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhpLnB1c2goYykscz0hMCk6aS5wdXNoKGMpfXJldHVybiBzP1Byb21pc2UuYWxsKGkpLnRoZW4oYT0+V2MoYSxvLGUscikpOldjKGksbyxlLHIpfX0pO2Z1bmN0aW9uIHNpKGUsdCl7Y29uc3Qgbj1lLl96b2Q7bGV0IG89bi5iYWcub3B0aW9uc01hcDtvfHwobz1wcChuLmRlZiksbi5iYWcub3B0aW9uc01hcD1vKTtjb25zdCByPW8uZ2V0KHQpO2lmKHI9PT1udWxsKXRocm93IG5ldyBFcnJvcihgQW1iaWd1b3VzIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHQpfSJgKTtyZXR1cm4gcn1mdW5jdGlvbiBwcChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0IG4gb2YgZS5vcHRpb25zKXtjb25zdCBvPW4uX3pvZC5wcm9wVmFsdWVzPy5bZS5kaXNjcmltaW5hdG9yXTtpZighb3x8by5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ZS5vcHRpb25zLmluZGV4T2Yobil9ImApO2Zvcihjb25zdCByIG9mIG8paWYodC5oYXMocikpe2lmKHIhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcocil9ImApO3Quc2V0KHIsbnVsbCl9ZWxzZSB0LnNldChyLG4pfXJldHVybiB0fWNvbnN0IGhwPXAoIiRab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57dC5pbmNsdXNpdmU9ITEsS28uaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlO0EoZSwicHJvcFZhbHVlcyIscj0+e2NvbnN0IHM9e307bGV0IGk9MDtmb3IoY29uc3QgYSBvZiByLmRlZi5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5wcm9wVmFsdWVzO2lmKCFjfHxPYmplY3Qua2V5cyhjKS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtyLmRlZi5vcHRpb25zLmluZGV4T2YoYSl9ImApO2Nbci5kZWYuZGlzY3JpbWluYXRvcl0/Lmhhcyh2b2lkIDApJiZpKys7Zm9yKGNvbnN0W2wsZF1vZiBPYmplY3QuZW50cmllcyhjKSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbCl8fG50KHMsbCxuZXcgU2V0KTtmb3IoY29uc3QgbSBvZiBkKXNbbF0uYWRkKG0pfX1yZXR1cm4hci5kZWYudW5pb25GYWxsYmFjayYmaT4xJiZzW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5kZWxldGUodm9pZCAwKSxzfSksdC5vcHRpb25zLmZvckVhY2goKHIscyk9Pntjb25zdCBpPUFvKHIuX3pvZC5kZWYpO2lmKGkmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSx0LmRpc2NyaW1pbmF0b3IpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtzfSJgKX0pO2NvbnN0IG89WHQoKCk9PnBwKHQpKTtlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIWR0KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJvYmplY3QiLGlucHV0OmksaW5zdDplfSkscjtjb25zdCBhPWk/Llt0LmRpc2NyaW1pbmF0b3JdLGM9by52YWx1ZS5nZXQoYSk7cmV0dXJuIGMmJihhIT09dm9pZCAwfHxzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCIpP2MuX3pvZC5ydW4ocixzKTp0LnVuaW9uRmFsbGJhY2t8fHMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIj9uKHIscyk6KHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGVycm9yczpbXSxub3RlOiJObyBtYXRjaGluZyBkaXNjcmltaW5hdG9yIixkaXNjcmltaW5hdG9yOnQuZGlzY3JpbWluYXRvcixvcHRpb25zOkFycmF5LmZyb20oby52YWx1ZS5rZXlzKCkpLmZpbHRlcihsPT5vLnZhbHVlLmdldChsKSE9PW51bGwpLGlucHV0OmkscGF0aDpbdC5kaXNjcmltaW5hdG9yXSxpbnN0OmV9KSxyKX19KSxmcD1wKCIkWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZSxzPXQubGVmdC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pLGk9dC5yaWdodC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZXx8aSBpbnN0YW5jZW9mIFByb21pc2U/UHJvbWlzZS5hbGwoW3MsaV0pLnRoZW4oKFtjLGxdKT0+R2MobixjLGwpKTpHYyhuLHMsaSl9fSk7ZnVuY3Rpb24gJG8oZSx0KXtpZihlPT09dClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUmJitlPT0rdClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihMZShlKSYmTGUodCkpe2NvbnN0IG49T2JqZWN0LmtleXModCksbz1PYmplY3Qua2V5cyhlKS5maWx0ZXIocz0+bi5pbmRleE9mKHMpIT09LTEpLHI9ey4uLmUsLi4udH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIl9fcHJvdG9fXyIpJiZkZWxldGUgci5fX3Byb3RvX187Zm9yKGNvbnN0IHMgb2Ygbyl7aWYocz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGk9JG8oZVtzXSx0W3NdKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W3MsLi4uaS5tZXJnZUVycm9yUGF0aF19O3Jbc109aS5kYXRhfXJldHVybnt2YWxpZDohMCxkYXRhOnJ9fWlmKEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkodCkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfTtjb25zdCBuPVtdO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtjb25zdCByPWVbb10scz10W29dLGk9JG8ocixzKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W28sLi4uaS5tZXJnZUVycm9yUGF0aF19O24ucHVzaChpLmRhdGEpfXJldHVybnt2YWxpZDohMCxkYXRhOm59fXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX19ZnVuY3Rpb24gR2MoZSx0LG4pe2NvbnN0IG89bmV3IE1hcDtsZXQgcjtjb25zdCBzPW5ldyBNYXAsaT0obCxkKT0+e2xldCBtO2lmKGwuY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyImJiFsLnBhdGg/Lmxlbmd0aClyPz8ocj1sKSxtPWwua2V5cztlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX2tleSImJmwub3JpZ2luPT09InJlY29yZCImJmwucGF0aD8ubGVuZ3RoPT09MSl7Y29uc3QgYj1TdHJpbmcobC5wYXRoWzBdKTtzLmhhcyhiKXx8cy5zZXQoYixsKSxtPVtiXX1lbHNlIHJldHVybiExO2Zvcihjb25zdCBiIG9mIG0pby5oYXMoYil8fG8uc2V0KGIse30pLG8uZ2V0KGIpW2RdPSEwO3JldHVybiEwfTtmb3IoY29uc3QgbCBvZiB0Lmlzc3VlcylpKGwsImwiKXx8ZS5pc3N1ZXMucHVzaChsKTtmb3IoY29uc3QgbCBvZiBuLmlzc3VlcylpKGwsInIiKXx8ZS5pc3N1ZXMucHVzaChsKTtjb25zdCBhPVsuLi5vXS5maWx0ZXIoKFssbF0pPT5sLmwmJmwucikubWFwKChbbF0pPT5sKTtpZihhLmxlbmd0aCl7Y29uc3QgbD1yP2EuZmlsdGVyKGQ9PnIua2V5cy5pbmNsdWRlcyhkKSk6W107bC5sZW5ndGgmJmUuaXNzdWVzLnB1c2goey4uLnIsa2V5czpsfSk7Zm9yKGNvbnN0IGQgb2YgYSkhbC5pbmNsdWRlcyhkKSYmcy5oYXMoZCkmJmUuaXNzdWVzLnB1c2gocy5nZXQoZCkpfWNvbnN0IGM9JG8odC52YWx1ZSxuLnZhbHVlKTtpZighYy52YWxpZCl7aWYoaGUoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbm1lcmdhYmxlIGludGVyc2VjdGlvbi4gRXJyb3IgcGF0aDogJHtKU09OLnN0cmluZ2lmeShjLm1lcmdlRXJyb3JQYXRoKX1gKX1yZXR1cm4gZS52YWx1ZT1jLmRhdGEsZX1jb25zdCBpaT1wKCIkWm9kVHVwbGUiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj10Lml0ZW1zLG89ZGUubWVtb2l6ZXI7bz8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighQXJyYXkuaXNBcnJheShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7aW5wdXQ6aSxpbnN0OmUsZXhwZWN0ZWQ6InR1cGxlIixjb2RlOiJpbnZhbGlkX3R5cGUifSkscjtyLnZhbHVlPW8/by5hbGxvYyhlLHIsW10scyk6W107Y29uc3QgYT1bXSxjPVFjKG4sIm9wdGluIiksbD1RYyhuLCJvcHRvdXQiKTtpZighdC5yZXN0KXtpZihpLmxlbmd0aDxjKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06YyxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KSxyO2kubGVuZ3RoPm4ubGVuZ3RoJiZyLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm4ubGVuZ3RoLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pfWNvbnN0IGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxtPXQucmVzdD9zPy5hYm9ydEVhcmx5OnZvaWQgMDtsZXQgYj0hMTtmb3IobGV0IHY9MDt2PG4ubGVuZ3RoO3YrKyl7Y29uc3QgXz1uW3ZdLl96b2QucnVuKHt2YWx1ZTppW3ZdLGlzc3VlczpbXX0scyk7XyBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKF8udGhlbihrPT57ZFt2XT1rfSkpOihkW3ZdPV8sbSYmIWImJl8uaXNzdWVzLmxlbmd0aCYmKGI9aGUoXykpKX1pZih0LnJlc3QmJiFiKXtsZXQgdj1uLmxlbmd0aC0xO2NvbnN0IF89aS5zbGljZShuLmxlbmd0aCk7bGV0IGs9ci5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIF8pe2lmKG0mJnIuaXNzdWVzLmxlbmd0aCE9PWspe2lmKGhlKHIsaykpYnJlYWs7az1yLmlzc3Vlcy5sZW5ndGh9disrO2NvbnN0IFo9dC5yZXN0Ll96b2QucnVuKHt2YWx1ZTokLGlzc3VlczpbXX0scyk7WiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFoudGhlbihUPT5ZYyhULHIsdikpKTpZYyhaLHIsdil9fXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5YYyhkLHIsbixpLGwpKTpYYyhkLHIsbixpLGwpfX0pO2Z1bmN0aW9uIFFjKGUsdCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoISh0PT09Im9wdGluIj9lW25dLl96b2Qub3B0aW4hPT12b2lkIDA6ZVtuXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpKXJldHVybiBuKzE7cmV0dXJuIDB9ZnVuY3Rpb24gWWMoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5fZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWZ1bmN0aW9uIFhjKGUsdCxuLG8scil7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IGk9ZVtzXSxhPXM8by5sZW5ndGg7aWYoIWEmJnM+PXImJm5bc10uX3pvZC5vcHRpbj09PSJvcHRpb25hbCIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9aWYoaS5pc3N1ZXMubGVuZ3RoKXtpZighYSYmcz49cil7dC52YWx1ZS5sZW5ndGg9czticmVha310Lmlzc3Vlcy5wdXNoKC4uLl9lKHMsaS5pc3N1ZXMpKX10LnZhbHVlW3NdPWkudmFsdWV9Zm9yKGxldCBzPXQudmFsdWUubGVuZ3RoLTE7cz49by5sZW5ndGgmJihuW3NdLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIiYmdC52YWx1ZVtzXT09PXZvaWQgMCk7cy0tKXQudmFsdWUubGVuZ3RoPXM7cmV0dXJuIHR9Y29uc3QgbXA9cCgiJFpvZFJlY29yZCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUxlKHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoicmVjb3JkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdLGE9dC5rZXlUeXBlLl96b2QudmFsdWVzO2lmKGEmJiF0LnBhcnRpYWwpe28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtjb25zdCBjPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYSlpZih0eXBlb2YgZD09InN0cmluZyJ8fHR5cGVvZiBkPT0ibnVtYmVyInx8dHlwZW9mIGQ9PSJzeW1ib2wiKXtpZihjLmFkZCh0eXBlb2YgZD09Im51bWJlciI/ZC50b1N0cmluZygpOmQpLGQ9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO2lmKG0gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKG0uaXNzdWVzLmxlbmd0aCl7by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6bS5pc3N1ZXMubWFwKF89PiRlKF8scixlZSgpKSksaW5wdXQ6ZCxwYXRoOltkXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBiPW0udmFsdWU7aWYoYj09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IHY9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbZF0saXNzdWVzOltdfSxyKTt2IGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2godi50aGVuKF89PntfLmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uX2UoZCxfLmlzc3VlcykpLG8udmFsdWVbYl09Xy52YWx1ZX0pKToodi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLl9lKGQsdi5pc3N1ZXMpKSxvLnZhbHVlW2JdPXYudmFsdWUpfWxldCBsO2Zvcihjb25zdCBkIGluIHMpaWYoIWMuaGFzKGQpKWlmKHQubW9kZT09PSJsb29zZSIpe2lmKGQ9PT0iX19wcm90b19fIiljb250aW51ZTtvLnZhbHVlW2RdPXNbZF19ZWxzZSBsPWw/P1tdLGwucHVzaChkKTtsJiZsLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpsLGNvbnRpbnVlOiEwfSl9ZWxzZXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307bGV0IGM7Zm9yKGNvbnN0IGwgb2YgUmVmbGVjdC5vd25LZXlzKHMpKXtpZihsPT09Il9fcHJvdG9fXyJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocyxsKSljb250aW51ZTtsZXQgZD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZih0eXBlb2YgbD09InN0cmluZyImJlZvLnRlc3QobCkmJmQuaXNzdWVzLmxlbmd0aCl7Y29uc3QgXz10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOk51bWJlcihsKSxpc3N1ZXM6W119LHIpO2lmKF8gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO18uaXNzdWVzLmxlbmd0aD09PTAmJihkPV8pfWlmKGQuaXNzdWVzLmxlbmd0aCl7dC5tb2RlPT09Imxvb3NlIj9vLnZhbHVlW2xdPXNbbF06YT8oYz1jPz9bXSxjLnB1c2gobCkpOm8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmQuaXNzdWVzLm1hcChfPT4kZShfLHIsZWUoKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1kLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLl9lKGwsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5fZShsLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSksZ3A9cCgiJFpvZE1hcCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W2wsZF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihoZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0sciksYj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO20gaW5zdGFuY2VvZiBQcm9taXNlfHxiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW20sYl0pLnRoZW4oKFt2LF9dKT0+e2V1KHYsXyxvLGwscyxlLHIpfSkpOmV1KG0sYixvLGwscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGV1KGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKHlvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5fZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PiRlKGEsaSxlZSgpKSl9KSksdC5pc3N1ZXMubGVuZ3RoJiYoeW8uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLl9lKG8sdC5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im1hcCIsY29kZToiaW52YWxpZF9lbGVtZW50IixpbnB1dDpyLGluc3Q6cyxrZXk6byxpc3N1ZXM6dC5pc3N1ZXMubWFwKGE9PiRlKGEsaSxlZSgpKSl9KSksbi52YWx1ZS5zZXQoZS52YWx1ZSx0LnZhbHVlKX1jb25zdCBicD1wKCIkWm9kU2V0IiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49ZGUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtpbnB1dDpzLGluc3Q6ZSxleHBlY3RlZDoic2V0Iixjb2RlOiJpbnZhbGlkX3R5cGUifSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgU2V0LHIpOm5ldyBTZXQ7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgbCBvZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihoZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGQ9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtkIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goZC50aGVuKG09PnR1KG0sbykpKTp0dShkLG8pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIHR1KGUsdCl7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmUuaXNzdWVzKSx0LnZhbHVlLmFkZChlLnZhbHVlKX1jb25zdCB2cD1wKCIkWm9kRW51bSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWNzKHQuZW50cmllcyksbz1uZXcgU2V0KG4pO2UuX3pvZC52YWx1ZXM9byxBKGUsInBhdHRlcm4iLHI9Pntjb25zdCBzPWNzKHIuZGVmLmVudHJpZXMpLmZpbHRlcihpPT55by5oYXModHlwZW9mIGkpKTtyZXR1cm4gbmV3IFJlZ0V4cChzLmxlbmd0aD9gXigke3MubWFwKGk9Pk9lKGkudG9TdHJpbmcoKSkpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7cmV0dXJuIG8uaGFzKGkpfHxyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6bixpbnB1dDppLGluc3Q6ZX0pLHJ9fSkseXA9cCgiJFpvZExpdGVyYWwiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQudmFsdWVzKTtlLl96b2QudmFsdWVzPW4sQShlLCJwYXR0ZXJuIixvPT57Y29uc3Qgcj1vLmRlZi52YWx1ZXM7cmV0dXJuIG5ldyBSZWdFeHAoci5sZW5ndGg/YF4oJHtyLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/T2Uocyk6cz9PZShzLnRvU3RyaW5nKCkpOlN0cmluZyhzKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtyZXR1cm4gbi5oYXMocyl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0LnZhbHVlcyxpbnB1dDpzLGluc3Q6ZX0pLG99fSksX3A9cCgiJFpvZEZpbGUiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiByIGluc3RhbmNlb2YgRmlsZXx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImZpbGUiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGtwPXAoIiRab2RUcmFuc2Zvcm0iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJvcHRpb25hbCIsZGUubWVtb2l6ZXI/Lmd1YXJkKGUpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgRG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7aWYoby5hc3luYylyZXR1cm4ociBpbnN0YW5jZW9mIFByb21pc2U/cjpQcm9taXNlLnJlc29sdmUocikpLnRoZW4oaT0+KG4udmFsdWU9aSxuKSk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IERlO3JldHVybiBuLnZhbHVlPXIsbn19KTtmdW5jdGlvbiBudShlLHQpe3JldHVybiBlLnZhbHVlPXQuaXNzdWVzLmxlbmd0aD92b2lkIDA6dC52YWx1ZSxlfWNvbnN0IGFpPXAoIiRab2RPcHRpb25hbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLGUuX3pvZC5vcHRvdXQ9Im9wdGlvbmFsIixBKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm8sdm9pZCAwXSk6dm9pZCAwfSksQShlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtxZShvLnNvdXJjZSl9KT8kYCk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYobi52YWx1ZT09PXZvaWQgMCl7aWYodC5pbm5lclR5cGUuX3pvZC5vcHRpbiE9PSJkZWZhdWx0ZWQiKXJldHVybiBuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pm51KG4scykpOm51KG4scil9cmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9fSksd3A9cCgiJFpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57YWkuaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEEoZSwicGF0dGVybiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybiksZS5fem9kLnBhcnNlPShuLG8pPT50LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksJHA9cCgiJFpvZE51bGxhYmxlIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxBKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke3FlKG8uc291cmNlKX18bnVsbCkkYCk6dm9pZCAwfSksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcz9uZXcgU2V0KFsuLi5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsbnVsbF0pOnZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5uLnZhbHVlPT09bnVsbD9uOnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxTcD1wKCIkWm9kRGVmYXVsdCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2lmKG4udmFsdWU9PT12b2lkIDApcmV0dXJuIG4udmFsdWU9dC5kZWZhdWx0VmFsdWUsbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5vdShzLHQpKTpvdShyLHQpfX0pO2Z1bmN0aW9uIG91KGUsdCl7cmV0dXJuIGUudmFsdWU9PT12b2lkIDAmJihlLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSxlfWNvbnN0IHpwPXAoIiRab2RQcmVmYXVsdCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT4oby5kaXJlY3Rpb249PT0iYmFja3dhcmQifHxuLnZhbHVlPT09dm9pZCAwJiYobi52YWx1ZT10LmRlZmF1bHRWYWx1ZSksdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKSl9KSxUcD1wKCIkWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vXS5maWx0ZXIocj0+ciE9PXZvaWQgMCkpOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnJ1KHMsZSkpOnJ1KHIsZSl9fSk7ZnVuY3Rpb24gcnUoZSx0KXtyZXR1cm4hZS5pc3N1ZXMubGVuZ3RoJiZlLnZhbHVlPT09dm9pZCAwJiZlLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6ZS52YWx1ZSxpbnN0OnR9KSxlfWNvbnN0IElwPXAoIiRab2RTdWNjZXNzIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgRG8oIlpvZFN1Y2Nlc3MiKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLmlzc3Vlcy5sZW5ndGg9PT0wLG4pKToobi52YWx1ZT1yLmlzc3Vlcy5sZW5ndGg9PT0wLG4pfX0pO2Z1bmN0aW9uIHN1KGUsdCxuLG8pe3JldHVybiB0Lmlzc3Vlcy5sZW5ndGg/KGUudmFsdWU9bi5jYXRjaFZhbHVlKHsuLi50LHZhbHVlOmUudmFsdWUsZXJyb3I6e2lzc3Vlczp0Lmlzc3Vlcy5tYXAocj0+JGUocixvLGVlKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBQcD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+c3UobixzLHQsbykpOnN1KG4scix0LG8pfX0pLHhwPXAoIiRab2ROYU4iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLGNpPXAoIiRab2RQaXBlIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+aW8oaSx0LmluLG8pKTppbyhzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5pbyhzLHQub3V0LG8pKTppbyhyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIGlvKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCB1aT1wKCIkWm9kQ29kZWMiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PmFvKGksdCxvKSk6YW8ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+YW8oaSx0LG8pKTphbyhzLHQsbyl9fX0pO2Z1bmN0aW9uIGFvKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+Y28oZSxzLHQub3V0LG4pKTpjbyhlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+Y28oZSxzLHQuaW4sbikpOmNvKGUscix0LmluLG4pfX1mdW5jdGlvbiBjbyhlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IENwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e2NpLmluaXQoZSx0KX0pLEVwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKGl1KTppdShyKX19KTtmdW5jdGlvbiBpdShlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIHRnKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1hLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IGw9Yy5taW5pbXVtPz9jLmxlbmd0aCxkPWMubWF4aW11bT8/Yy5sZW5ndGg7bCE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fGw+cikmJihyPWwpLGQhPT12b2lkIDAmJihzPT09dm9pZCAwfHxkPHMpJiYocz1kKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIE5sKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1Wbz9NbDppKT8uc291cmNlfWZ1bmN0aW9uIGdzKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz1ncyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKHFlKHIpLCgpPT5xZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcChncyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PnFlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiB0ZyhlKX1jb25zdCBPcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPWdzKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKHFlKHIpKX1lbHNlIGlmKG89PT1udWxsfHxMdS5oYXModHlwZW9mIG8pKW4ucHVzaChPZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLEFwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9Pih4LmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9wcyhlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P3BzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBocyhlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IGhzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IGlpKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksUnA9cCgiJFpvZFByb21pc2UiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLGxpPXAoIiRab2RMYXp5IiwoZSx0KT0+e3guaW5pdChlLHQpLFp1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEEoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEEoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxBKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLFpwPXAoIiRab2RDdXN0b20iLChlLHQpPT57Si5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PmF1KHMsbixvLGUpKTthdShyLG4sbyxlKX19KTtmdW5jdGlvbiBhdShlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChwdChyKSl9fWNsYXNzIE5wIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgYnM9In5tZW1vIixjdT1bXTtmdW5jdGlvbiBqcChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBzcyhlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgTXA9bmV3IFdlYWtNYXAsYXQ9MCxmbz0xLEx0PTI7ZnVuY3Rpb24gVXQoZSx0LG4pe2NvbnN0IG89TXAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/THQ6YXQ7aWYodC5oYXMoZSkpcmV0dXJuIEx0O3QuYWRkKGUpO2xldCByPWF0O2NvbnN0IHM9ZD0+e2lmKHIhPT1MdCYmZD8uX3pvZCl7Y29uc3QgbT1VdChkLHQsbik7bT5yJiYocj1tKX19LGk9KGQsbSk9PntsZXQgYj1hdDtmb3IoY29uc3QgdiBvZiBSZWZsZWN0Lm93bktleXMoZCkpe2NvbnN0IF89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLHYpO2lmKCFfLmVudW1lcmFibGUpY29udGludWU7Y29uc3Qgaz1fLmdldD9mbzpfLnZhbHVlPy5fem9kP1V0KF8udmFsdWUsdCxuKTphdDtrPmImJihiPWspfXJldHVybiBifSxhPWQ9PntkPnImJihyPWQpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBkPUFvKGMpO2EoZD9pKGQpOmZvKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgZCBvZiBjLml0ZW1zKXMoZCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgZCBvZiBjLm9wdGlvbnMpcyhkKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgZD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EoZD9VdChkLHQsITEpOmZvKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgZCBpbiBjKXtjb25zdCBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxkKTtpZighbXx8bS5nZXQpY29udGludWU7Y29uc3QgYj1tLnZhbHVlO2lmKCEoIWJ8fHR5cGVvZiBiIT0ib2JqZWN0Iikpe2lmKGIuX3pvZClzKGIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShiKSlmb3IoY29uc3QgdiBvZiBiKXModil9fX1yZXR1cm4gdC5kZWxldGUoZSksbmcoZSxyKX1mdW5jdGlvbiBuZyhlLHQpe3JldHVybiB0IT09Zm8mJk1wLnNldChlLHQ9PT1MdCksdH1mdW5jdGlvbiBvZyhlKXtyZXR1cm4gVXQoZSxuZXcgU2V0LCEwKSE9PWF0fWZ1bmN0aW9uIHJnKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCB1bztjb25zdCBsbz1bXSxzZz17YWxsb2MoZSx0LG4pe2NvbnN0IG89dW87aWYoIW8pcmV0dXJuIG47dW89dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLGxvLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmcXAocyxyLnZhbHVlKSl0aHJvdyBuZXcgTnA7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShjLGwpPT57aWYobj09PXZvaWQgMCl7Y29uc3QgWj1VdChlLG5ldyBTZXQsITEpO2lmKFo9PT1hdClyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkoYyxsKTtaPT09THR8fG8/bj0hMDpvPSEwfWNvbnN0IGQ9Yy52YWx1ZTtpZighanAoZCkpcmV0dXJuIGkoYyxsKTtsZXQgbT1sW2JzXTttfHwobT17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSxsW2JzXT1tKTtsZXQgYjtyPT09bD9iPXM6KGI9cmcobSxlKSxyPWwscz1iKTtjb25zdCB2PWIuZ2V0KGQpO2lmKHYpcmV0dXJuIGMudmFsdWU9di52YWx1ZSx2Lmlzc3Vlcz92Lmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uc3Modi5pc3N1ZXMpKTooYy5tZW1vPSEwLG0uYmFja0VkZ2VzPz8obS5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLG0uYmFja0VkZ2VzLmFkZCh2LnZhbHVlKSksYzt1bz1iO2NvbnN0IF89bG8ubGVuZ3RoLGs9aShjLGwpO3VvPXZvaWQgMDtjb25zdCAkPWxvLmxlbmd0aD5fP2xvLnBvcCgpOnZvaWQgMDtyZXR1cm4gayBpbnN0YW5jZW9mIFByb21pc2U/ay50aGVuKFo9PigkJiYoJC5pc3N1ZXM9Wi5pc3N1ZXMubGVuZ3RoP3NzKFouaXNzdWVzKTpjdSksWikpOigkJiYoJC5pc3N1ZXM9ay5pc3N1ZXMubGVuZ3RoP3NzKGsuaXNzdWVzKTpjdSksayl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gV28oKXtyZXR1cm4gc2d9ZnVuY3Rpb24gcXAoZSx0KXtjb25zdCBuPWVbYnNdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJmpwKHQpJiZuLmhhcyh0KX1jb25zdCBpZz0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9WHUocy5pbnB1dCksYz1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7UHMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHt1cyhzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHt1cyhzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIERwKCl7cmV0dXJue2xvY2FsZUVycm9yOmlnKCl9fWNvbnN0IGRpPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpEcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgdXU7Y29uc3QgcGk9U3ltYm9sKCJab2RPdXRwdXQiKSxoaT1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgTHB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gR28oKXtyZXR1cm4gbmV3IExwfSh1dT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KHV1Ll9fem9kX2dsb2JhbFJlZ2lzdHJ5PUdvKCkpO2NvbnN0IGtlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksZmk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIG1pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIGdpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIGJpIGV4dGVuZHMgRXJyb3J7fWNvbnN0IHZpPWZpLHlpPWZpLGFnPWZpO2Z1bmN0aW9uIFFvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gVXAoZSx0KXtyZXR1cm4gbmV3IGUoUW8oe3R5cGU6InN0cmluZyIsLi4ueSh0KX0pKX1mdW5jdGlvbiBGcChlLHQpe3JldHVybiBuZXcgZShRbyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4ueSh0KX0pKX1mdW5jdGlvbiBfaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGtpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB3aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gJGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLnkodCl9KX1mdW5jdGlvbiBTaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4ueSh0KX0pfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi55KHQpfSl9ZnVuY3Rpb24gWW8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gVGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBJaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBQaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBDaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gRWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBBaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE5pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBCcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFZwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBEaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1jb25zdCBMaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gVWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gRmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBCaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEpwKGUsdCl7cmV0dXJuIG5ldyBlKFFvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIEtwKGUsdCl7cmV0dXJuIG5ldyBlKFFvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBXcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24gR3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIFFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBZcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gdGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gbmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIG9oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gcmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBzaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi55KHQpfSl9ZnVuY3Rpb24gYWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi55KHQpfSl9ZnVuY3Rpb24gdWgoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gbGgoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIGRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4ueSh0KX0pfWZ1bmN0aW9uIHBoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi55KHQpfSl9ZnVuY3Rpb24gaGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLnkodCl9KX1mdW5jdGlvbiBmaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBtaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gUmUoZSx0KXtyZXR1cm4gbmV3IEtzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gZ2UoZSx0KXtyZXR1cm4gbmV3IEtzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gWmUoZSx0KXtyZXR1cm4gbmV3IFdzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gYmUoZSx0KXtyZXR1cm4gbmV3IFdzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gWG8oZSl7cmV0dXJuIFplKDAsZSl9ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIFJlKDAsZSl9ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIGdlKDAsZSl9ZnVuY3Rpb24gbnIoZSl7cmV0dXJuIGJlKDAsZSl9ZnVuY3Rpb24gWWUoZSx0KXtyZXR1cm4gbmV3IEJsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLnkodCksdmFsdWU6ZX0pfWZ1bmN0aW9uIG90KGUsdCl7cmV0dXJuIG5ldyBLbCh7Y2hlY2s6Im1heF9zaXplIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIE5lKGUsdCl7cmV0dXJuIG5ldyBXbCh7Y2hlY2s6Im1pbl9zaXplIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIHl0KGUsdCl7cmV0dXJuIG5ldyBHbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi55KHQpLHNpemU6ZX0pfWZ1bmN0aW9uIF90KGUsdCl7cmV0dXJuIG5ldyBRbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gVWUoZSx0KXtyZXR1cm4gbmV3IFlsKHtjaGVjazoibWluX2xlbmd0aCIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBrdChlLHQpe3JldHVybiBuZXcgWGwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi55KHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gbG4oZSx0KXtyZXR1cm4gbmV3IGVkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4ueSh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBkbihlKXtyZXR1cm4gbmV3IHRkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBwbihlKXtyZXR1cm4gbmV3IG5kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBobihlLHQpe3JldHVybiBuZXcgb2Qoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi55KHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBmbihlLHQpe3JldHVybiBuZXcgcmQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi55KHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gbW4oZSx0KXtyZXR1cm4gbmV3IHNkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLnkodCksc3VmZml4OmV9KX1mdW5jdGlvbiBvcihlLHQsbil7cmV0dXJuIG5ldyBpZCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLnkobil9KX1mdW5jdGlvbiBnbihlLHQpe3JldHVybiBuZXcgYWQoe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLnkodCl9KX1mdW5jdGlvbiBibihlLHQpe3JldHVybiBuZXcgY2Qoe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIG5ldyB1ZCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIHZuKGUpe3JldHVybiBDZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24geW4oKXtyZXR1cm4gQ2UoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIF9uKCl7cmV0dXJuIENlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24ga24oKXtyZXR1cm4gQ2UoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiB3bigpe3JldHVybiBDZShlPT5xdShlKSl9ZnVuY3Rpb24gZ2goZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi55KG4pfSl9ZnVuY3Rpb24gY2coZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gdWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4ueShuKX0pfWZ1bmN0aW9uIGxnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4ueShvKX0pfWZ1bmN0aW9uIGRnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBwZyhlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiB4LHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi55KHMpfSl9ZnVuY3Rpb24gaGcoZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gZmcoZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gbWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gZ2coZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLnkobil9KX1mdW5jdGlvbiBiZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHZnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLnkobil9KX1mdW5jdGlvbiBiaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIHlnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGtnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiB3ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTpSbyhuKX19KX1mdW5jdGlvbiAkZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFNnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHpnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246eHMobil9KX1mdW5jdGlvbiBUZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gSWcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFBnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHhnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIENnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHZoKGUsdCxuKXtjb25zdCBvPXkobik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiB5aChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ueShuKX0pfWZ1bmN0aW9uIF9oKGUsdCl7Y29uc3Qgbj1raChvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2gocHQocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKHB0KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24ga2goZSx0KXtjb25zdCBuPW5ldyBKKHtjaGVjazoiY3VzdG9tIiwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gd2goZSl7Y29uc3QgdD1uZXcgSih7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWtlLmdldChuKT8/e307a2UuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uICRoKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWtlLmdldChuKT8/e307a2UuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIFNoKGUsdCl7Y29uc3Qgbj15KHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcCh2PT50eXBlb2Ygdj09InN0cmluZyI/di50b0xvd2VyQ2FzZSgpOnYpLHI9ci5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P3VpLGM9ZS5Cb29sZWFuPz9vaSxsPWUuU3RyaW5nPz91bixkPW5ldyBsKHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxtPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksYj1uZXcgYSh7dHlwZToicGlwZSIsaW46ZCxvdXQ6bSx0cmFuc2Zvcm06KCh2LF8pPT57bGV0IGs9djtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJihrPWsudG9Mb3dlckNhc2UoKSkscy5oYXMoayk/ITA6aS5oYXMoayk/ITE6KF8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6Xy52YWx1ZSxpbnN0OmIsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigodixfKT0+dj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIGIuX3pvZC5iYWcudHJ1dGh5PW8sYi5fem9kLmJhZy5mYWxzeT1yLGIuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsYn1mdW5jdGlvbiB3dChlLHQsbixvPXt9KXtjb25zdCByPXkobykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgRWc9KCk9Pih7fSksT2c9KCk9Pih7fSksQWc9KCk9Pih7fSksUmc9KCk9Pih7fSksWmc9KCk9Pih7fSksemg9KCk9PigpPT4oe30pLHZzPSgpPT4oKT0+KHt9KSxOZz0oKT0+KHt9KSx3ZT0oKT0+KHt9KSxqZz0oKT0+KHt9KSxNZz0oKT0+KHt9KSxxZz0oKT0+KHt9KSxEZz0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxHZz0oKT0+KHt9KSxRZz0oKT0+KHt9KSxZZz0oKT0+KHt9KSxYZz0oKT0+KHt9KSxlYj0oKT0+KHt9KSx0Yj0oKT0+KHt9KSxuYj0oKT0+KHt9KSxvYj0oKT0+KHt9KSxyYj0oKT0+KHt9KSxzYj0oKT0+KHt9KSxpYj0oKT0+KHt9KSxhYj0oKT0+KHt9KSxUaD0oKT0+KHt9KSxjYj0oKT0+KHt9KSx1Yj0oKT0+KHt9KSxsYj0oKT0+KHt9KSxkYj0oKT0+KHt9KSxwYj0oKT0+KHt9KSxoYj0oKT0+KHt9KSxmYj0oKT0+KHt9KSxtYj0oKT0+KHt9KSxnYj0oKT0+KHt9KSxiYj0oKT0+KHt9KSx2Yj0oKT0+KHt9KSxJaD0oKT0+KHt9KSx5Yj0oKT0+KHt9KSxWaT0oKT0+KHt9KTtjbGFzcyBfYnt9Y29uc3Qga2I9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFBoPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OnRwLCRab2RBcnJheTppcCwkWm9kQXN5bmNFcnJvcjpEZSwkWm9kQmFzZTY0OnFkLCRab2RCYXNlNjRVUkw6TGQsJFpvZEJpZ0ludDpyaSwkWm9kQmlnSW50Rm9ybWF0OlFkLCRab2RCb29sZWFuOm9pLCRab2RDSURSdjQ6WmQsJFpvZENJRFJ2NjpqZCwkWm9kQ1VJRDokZCwkWm9kQ1VJRDI6U2QsJFpvZENhdGNoOlBwLCRab2RDaGVjazpKLCRab2RDaGVja0JpZ0ludEZvcm1hdDpKbCwkWm9kQ2hlY2tFbmRzV2l0aDpzZCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpXcywkWm9kQ2hlY2tJbmNsdWRlczpvZCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6WGwsJFpvZENoZWNrTGVzc1RoYW46S3MsJFpvZENoZWNrTG93ZXJDYXNlOnRkLCRab2RDaGVja01heExlbmd0aDpRbCwkWm9kQ2hlY2tNYXhTaXplOktsLCRab2RDaGVja01pbWVUeXBlOmNkLCRab2RDaGVja01pbkxlbmd0aDpZbCwkWm9kQ2hlY2tNaW5TaXplOldsLCRab2RDaGVja011bHRpcGxlT2Y6QmwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OlZsLCRab2RDaGVja092ZXJ3cml0ZTp1ZCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOmFkLCRab2RDaGVja1Byb3BlcnR5OmlkLCRab2RDaGVja1JlZ2V4OmVkLCRab2RDaGVja1NpemVFcXVhbHM6R2wsJFpvZENoZWNrU3RhcnRzV2l0aDpyZCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6Y24sJFpvZENoZWNrVXBwZXJDYXNlOm5kLCRab2RDb2RlYzp1aSwkWm9kQ3JlZGl0Q2FyZDpIZCwkWm9kQ3VzdG9tOlpwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6V2QsJFpvZEN5Y2xpY0Vycm9yOk5wLCRab2REYXRlOnNwLCRab2REZWZhdWx0OlNwLCRab2REaXNjcmltaW5hdGVkVW5pb246aHAsJFpvZEUxNjQ6VWQsJFpvZEVtYWlsOm1kLCRab2RFbW9qaTprZCwkWm9kRW5jb2RlRXJyb3I6RG8sJFpvZEVudW06dnAsJFpvZEVycm9yOmlsLCRab2RFeGFjdE9wdGlvbmFsOndwLCRab2RGaWxlOl9wLCRab2RGdW5jdGlvbjpBcCwkWm9kR1VJRDpoZCwkWm9kSUJBTjpWZCwkWm9kSVB2NDpPZCwkWm9kSVB2NjpBZCwkWm9kSVNPRGF0ZTp4ZCwkWm9kSVNPRGF0ZVRpbWU6UGQsJFpvZElTT0R1cmF0aW9uOkVkLCRab2RJU09UaW1lOkNkLCRab2RJbnRlcnNlY3Rpb246ZnAsJFpvZEpXVDpLZCwkWm9kS1NVSUQ6SWQsJFpvZExhenk6bGksJFpvZExpdGVyYWw6eXAsJFpvZE1BQzpSZCwkWm9kTWFwOmdwLCRab2ROYU46eHAsJFpvZE5hbm9JRDp3ZCwkWm9kTmV2ZXI6b3AsJFpvZE5vbk9wdGlvbmFsOlRwLCRab2ROdWxsOmVwLCRab2ROdWxsYWJsZTokcCwkWm9kTnVtYmVyOm5pLCRab2ROdW1iZXJGb3JtYXQ6R2QsJFpvZE9iamVjdDp1cCwkWm9kT2JqZWN0SklUOmxwLCRab2RPcHRpb25hbDphaSwkWm9kUGlwZTpjaSwkWm9kUHJlZmF1bHQ6enAsJFpvZFByZXByb2Nlc3M6Q3AsJFpvZFByb21pc2U6UnAsJFpvZFJlYWRvbmx5OkVwLCRab2RSZWFsRXJyb3I6dmUsJFpvZFJlY29yZDptcCwkWm9kUmVnaXN0cnk6THAsJFpvZFNldDpicCwkWm9kU3RyaW5nOnVuLCRab2RTdHJpbmdGb3JtYXQ6RiwkWm9kU3VjY2VzczpJcCwkWm9kU3ltYm9sOllkLCRab2RUZW1wbGF0ZUxpdGVyYWw6T3AsJFpvZFRyYW5zZm9ybTprcCwkWm9kVHVwbGU6aWksJFpvZFR5cGU6eCwkWm9kVUxJRDp6ZCwkWm9kVVJMOl9kLCRab2RVVUlEOmZkLCRab2RVbmRlZmluZWQ6WGQsJFpvZFVuaW9uOktvLCRab2RVbmtub3duOm5wLCRab2RWb2lkOnJwLCRab2RYSUQ6VGQsJFpvZFhvcjpkcCwkYnJhbmQ6T3MsJGNvbnN0cnVjdG9yOnAsJGlucHV0OmhpLCRvdXRwdXQ6cGksRG9jOmxkLElOVkFMSUQ6bWksSlNPTlNjaGVtYTprYixKU09OU2NoZW1hR2VuZXJhdG9yOl9iLE5FVkVSOkVzLFRpbWVQcmVjaXNpb246TGksVVJMX0JBRF9GT1JNQVQ6UXMsVVJMX1VOUEFSU0VBQkxFOkp0LFpvZENvbXBpbGVBc3luY0Vycm9yOmdpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOmJpLF9hbnk6dWgsX2FycmF5OmdoLF9iYXNlNjQ6amksX2Jhc2U2NHVybDpNaSxfYmlnaW50Om5oLF9ib29sZWFuOmVoLF9jYXRjaDp6ZyxfY2hlY2s6a2gsX2NpZHJ2NDpaaSxfY2lkcnY2Ok5pLF9jb2VyY2VkQmlnaW50Om9oLF9jb2VyY2VkQm9vbGVhbjp0aCxfY29lcmNlZERhdGU6ZmgsX2NvZXJjZWROdW1iZXI6S3AsX2NvZXJjZWRTdHJpbmc6RnAsX2NyZWRpdENhcmQ6QnAsX2N1aWQ6UGksX2N1aWQyOnhpLF9jdXN0b206dmgsX2RhdGU6aGgsX2RlY29kZTpOcyxfZGVjb2RlQXN5bmM6TXMsX2RlZmF1bHQ6d2csX2Rpc2NyaW1pbmF0ZWRVbmlvbjpsZyxfZTE2NDpxaSxfZW1haWw6X2ksX2Vtb2ppOlRpLF9lbmNvZGU6WnMsX2VuY29kZUFzeW5jOmpzLF9lbmRzV2l0aDptbixfZW51bTpnZyxfZmlsZTpiaCxfZmxvYXQzMjpHcCxfZmxvYXQ2NDpRcCxfZ3Q6WmUsX2d0ZTpiZSxfZ3VpZDpraSxfaWJhbjpWcCxfaW5jbHVkZXM6aG4sX2ludDpXcCxfaW50MzI6WXAsX2ludDY0OnJoLF9pbnRlcnNlY3Rpb246ZGcsX2lwdjQ6QWksX2lwdjY6UmksX2lzb0RhdGU6RmksX2lzb0RhdGVUaW1lOlVpLF9pc29EdXJhdGlvbjpCaSxfaXNvVGltZTpIaSxfand0OkRpLF9rc3VpZDpPaSxfbGF6eTp4ZyxfbGVuZ3RoOmt0LF9saXRlcmFsOnZnLF9sb3dlcmNhc2U6ZG4sX2x0OlJlLF9sdGU6Z2UsX21hYzpIcCxfbWFwOmZnLF9tYXg6Z2UsX21heExlbmd0aDpfdCxfbWF4U2l6ZTpvdCxfbWltZTpibixfbWluOmJlLF9taW5MZW5ndGg6VWUsX21pblNpemU6TmUsX211bHRpcGxlT2Y6WWUsX25hbjptaCxfbmFub2lkOklpLF9uYXRpdmVFbnVtOmJnLF9uZWdhdGl2ZTplcixfbmV2ZXI6ZGgsX25vbm5lZ2F0aXZlOm5yLF9ub25vcHRpb25hbDokZyxfbm9ucG9zaXRpdmU6dHIsX25vcm1hbGl6ZTp2bixfbnVsbDpjaCxfbnVsbGFibGU6a2csX251bWJlcjpKcCxfb3B0aW9uYWw6X2csX292ZXJ3cml0ZTpDZSxfcGFyc2U6dG4sX3BhcnNlQXN5bmM6bm4sX3BpcGU6VGcsX3Bvc2l0aXZlOlhvLF9wcm9taXNlOkNnLF9wcm9wZXJ0aWVzOmduLF9wcm9wZXJ0eTpvcixfcmVhZG9ubHk6SWcsX3JlY29yZDpoZyxfcmVmaW5lOnloLF9yZWdleDpsbixfc2FmZURlY29kZTpEcyxfc2FmZURlY29kZUFzeW5jOlVzLF9zYWZlRW5jb2RlOnFzLF9zYWZlRW5jb2RlQXN5bmM6THMsX3NhZmVQYXJzZTpvbixfc2FmZVBhcnNlQXN5bmM6cm4sX3NldDptZyxfc2l6ZTp5dCxfc2x1Z2lmeTp3bixfc3RhcnRzV2l0aDpmbixfc3RyaW5nOlVwLF9zdHJpbmdGb3JtYXQ6d3QsX3N0cmluZ2Jvb2w6U2gsX3N1Y2Nlc3M6U2csX3N1cGVyUmVmaW5lOl9oLF9zeW1ib2w6aWgsX3RlbXBsYXRlTGl0ZXJhbDpQZyxfdG9Mb3dlckNhc2U6X24sX3RvVXBwZXJDYXNlOmtuLF90cmFuc2Zvcm06eWcsX3RyaW06eW4sX3R1cGxlOnBnLF91aW50MzI6WHAsX3VpbnQ2NDpzaCxfdWxpZDpDaSxfdW5kZWZpbmVkOmFoLF91bmlvbjpjZyxfdW5rbm93bjpsaCxfdXBwZXJjYXNlOnBuLF91cmw6WW8sX3V1aWQ6d2ksX3V1aWR2NDokaSxfdXVpZHY2OlNpLF91dWlkdjc6emksX3ZvaWQ6cGgsX3hpZDpFaSxfeG9yOnVnLGJhc2U2NENoYXJzZXQ6TWQsYmFzZTY0dXJsQ2hhcnNldDp0aSxjYW5QYXJzZVVSTDpZcyxjbG9uZTpHLGNvbXBpbGU6dmksY29tcGlsZUZuOmFnLGNvbmZpZzplZSxjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Q6dnMsY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kOnpoLGRlY29kZTpmbSxkZWNvZGVBc3luYzpnbSxkZXNjcmliZTp3aCxlbmNvZGU6aG0sZW5jb2RlQXN5bmM6bW0sZXh0cmFjdERlZnM6UmcsZmluYWxpemU6WmcsZmxhdHRlbkVycm9yOkxvLGZvcm1hdEVycm9yOlVvLGdldERpc2NyaW1pbmF0ZWRPcHRpb246c2ksZ2xvYmFsQ29uZmlnOmRlLGdsb2JhbFJlZ2lzdHJ5OmtlLGhhbmRsZVVucmVwcmVzZW50YWJsZTpPZyxpbml0aWFsaXplQ29udGV4dDpFZyxpc0JhY2tFZGdlOnFwLGlzUmVjdXJzaXZlU2NoZW1hOm9nLGlzVmFsaWRCYXNlNjQ6ZWksaXNWYWxpZEJhc2U2NFVSTDpEZCxpc1ZhbGlkQ0lEUnY2Ok5kLGlzVmFsaWRDcmVkaXRDYXJkOkZkLGlzVmFsaWRJQkFOOkJkLGlzVmFsaWRJUHY2OlhzLGlzVmFsaWRKV1Q6SmQsbG9jYWxlczpkaSxtZW1vaXplcjpXbyxtZXJnZVZhbHVlczokbyxtZXRhOiRoLHBhcnNlOnBzLHBhcnNlQXN5bmM6aHMscGFyc2VVUkxPYmplY3Q6YmQscHJldHRpZnlFcnJvcjpScyxwcm9jZXNzOk5nLHByb2Nlc3NTY2hlbWE6QWcscmVnZXhlczpKbyxyZWdpc3RyeTpHbyxzYWZlRGVjb2RlOnZtLHNhZmVEZWNvZGVBc3luYzpfbSxzYWZlRW5jb2RlOmJtLHNhZmVFbmNvZGVBc3luYzp5bSxzYWZlUGFyc2U6Y2wsc2FmZVBhcnNlQXN5bmM6dW0sc3RhbmRhcmRQcm9wczpHcyxzdHJpcFRhYkFuZE5ld2xpbmU6bXMsdG9Eb3RQYXRoOmFsLHRvSlNPTlNjaGVtYTpWaSx0b1pvZDpPbyx0cmVlaWZ5RXJyb3I6QXMsdXJsSG9zdG5hbWVPazp2ZCx1cmxQcm90b2NvbE9rOnlkLHV0aWw6Q3MsdmFsaWRhdGU6SG8sdmFsaWRhdGVBc3luYzpCbyx2YWxpZGF0ZVVSTDpnZCx2ZXJzaW9uOmRkLHdpdGhQYXJzZXI6eWl9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksbHU9U3ltYm9sKCJ6LnZpc2l0L3Jlc29sdmluZyIpO2Z1bmN0aW9uIEppKGUsdCl7Y29uc3Qgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OihpLGEpPT57Y29uc3QgYz10W2kuX3pvZC5kZWYudHlwZV07cmV0dXJuIGM/YyhpLGEpOml9LG89bmV3IE1hcDtmdW5jdGlvbiByKGkpe2NvbnN0IGE9by5nZXQoaSk7aWYoYT09PWx1KXJldHVybiBuZXcgbGkoe3R5cGU6ImxhenkiLGdldHRlcjooKT0+by5nZXQoaSl9KTtpZihhIT09dm9pZCAwKXJldHVybiBhO28uc2V0KGksbHUpO2NvbnN0IGM9cyhpKSxsPW4oYyxjIT09aSk7cmV0dXJuIG8uc2V0KGksbCksbH1mdW5jdGlvbiBzKGkpe2NvbnN0IGE9aS5fem9kLmRlZjtzd2l0Y2goYS50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9YS5zaGFwZSxkPU9iamVjdC5rZXlzKGwpO2xldCBtPSExO2NvbnN0IGI9e307Zm9yKGNvbnN0IF8gb2YgZCl7Y29uc3Qgaz1yKGxbX10pO2shPT1sW19dJiYobT0hMCksYltfXT1rfWxldCB2PWEuY2F0Y2hhbGw7cmV0dXJuIGEuY2F0Y2hhbGwmJih2PXIoYS5jYXRjaGFsbCksdiE9PWEuY2F0Y2hhbGwmJihtPSEwKSksbT9HKGksey4uLmEsc2hhcGU6YixjYXRjaGFsbDp2fSk6aX1jYXNlImFycmF5Ijp7Y29uc3QgbD1yKGEuZWxlbWVudCk7cmV0dXJuIGw9PT1hLmVsZW1lbnQ/aTpHKGksey4uLmEsZWxlbWVudDpsfSl9Y2FzZSJ0dXBsZSI6e2NvbnN0IGw9YS5pdGVtcztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCB2IG9mIGwpe2NvbnN0IF89cih2KTtfIT09diYmKGQ9ITApLG0ucHVzaChfKX1sZXQgYj1hLnJlc3Q7cmV0dXJuIGEucmVzdCYmKGI9cihhLnJlc3QpLGIhPT1hLnJlc3QmJihkPSEwKSksZD9HKGksey4uLmEsaXRlbXM6bSxyZXN0OmJ9KTppfWNhc2UicmVjb3JkIjpjYXNlIm1hcCI6e2NvbnN0IGw9cihhLmtleVR5cGUpLGQ9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLmtleVR5cGUmJmQ9PT1hLnZhbHVlVHlwZT9pOkcoaSx7Li4uYSxrZXlUeXBlOmwsdmFsdWVUeXBlOmR9KX1jYXNlInNldCI6e2NvbnN0IGw9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLnZhbHVlVHlwZT9pOkcoaSx7Li4uYSx2YWx1ZVR5cGU6bH0pfWNhc2UidW5pb24iOntjb25zdCBsPWEub3B0aW9ucztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCBiIG9mIGwpe2NvbnN0IHY9cihiKTt2IT09YiYmKGQ9ITApLG0ucHVzaCh2KX1yZXR1cm4gZD9HKGksey4uLmEsb3B0aW9uczptfSk6aX1jYXNlImludGVyc2VjdGlvbiI6e2NvbnN0IGw9cihhLmxlZnQpLGQ9cihhLnJpZ2h0KTtyZXR1cm4gbD09PWEubGVmdCYmZD09PWEucmlnaHQ/aTpHKGksey4uLmEsbGVmdDpsLHJpZ2h0OmR9KX1jYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjp7Y29uc3QgbD1yKGEuaW5uZXJUeXBlKTtyZXR1cm4gbD09PWEuaW5uZXJUeXBlP2k6RyhpLHsuLi5hLGlubmVyVHlwZTpsfSl9Y2FzZSJwaXBlIjp7Y29uc3QgbD1yKGEuaW4pLGQ9cihhLm91dCk7cmV0dXJuIGw9PT1hLmluJiZkPT09YS5vdXQ/aTpHKGksey4uLmEsaW46bCxvdXQ6ZH0pfWNhc2UiZnVuY3Rpb24iOntjb25zdCBsPXIoYS5pbnB1dCksZD1yKGEub3V0cHV0KTtyZXR1cm4gbD09PWEuaW5wdXQmJmQ9PT1hLm91dHB1dD9pOkcoaSx7Li4uYSxpbnB1dDpsLG91dHB1dDpkfSl9Y2FzZSJsYXp5Ijp7Y29uc3QgbD1hLmdldHRlcix7X2NhY2hlZElubmVyOmQsLi4ubX09YTtyZXR1cm4gRyhpLHsuLi5tLGdldHRlcjooKT0+cihsKCkpfSl9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOnJldHVybiBpO2RlZmF1bHQ6cmV0dXJuIGl9fXJldHVybiByKGUpfWZ1bmN0aW9uIEtpKGUpe3JldHVybiEhZS5fem9kfWZ1bmN0aW9uIHhoKGUsdCl7cmV0dXJuIEtpKGUpP2NsKGUsdCk6ZS5zYWZlUGFyc2UodCl9ZnVuY3Rpb24gd2IoZSl7aWYoIWUpcmV0dXJuO2xldCB0O2lmKEtpKGUpP3Q9ZS5fem9kPy5kZWY/LnNoYXBlOnQ9ZS5zaGFwZSwhIXQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXRyeXtyZXR1cm4gdCgpfWNhdGNoe3JldHVybn1yZXR1cm4gdH19ZnVuY3Rpb24gJGIoZSl7aWYoS2koZSkpe2NvbnN0IHM9ZS5fem9kPy5kZWY7aWYocyl7aWYocy52YWx1ZSE9PXZvaWQgMClyZXR1cm4gcy52YWx1ZTtpZihBcnJheS5pc0FycmF5KHMudmFsdWVzKSYmcy52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIHMudmFsdWVzWzBdfX1jb25zdCBuPWUuX2RlZjtpZihuKXtpZihuLnZhbHVlIT09dm9pZCAwKXJldHVybiBuLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkobi52YWx1ZXMpJiZuLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gbi52YWx1ZXNbMF19Y29uc3Qgbz1lLnZhbHVlO2lmKG8hPT12b2lkIDApcmV0dXJuIG99Y29uc3QgU2I9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuZHNXaXRoOm1uLGd0OlplLGd0ZTpiZSxpbmNsdWRlczpobixsZW5ndGg6a3QsbG93ZXJjYXNlOmRuLGx0OlJlLGx0ZTpnZSxtYXhMZW5ndGg6X3QsbWF4U2l6ZTpvdCxtaW1lOmJuLG1pbkxlbmd0aDpVZSxtaW5TaXplOk5lLG11bHRpcGxlT2Y6WWUsbmVnYXRpdmU6ZXIsbm9ubmVnYXRpdmU6bnIsbm9ucG9zaXRpdmU6dHIsbm9ybWFsaXplOnZuLG92ZXJ3cml0ZTpDZSxwb3NpdGl2ZTpYbyxwcm9wZXJ0aWVzOmduLHByb3BlcnR5Om9yLHJlZ2V4OmxuLHNpemU6eXQsc2x1Z2lmeTp3bixzdGFydHNXaXRoOmZuLHRvTG93ZXJDYXNlOl9uLHRvVXBwZXJDYXNlOmtuLHRyaW06eW4sdXBwZXJjYXNlOnBufSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGR1PW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pO2Z1bmN0aW9uIHBvKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPW4odGhpcyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSl9Y29uc3QgQ2g9KGUsdCk9PntpbC5pbml0KGUsdCksZS5uYW1lPSJab2RFcnJvciI7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZHUuaGFzKG4pfHwoZHUuYWRkKG4pLHBvKG4sImZvcm1hdCIsbz0+cj0+VW8obyxyKSkscG8obiwiZmxhdHRlbiIsbz0+cj0+TG8obyxyKSkscG8obiwiYWRkSXNzdWUiLG89PnI9PntvLmlzc3Vlcy5wdXNoKHIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3Vlcyx2bywyKX0pLHBvKG4sImFkZElzc3VlcyIsbz0+cj0+e28uaXNzdWVzLnB1c2goLi4uciksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLHZvLDIpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImlzRW1wdHkiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH19KSl9LEVoPXAoIlpvZEVycm9yIixDaCksZmU9cCgiWm9kRXJyb3IiLENoLHZvaWQgMCx7UGFyZW50OkVycm9yfSksV2k9dG4oZmUpLEdpPW5uKGZlKSxRaT1vbihmZSksWWk9cm4oZmUpLFhpPVpzKGZlKSxlYT1OcyhmZSksdGE9anMoZmUpLG5hPU1zKGZlKSxvYT1xcyhmZSkscmE9RHMoZmUpLHNhPUxzKGZlKSxpYT1VcyhmZSk7ZnVuY3Rpb24gemIoKXtkZS5sb2NhbGVFcnJvcnx8ZWUoRHAoKSl9ZnVuY3Rpb24gcnQoKXtkZS5tZW1vaXplcnx8ZWUoe21lbW9pemVyOldvKCl9KX1jb25zdCBFPXAoIlpvZFR5cGUiLChlLHQpPT4oemIoKSx4LmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUodWUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEcodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKEJyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKFZyKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soQ2UoZSkpfSxvcHRpb25hbCgpe3JldHVybiBCKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIHpyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBtdCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBCKG10KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIEVyKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIFAodGhpcyl9LG9yKGUpe3JldHVybiBPKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiBSdCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIFd0KHRoaXMsVm4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBQcih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gQ3IodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIFJyKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIFd0KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIE1yKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4ga2UuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4ga2UuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBrZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIHFvKHRoaXMsIn5zdGFuZGFyZCIsey4uLkdzKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OnZzKCksb3V0cHV0OnZzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe0FlKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gV2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBHaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIFFpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gWWkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe0FlKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIEhvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBCbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIFhpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBlYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCB0YSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBuYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBvYSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gcmEodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gc2EodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gaWEodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIHpoKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBrZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLCRuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57dW4uaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpfSxlbih7Zm9ybWF0OmU9PndlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT53ZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PndlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGxuKC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soaG4oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGZuKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sobW4oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soVWUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soX3QoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soa3QoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhVZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGRuKGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKHBuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKHluKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sodm4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKF9uKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKGtuKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2sod24oKSl9fSkpLCR0PXAoIlpvZFN0cmluZyIsKGUsdCk9Pnt1bi5pbml0KGUsdCksJG4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soX2koU24sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soWW8oUHQsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soRGkoRG4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhUaShUbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soa2koem4sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHdpKEllLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKCRpKEllLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFNpKEllLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKHppKEllLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKElpKEluLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhQaShQbixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKHhpKHhuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhDaShDbixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhqaShqbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShNbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhFaShFbixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKE9pKE9uLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhBaShBbixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmkoUm4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soWmkoWm4sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soTmkoTm4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHFpKHFuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soVWkoU3QsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEZpKHp0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhIaShUdCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKEJpKEl0LGUpKX19KTtmdW5jdGlvbiBoKGUpe3JldHVybiBVcCgkdCxlKX1jb25zdCBMPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntGLmluaXQoZSx0KSwkbi5pbml0KGUsdCl9KSxTdD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PntQZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KSx6dD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLFR0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57Q2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksSXQ9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57RWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksU249cCgiWm9kRW1haWwiLChlLHQpPT57bWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIF9pKFNuLGUpfWNvbnN0IHpuPXAoIlpvZEdVSUQiLChlLHQpPT57aGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gY2EoZSl7cmV0dXJuIGtpKHpuLGUpfWNvbnN0IEllPXAoIlpvZFVVSUQiLChlLHQpPT57ZmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIHdpKEllLGUpfWZ1bmN0aW9uIGxhKGUpe3JldHVybiAkaShJZSxlKX1mdW5jdGlvbiBkYShlKXtyZXR1cm4gU2koSWUsZSl9ZnVuY3Rpb24gcGEoZSl7cmV0dXJuIHppKEllLGUpfWNvbnN0IFB0PXAoIlpvZFVSTCIsKGUsdCk9PntfZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBoYShlKXtyZXR1cm4gWW8oUHQsZSl9ZnVuY3Rpb24gZmEoZSl7cmV0dXJuIFlvKFB0LHtwcm90b2NvbDpGcyxob3N0bmFtZTpQbCwuLi55KGUpfSl9Y29uc3QgVG49cCgiWm9kRW1vamkiLChlLHQpPT57a2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gbWEoZSl7cmV0dXJuIFRpKFRuLGUpfWNvbnN0IEluPXAoIlpvZE5hbm9JRCIsKGUsdCk9Pnt3ZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBnYShlKXtyZXR1cm4gSWkoSW4sZSl9Y29uc3QgUG49cCgiWm9kQ1VJRCIsKGUsdCk9PnskZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBiYShlKXtyZXR1cm4gUGkoUG4sZSl9Y29uc3QgeG49cCgiWm9kQ1VJRDIiLChlLHQpPT57U2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdmEoZSl7cmV0dXJuIHhpKHhuLGUpfWNvbnN0IENuPXAoIlpvZFVMSUQiLChlLHQpPT57emQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24geWEoZSl7cmV0dXJuIENpKENuLGUpfWNvbnN0IEVuPXAoIlpvZFhJRCIsKGUsdCk9PntUZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBfYShlKXtyZXR1cm4gRWkoRW4sZSl9Y29uc3QgT249cCgiWm9kS1NVSUQiLChlLHQpPT57SWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24ga2EoZSl7cmV0dXJuIE9pKE9uLGUpfWNvbnN0IEFuPXAoIlpvZElQdjQiLChlLHQpPT57T2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIEFpKEFuLGUpfWNvbnN0IHJyPXAoIlpvZE1BQyIsKGUsdCk9PntSZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiAkYShlKXtyZXR1cm4gSHAocnIsZSl9Y29uc3QgUm49cCgiWm9kSVB2NiIsKGUsdCk9PntBZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBTYShlKXtyZXR1cm4gUmkoUm4sZSl9Y29uc3QgWm49cCgiWm9kQ0lEUnY0IiwoZSx0KT0+e1pkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHphKGUpe3JldHVybiBaaShabixlKX1jb25zdCBObj1wKCJab2RDSURSdjYiLChlLHQpPT57amQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIE5pKE5uLGUpfWNvbnN0IGpuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntxZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBJYShlKXtyZXR1cm4gamkoam4sZSl9Y29uc3QgTW49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e0xkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBNaShNbixlKX1jb25zdCBxbj1wKCJab2RFMTY0IiwoZSx0KT0+e1VkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBxaShxbixlKX1jb25zdCBzcj1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e0hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBCcChzcixlKX1jb25zdCBpcj1wKCJab2RJQkFOIiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBWcChpcixlKX1jb25zdCBEbj1wKCJab2RKV1QiLChlLHQpPT57S2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gT2EoZSl7cmV0dXJuIERpKERuLGUpfWNvbnN0IEhlPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntXZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBBYShlLHQsbj17fSl7cmV0dXJuIHd0KEhlLGUsdCxuKX1mdW5jdGlvbiBSYShlKXtyZXR1cm4gd3QoSGUsImhvc3RuYW1lIixJbCxlKX1mdW5jdGlvbiBaYShlKXtyZXR1cm4gd3QoSGUsImhleCIsSGwsZSl9ZnVuY3Rpb24gTmEoZSl7cmV0dXJuIHd0KEhlLCJjdXJyZW5jeV9jb2RlIixDbCxlKX1mdW5jdGlvbiBqYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9Sm9bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gd3QoSGUsbyxyLHQpfWNvbnN0IHh0PXAoIlpvZE51bWJlciIsKGUsdCk9PntuaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk1nKCksZS5pc0Zpbml0ZT0hMH0sZW4oe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT13ZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PXdlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PXdlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+d2UoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFplKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUmUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGdlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhnZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKEt0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhLdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKFplKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGdlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWWUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhZZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIEpwKHh0LGUpfWNvbnN0IEJlPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntHZC5pbml0KGUsdCkseHQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIFdwKEJlLGUpfWZ1bmN0aW9uIE1hKGUpe3JldHVybiBHcChCZSxlKX1mdW5jdGlvbiBxYShlKXtyZXR1cm4gUXAoQmUsZSl9ZnVuY3Rpb24gRGEoZSl7cmV0dXJuIFlwKEJlLGUpfWZ1bmN0aW9uIExhKGUpe3JldHVybiBYcChCZSxlKX1jb25zdCBDdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e29pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cWcoKX0pO2Z1bmN0aW9uIEQoZSl7cmV0dXJuIGVoKEN0LGUpfWNvbnN0IEV0PXAoIlpvZEJpZ0ludCIsKGUsdCk9PntyaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkRnKCl9LGVuKHttaW5WYWx1ZTplPT53ZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+d2UoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT53ZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhaZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhSZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZ2UoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGdlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhaZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhSZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhnZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWWUoZSx0KSl9fSkpO2Z1bmN0aW9uIFVhKGUpe3JldHVybiBuaChFdCxlKX1jb25zdCBMbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57UWQuaW5pdChlLHQpLEV0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEZhKGUpe3JldHVybiByaChMbixlKX1mdW5jdGlvbiBIYShlKXtyZXR1cm4gc2goTG4sZSl9Y29uc3QgYXI9cCgiWm9kU3ltYm9sIiwoZSx0KT0+e1lkLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TGcoKX0pO2Z1bmN0aW9uIEJhKGUpe3JldHVybiBpaChhcixlKX1jb25zdCBjcj1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57WGQuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5GZygpfSk7ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGFoKGNyLGUpfWNvbnN0IHVyPXAoIlpvZE51bGwiLChlLHQpPT57ZXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5VZygpfSk7ZnVuY3Rpb24gVW4oZSl7cmV0dXJuIGNoKHVyLGUpfWNvbnN0IGxyPXAoIlpvZEFueSIsKGUsdCk9Pnt0cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlZnKCl9KTtmdW5jdGlvbiBGbigpe3JldHVybiB1aChscil9Y29uc3QgZHI9cCgiWm9kVW5rbm93biIsKGUsdCk9PntucC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkpnKCl9KTtmdW5jdGlvbiBNKCl7cmV0dXJuIGxoKGRyKX1jb25zdCBwcj1wKCJab2ROZXZlciIsKGUsdCk9PntvcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkJnKCl9KTtmdW5jdGlvbiBYZShlKXtyZXR1cm4gZGgocHIsZSl9Y29uc3QgaHI9cCgiWm9kVm9pZCIsKGUsdCk9PntycC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkhnKCl9KTtmdW5jdGlvbiBWYShlKXtyZXR1cm4gcGgoaHIsZSl9Y29uc3QgSG49cCgiWm9kRGF0ZSIsKGUsdCk9PntzcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PktnKCksZS5taW49KG4sbyk9PmUuY2hlY2soYmUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2soZ2UobixvKSl9LGVuKHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PXdlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT13ZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIEphKGUpe3JldHVybiBoaChIbixlKX1jb25zdCBmcj1wKCJab2RBcnJheSIsKGUsdCk9PntydCgpLGlwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+aWIoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soVWUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKFVlKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhfdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soa3QoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24gUChlLHQpe3JldHVybiBnaChmcixlLHQpfWZ1bmN0aW9uIEthKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gcmUoT2JqZWN0LmtleXModCkpfWNvbnN0IE90PXAoIlpvZE9iamVjdCIsKGUsdCk9PntydCgpLGxwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YWIoKSxvbChlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiByZShPYmplY3Qua2V5cyh0aGlzLl96b2QuZGVmLnNoYXBlKSl9LGNhdGNoYWxsKGUpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOmV9KSl9LHBhc3N0aHJvdWdoKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6TSgpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOk0oKX0pKX0sc3RyaWN0KCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WGUoKX0pKX0sc3RyaXAoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gSnUodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4gV3UodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIEd1KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIEJ1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIFZ1KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIGxzKFp0LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gbHMoSm4sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIFF1KEtuLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gZyhlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4ueSh0KX07cmV0dXJuIG5ldyBPdChuKX1mdW5jdGlvbiBXYShlLHQpe3JldHVybiBuZXcgT3Qoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpYZSgpLC4uLnkodCl9KX1mdW5jdGlvbiBvZShlLHQpe3JldHVybiBuZXcgT3Qoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpNKCksLi4ueSh0KX0pfWNvbnN0IEF0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e0tvLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VGgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gTyhlLHQpe3JldHVybiBuZXcgQXQoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4ueSh0KX0pfWNvbnN0IG1yPXAoIlpvZFhvciIsKGUsdCk9PntBdC5pbml0KGUsdCksZHAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5UaCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBHYShlLHQpe3JldHVybiBuZXcgbXIoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLnkodCl9KX1jb25zdCBncj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57QXQuaW5pdChlLHQpLGhwLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEJuKGUsdCxuKXtyZXR1cm4gbmV3IGdyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi55KG4pfSl9Y29uc3QgYnI9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e2ZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Y2IoKX0pO2Z1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIG5ldyBicih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IHZyPXAoIlpvZFR1cGxlIiwoZSx0KT0+e3J0KCksaWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT51YigpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgWnQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIHlyKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiB4LHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IHZyKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4ueShyKX0pfWNvbnN0IGV0PXAoIlpvZFJlY29yZCIsKGUsdCk9PntydCgpLG1wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bGIoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gUihlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IGV0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6aCgpLHZhbHVlVHlwZTplLC4uLnkodCl9KTpuZXcgZXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBRYShlLHQsbil7cmV0dXJuIG5ldyBldCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gWWEoZSx0LG4pe3JldHVybiBuZXcgZXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi55KG4pfSl9Y29uc3QgX3I9cCgiWm9kTWFwIiwoZSx0KT0+e3J0KCksZ3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5yYigpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKE5lKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soTmUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKG90KC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKHl0KC4uLm4pKX0pO2Z1bmN0aW9uIFhhKGUsdCxuKXtyZXR1cm4gbmV3IF9yKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9Y29uc3Qga3I9cCgiWm9kU2V0IiwoZSx0KT0+e3J0KCksYnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5zYigpLGUubWluPSguLi5uKT0+ZS5jaGVjayhOZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKE5lKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhvdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayh5dCguLi5uKSl9KTtmdW5jdGlvbiBlYyhlLHQpe3JldHVybiBuZXcga3Ioe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IHR0PXAoIlpvZEVudW0iLChlLHQpPT57dnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5XZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgdHQoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IHR0KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIHJlKGUsdCl7Y29uc3Qgbj1BcnJheS5pc0FycmF5KGUpP09iamVjdC5mcm9tRW50cmllcyhlLm1hcChvPT5bbyxvXSkpOmU7cmV0dXJuIG5ldyB0dCh7dHlwZToiZW51bSIsZW50cmllczpuLC4uLnkodCl9KX1mdW5jdGlvbiB0YyhlLHQpe3JldHVybiBuZXcgdHQoe3R5cGU6ImVudW0iLGVudHJpZXM6ZSwuLi55KHQpfSl9Y29uc3Qgd3I9cCgiWm9kTGl0ZXJhbCIsKGUsdCk9Pnt5cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkdnKCksZS52YWx1ZXM9bmV3IFNldCh0LnZhbHVlcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInZhbHVlIix7Z2V0KCl7aWYodC52YWx1ZXMubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHNjaGVtYSBjb250YWlucyBtdWx0aXBsZSB2YWxpZCBsaXRlcmFsIHZhbHVlcy4gVXNlIGAudmFsdWVzYCBpbnN0ZWFkLiIpO3JldHVybiB0LnZhbHVlc1swXX19KX0pO2Z1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbmV3IHdyKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheShlKT9lOltlXSwuLi55KHQpfSl9Y29uc3QgJHI9cCgiWm9kRmlsZSIsKGUsdCk9PntfcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhnKCksZS5taW49KG4sbyk9PmUuY2hlY2soTmUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2sob3QobixvKSksZS5taW1lPShuLG8pPT5lLmNoZWNrKGJuKEFycmF5LmlzQXJyYXkobik/bjpbbl0sbykpfSk7ZnVuY3Rpb24gbmMoZSl7cmV0dXJuIGJoKCRyLGUpfWNvbnN0IFNyPXAoIlpvZFRyYW5zZm9ybSIsKGUsdCk9PntydCgpLGtwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+b2IoKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IERvKGUuY29uc3RydWN0b3IubmFtZSk7bi5hZGRJc3N1ZT1zPT57aWYodHlwZW9mIHM9PSJzdHJpbmciKW4uaXNzdWVzLnB1c2gocHQocyxuLnZhbHVlLHQpKTtlbHNle2NvbnN0IGk9cztpLmZhdGFsJiYoaS5jb250aW51ZT0hMSksaS5jb2RlPz8oaS5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gaXx8KGkuaW5wdXQ9bi52YWx1ZSksaS5pbnN0Pz8oaS5pbnN0PWUpLG4uaXNzdWVzLnB1c2gocHQoaSkpfX07Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cyxuKSk6KG4udmFsdWU9cixuKX19KTtmdW5jdGlvbiBWbihlKXtyZXR1cm4gbmV3IFNyKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTplfSl9Y29uc3QgWnQ9cCgiWm9kT3B0aW9uYWwiLChlLHQpPT57YWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5JaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEIoZSl7cmV0dXJuIG5ldyBadCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3QgSm49cCgiWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9Pnt3cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkloKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24genIoZSl7cmV0dXJuIG5ldyBKbih7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3QgVHI9cCgiWm9kTnVsbGFibGUiLChlLHQpPT57JHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIG10KGUpe3JldHVybiBuZXcgVHIoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6ZX0pfWZ1bmN0aW9uIG9jKGUpe3JldHVybiBCKG10KGUpKX1jb25zdCBJcj1wKCJab2REZWZhdWx0IiwoZSx0KT0+e1NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+aGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVEZWZhdWx0PWUudW53cmFwfSk7ZnVuY3Rpb24gUHIoZSx0KXtyZXR1cm4gbmV3IElyKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpSbyh0KX19KX1jb25zdCB4cj1wKCJab2RQcmVmYXVsdCIsKGUsdCk9Pnt6cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmZiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gQ3IoZSx0KXtyZXR1cm4gbmV3IHhyKHt0eXBlOiJwcmVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6Um8odCl9fSl9Y29uc3QgS249cCgiWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57VHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5wYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEVyKGUsdCl7cmV0dXJuIG5ldyBLbih7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTplLC4uLnkodCl9KX1jb25zdCBPcj1wKCJab2RTdWNjZXNzIiwoZSx0KT0+e0lwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiByYyhlKXtyZXR1cm4gbmV3IE9yKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6ZX0pfWNvbnN0IEFyPXAoIlpvZENhdGNoIiwoZSx0KT0+e1BwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVDYXRjaD1lLnVud3JhcH0pO2Z1bmN0aW9uIFJyKGUsdCl7cmV0dXJuIG5ldyBBcih7dHlwZToiY2F0Y2giLGlubmVyVHlwZTplLGNhdGNoVmFsdWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp4cyh0KX0pfWNvbnN0IFpyPXAoIlpvZE5hTiIsKGUsdCk9Pnt4cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlFnKCl9KTtmdW5jdGlvbiBzYyhlKXtyZXR1cm4gbWgoWnIsZSl9Y29uc3QgTnQ9cCgiWm9kUGlwZSIsKGUsdCk9PntjaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdiKCksZS5pbj10LmluLGUub3V0PXQub3V0fSk7ZnVuY3Rpb24gV3QoZSx0KXtyZXR1cm4gbmV3IE50KHt0eXBlOiJwaXBlIixpbjplLG91dDp0fSl9Y29uc3QganQ9cCgiWm9kQ29kZWMiLChlLHQpPT57TnQuaW5pdChlLHQpLHVpLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGljKGUsdCxuKXtyZXR1cm4gbmV3IGp0KHt0eXBlOiJwaXBlIixpbjplLG91dDp0LHRyYW5zZm9ybTpuLmRlY29kZSxyZXZlcnNlVHJhbnNmb3JtOm4uZW5jb2RlfSl9ZnVuY3Rpb24gYWMoZSl7Y29uc3QgdD1lLl96b2QuZGVmO3JldHVybiBuZXcganQoe3R5cGU6InBpcGUiLGluOnQub3V0LG91dDp0LmluLHRyYW5zZm9ybTp0LnJldmVyc2VUcmFuc2Zvcm0scmV2ZXJzZVRyYW5zZm9ybTp0LnRyYW5zZm9ybX0pfWNvbnN0IE5yPXAoIlpvZFByZXByb2Nlc3MiLChlLHQpPT57TnQuaW5pdChlLHQpLENwLmluaXQoZSx0KX0pLGpyPXAoIlpvZFJlYWRvbmx5IiwoZSx0KT0+e0VwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBNcihlKXtyZXR1cm4gbmV3IGpyKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOmV9KX1jb25zdCBxcj1wKCJab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57T3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZZygpfSk7ZnVuY3Rpb24gY2MoZSx0KXtyZXR1cm4gbmV3IHFyKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czplLC4uLnkodCl9KX1jb25zdCBEcj1wKCJab2RMYXp5IiwoZSx0KT0+e2xpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5nZXR0ZXIoKX0pO2Z1bmN0aW9uIExyKGUpe3JldHVybiBuZXcgRHIoe3R5cGU6ImxhenkiLGdldHRlcjplfSl9Y29uc3QgVXI9cCgiWm9kUHJvbWlzZSIsKGUsdCk9PntScC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gdWMoZSl7cmV0dXJuIG5ldyBVcih7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOmV9KX1jb25zdCBGcj1wKCJab2RGdW5jdGlvbiIsKGUsdCk9PntBcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm5iKCl9KTtmdW5jdGlvbiBndChlKXtyZXR1cm4gbmV3IEZyKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6QXJyYXkuaXNBcnJheShlPy5pbnB1dCk/eXIoZT8uaW5wdXQpOmU/LmlucHV0Pz9QKE0oKSksb3V0cHV0OmU/Lm91dHB1dD8/TSgpfSl9Y29uc3QgTXQ9cCgiWm9kQ3VzdG9tIiwoZSx0KT0+e1pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dGIoKX0pO2Z1bmN0aW9uIGxjKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJjdXN0b20ifSk7cmV0dXJuIHQuX3pvZC5jaGVjaz1lLHR9ZnVuY3Rpb24gSHIoZSx0KXtyZXR1cm4gdmgoTXQsZT8/KCgpPT4hMCksdCl9ZnVuY3Rpb24gQnIoZSx0PXt9KXtyZXR1cm4geWgoTXQsZSx0KX1mdW5jdGlvbiBWcihlLHQpe3JldHVybiBfaChlLHQpfWNvbnN0IGRjPXdoLHBjPSRoLEpyPXAoIlpvZEluc3RhbmNlT2YiLChlLHQpPT57TXQuaW5pdChlLHQpfSx7cHJvcGVydGllcyhlLHQpe3JldHVybiB0aGlzLmNoZWNrKGduKGUsdCkpfX0pO2Z1bmN0aW9uIGhjKGUsdD17fSl7Y29uc3Qgbj1uZXcgSnIoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46bz0+byBpbnN0YW5jZW9mIGUsYWJvcnQ6ITAsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuYmFnLkNsYXNzPWUsbi5fem9kLmNoZWNrPW89PntvLnZhbHVlIGluc3RhbmNlb2YgZXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDplLm5hbWUsaW5wdXQ6by52YWx1ZSxpbnN0Om4scGF0aDpbLi4ubi5fem9kLmRlZi5wYXRoPz9bXV19KX0sbn1jb25zdCBmYz0oLi4uZSk9PlNoKHtDb2RlYzpqdCxCb29sZWFuOkN0LFN0cmluZzokdH0sLi4uZSk7ZnVuY3Rpb24gbWMoZSl7Y29uc3QgdD1McigoKT0+TyhbaChlKSxDKCksRCgpLFVuKCksUCh0KSxSKGgoKSx0KV0pKTtyZXR1cm4gdH1mdW5jdGlvbiBXbihlLHQpe3JldHVybiBuZXcgTnIoe3R5cGU6InBpcGUiLGluOlZuKGUpLG91dDp0fSl9Y29uc3QgVGI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZEFueTpscixab2RBcnJheTpmcixab2RCYXNlNjQ6am4sWm9kQmFzZTY0VVJMOk1uLFpvZEJpZ0ludDpFdCxab2RCaWdJbnRGb3JtYXQ6TG4sWm9kQm9vbGVhbjpDdCxab2RDSURSdjQ6Wm4sWm9kQ0lEUnY2Ok5uLFpvZENVSUQ6UG4sWm9kQ1VJRDI6eG4sWm9kQ2F0Y2g6QXIsWm9kQ29kZWM6anQsWm9kQ3JlZGl0Q2FyZDpzcixab2RDdXN0b206TXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkhlLFpvZERhdGU6SG4sWm9kRGVmYXVsdDpJcixab2REaXNjcmltaW5hdGVkVW5pb246Z3IsWm9kRTE2NDpxbixab2RFbWFpbDpTbixab2RFbW9qaTpUbixab2RFbnVtOnR0LFpvZEV4YWN0T3B0aW9uYWw6Sm4sWm9kRmlsZTokcixab2RGdW5jdGlvbjpGcixab2RHVUlEOnpuLFpvZElCQU46aXIsWm9kSVB2NDpBbixab2RJUHY2OlJuLFpvZElTT0RhdGU6enQsWm9kSVNPRGF0ZVRpbWU6U3QsWm9kSVNPRHVyYXRpb246SXQsWm9kSVNPVGltZTpUdCxab2RJbnN0YW5jZU9mOkpyLFpvZEludGVyc2VjdGlvbjpicixab2RKV1Q6RG4sWm9kS1NVSUQ6T24sWm9kTGF6eTpEcixab2RMaXRlcmFsOndyLFpvZE1BQzpycixab2RNYXA6X3IsWm9kTmFOOlpyLFpvZE5hbm9JRDpJbixab2ROZXZlcjpwcixab2ROb25PcHRpb25hbDpLbixab2ROdWxsOnVyLFpvZE51bGxhYmxlOlRyLFpvZE51bWJlcjp4dCxab2ROdW1iZXJGb3JtYXQ6QmUsWm9kT2JqZWN0Ok90LFpvZE9wdGlvbmFsOlp0LFpvZFBpcGU6TnQsWm9kUHJlZmF1bHQ6eHIsWm9kUHJlcHJvY2VzczpOcixab2RQcm9taXNlOlVyLFpvZFJlYWRvbmx5OmpyLFpvZFJlY29yZDpldCxab2RTZXQ6a3IsWm9kU3RyaW5nOiR0LFpvZFN0cmluZ0Zvcm1hdDpMLFpvZFN1Y2Nlc3M6T3IsWm9kU3ltYm9sOmFyLFpvZFRlbXBsYXRlTGl0ZXJhbDpxcixab2RUcmFuc2Zvcm06U3IsWm9kVHVwbGU6dnIsWm9kVHlwZTpFLFpvZFVMSUQ6Q24sWm9kVVJMOlB0LFpvZFVVSUQ6SWUsWm9kVW5kZWZpbmVkOmNyLFpvZFVuaW9uOkF0LFpvZFVua25vd246ZHIsWm9kVm9pZDpocixab2RYSUQ6RW4sWm9kWG9yOm1yLF9ab2RTdHJpbmc6JG4sX2RlZmF1bHQ6UHIsX2Z1bmN0aW9uOmd0LGFueTpGbixhcnJheTpQLGJhc2U2NDpJYSxiYXNlNjR1cmw6UGEsYmlnaW50OlVhLGJvb2xlYW46RCxjYXRjaDpScixjaGVjazpsYyxjaWRydjQ6emEsY2lkcnY2OlRhLGNvZGVjOmljLGNyZWRpdENhcmQ6Q2EsY3VpZDpiYSxjdWlkMjp2YSxjdXJyZW5jeUNvZGU6TmEsY3VzdG9tOkhyLGRhdGU6SmEsZGVzY3JpYmU6ZGMsZGlzY3JpbWluYXRlZFVuaW9uOkJuLGUxNjQ6eGEsZW1haWw6YWEsZW1vamk6bWEsZW51bTpyZSxleGFjdE9wdGlvbmFsOnpyLGZpbGU6bmMsZmxvYXQzMjpNYSxmbG9hdDY0OnFhLGZ1bmN0aW9uOmd0LGd1aWQ6Y2EsaGFzaDpqYSxoZXg6WmEsaG9zdG5hbWU6UmEsaHR0cFVybDpmYSxpYmFuOkVhLGluc3RhbmNlb2Y6aGMsaW50Okt0LGludDMyOkRhLGludDY0OkZhLGludGVyc2VjdGlvbjpSdCxpbnZlcnRDb2RlYzphYyxpcHY0OndhLGlwdjY6U2EsanNvbjptYyxqd3Q6T2Esa2V5b2Y6S2Esa3N1aWQ6a2EsbGF6eTpMcixsaXRlcmFsOmYsbG9vc2VPYmplY3Q6b2UsbG9vc2VSZWNvcmQ6WWEsbWFjOiRhLG1hcDpYYSxtZXRhOnBjLG5hbjpzYyxuYW5vaWQ6Z2EsbmF0aXZlRW51bTp0YyxuZXZlcjpYZSxub25vcHRpb25hbDpFcixudWxsOlVuLG51bGxhYmxlOm10LG51bGxpc2g6b2MsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6QixwYXJ0aWFsUmVjb3JkOlFhLHBpcGU6V3QscHJlZmF1bHQ6Q3IscHJlcHJvY2VzczpXbixwcm9taXNlOnVjLHJlYWRvbmx5Ok1yLHJlY29yZDpSLHJlZmluZTpCcixzZXQ6ZWMsc3RyaWN0T2JqZWN0OldhLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpBYSxzdHJpbmdib29sOmZjLHN1Y2Nlc3M6cmMsc3VwZXJSZWZpbmU6VnIsc3ltYm9sOkJhLHRlbXBsYXRlTGl0ZXJhbDpjYyx0cmFuc2Zvcm06Vm4sdHVwbGU6eXIsdWludDMyOkxhLHVpbnQ2NDpIYSx1bGlkOnlhLHVuZGVmaW5lZDpmdCx1bmlvbjpPLHVua25vd246TSx1cmw6aGEsdXVpZDp1YSx1dWlkdjQ6bGEsdXVpZHY2OmRhLHV1aWR2NzpwYSx2b2lkOlZhLHhpZDpfYSx4b3I6R2F9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksT2g9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIEFoKGUpe2VlKHtjdXN0b21FcnJvcjplfSl9ZnVuY3Rpb24gUmgoKXtyZXR1cm4gZWUoKS5jdXN0b21FcnJvcn12YXIgU287U298fChTbz17fSk7ZnVuY3Rpb24gWmgoZSl7cmV0dXJuIFVpKFN0LGUpfWZ1bmN0aW9uIEliKGUpe3JldHVybiBGaSh6dCxlKX1mdW5jdGlvbiBQYihlKXtyZXR1cm4gSGkoVHQsZSl9ZnVuY3Rpb24geGIoZSl7cmV0dXJuIEJpKEl0LGUpfWNvbnN0IGdjPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RJU09EYXRlOnp0LFpvZElTT0RhdGVUaW1lOlN0LFpvZElTT0R1cmF0aW9uOkl0LFpvZElTT1RpbWU6VHQsZGF0ZTpJYixkYXRldGltZTpaaCxkdXJhdGlvbjp4Yix0aW1lOlBifSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFM9ey4uLlRiLC4uLlNiLGlzbzpnY30sQ2I9bmV3IFNldChbIiRzY2hlbWEiLCIkcmVmIiwiJGRlZnMiLCJkZWZpbml0aW9ucyIsIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIiwidHlwZSIsImVudW0iLCJjb25zdCIsImFueU9mIiwib25lT2YiLCJhbGxPZiIsIm5vdCIsInByb3BlcnRpZXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVzIiwibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiLCJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwibWluSXRlbXMiLCJtYXhJdGVtcyIsInVuaXF1ZUl0ZW1zIiwiY29udGFpbnMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIiwibWluTGVuZ3RoIiwibWF4TGVuZ3RoIiwicGF0dGVybiIsImZvcm1hdCIsIm1pbmltdW0iLCJtYXhpbXVtIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtdWx0aXBsZU9mIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiaWYiLCJ0aGVuIiwiZWxzZSIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbnRSZXF1aXJlZCIsIm51bGxhYmxlIiwicmVhZE9ubHkiXSk7ZnVuY3Rpb24gRWIoZSx0KXtjb25zdCBuPWUuJHNjaGVtYTtyZXR1cm4gbj09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI/ImRyYWZ0LTIwMjAtMTIiOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIj8iZHJhZnQtNyI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiPyJkcmFmdC00Ijp0Pz8iZHJhZnQtMjAyMC0xMiJ9ZnVuY3Rpb24gcHUoZSx0KXtyZXR1cm4gZS5tYXAoKG4sbyk9Pm88dD9uOm4ub3B0aW9uYWwoKSl9ZnVuY3Rpb24gT2IoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBBYihlLHQpe2lmKCFlLnN0YXJ0c1dpdGgoIiMiKSl0aHJvdyBuZXcgRXJyb3IoIkV4dGVybmFsICRyZWYgaXMgbm90IHN1cHBvcnRlZCwgb25seSBsb2NhbCByZWZzICgjLy4uLikgYXJlIGFsbG93ZWQiKTtjb25zdCBuPWUuc2xpY2UoMSkuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0LnJvb3RTY2hlbWE7Y29uc3Qgbz10LnZlcnNpb249PT0iZHJhZnQtMjAyMC0xMiI/IiRkZWZzIjoiZGVmaW5pdGlvbnMiO2lmKG5bMF09PT1vKXtjb25zdCByPW5bMV09PT12b2lkIDA/dm9pZCAwOk9iKG5bMV0pO2lmKCFyfHwhdC5kZWZzW3JdKXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiB0LmRlZnNbcl19dGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCl9ZnVuY3Rpb24gUmIoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZih0eXBlb2YgciE9Im9iamVjdCJ8fHI9PT1udWxsfHxBcnJheS5pc0FycmF5KHIpKXJldHVybjtjb25zdCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpO2lmKHQubWluUHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluUHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIHNtYWxsOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA+PSR7dC5taW5Qcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQubWF4UHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heFByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBiaWc6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlIDw9JHt0Lm1heFByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5rZXlTY2hlbWEpZm9yKGNvbnN0IGkgb2Ygcyl7Y29uc3QgYT10LmtleVNjaGVtYS5zYWZlUGFyc2UoaSk7YS5zdWNjZXNzfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczphLmVycm9yLmlzc3VlcyxpbnB1dDppLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fSkucGlwZShlKX1mdW5jdGlvbiB5cyhlLHQpe2lmKGU9PT1udWxsKXJldHVybiJ6Ijtjb25zdCBuPXR5cGVvZiBlO2lmKG4hPT0ib2JqZWN0Iil7aWYobj09PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1TdHJpbmcoZSk7cmV0dXJuYCR7blswXX0ke28ubGVuZ3RofToke299YH1pZih0LmhhcyhlKSlyZXR1cm4gbnVsbDt0LmFkZChlKTt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcz1bXTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBhPXlzKGksdCk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7cy5wdXNoKGEpfXJldHVybmBhJHtzLmxlbmd0aH06WyR7cy5qb2luKCIsIil9XWB9Y29uc3Qgbz1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1bXTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBpPXlzKGVbc10sdCk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7ci5wdXNoKGAke3MubGVuZ3RofToke3N9PSR7aX1gKX1yZXR1cm5gbyR7ci5sZW5ndGh9Onske3Iuam9pbigiLCIpfX1gfWZpbmFsbHl7dC5kZWxldGUoZSl9fWNvbnN0IFpiPW5ldyBTZXQoWyJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb250YWlucyIsInByb3BlcnR5TmFtZXMiLCJub3QiLCJpZiIsInRoZW4iLCJlbHNlIiwiYWxsT2YiLCJhbnlPZiIsIm9uZU9mIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImNvbnRlbnRTY2hlbWEiXSksTmI9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbmNpZXMiLCIkZGVmcyIsImRlZmluaXRpb25zIl0pO2Z1bmN0aW9uIEZ0KGUpe3JldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKEZ0KTp0eXBlb2YgZS4kcmVmPT0ic3RyaW5nIj8hMDpPYmplY3QuZW50cmllcyhlKS5zb21lKChbdCxuXSk9PlpiLmhhcyh0KT9GdChuKTohTmIuaGFzKHQpfHx0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsPyExOk9iamVjdC52YWx1ZXMobikuc29tZShGdCkpfWZ1bmN0aW9uIGh1KGUpe3JldHVybiBlPT09MT8iZWxlbWVudCI6ImVsZW1lbnRzIn1mdW5jdGlvbiBqYihlLHQpe3JldHVybiBTLnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHQudW5pcXVlSXRlbXM9PT0hMCl7Y29uc3Qgcz1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPXlzKHJbaV0sbmV3IFNldCk7aWYoYT09PW51bGwpY29udGludWU7Y29uc3QgYz1zLmdldChhKTtpZihjPT09dm9pZCAwKXtzLnNldChhLGkpO2NvbnRpbnVlfW8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgaXRlbXMgbXVzdCBiZSB1bmlxdWU6IGVsZW1lbnQgYXQgaW5kZXggJHtpfSBkdXBsaWNhdGVzIHRoZSBvbmUgYXQgaW5kZXggJHtjfWAsaW5wdXQ6cixwYXRoOltpXSxjb250aW51ZTohMH0pfX1pZih0LmNvbnRhaW5zU2NoZW1hKXtjb25zdCBzPXQubWluQ29udGFpbnM/PzEsaT10Lm1heENvbnRhaW5zIT09dm9pZCAwP3QubWF4Q29udGFpbnMrMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGE9MDtmb3IoY29uc3QgYyBvZiByKWlmKHQuY29udGFpbnNTY2hlbWEuc2FmZVBhcnNlKGMpLnN1Y2Nlc3MmJisrYT49aSlicmVhazthPHMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7c30gbWF0Y2hpbmcgJHtodShzKX07IGZvdW5kICR7YX1gLGlucHV0OnIsY29udGludWU6ITB9KSx0Lm1heENvbnRhaW5zIT09dm9pZCAwJiZhPnQubWF4Q29udGFpbnMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IG1vc3QgJHt0Lm1heENvbnRhaW5zfSBtYXRjaGluZyAke2h1KHQubWF4Q29udGFpbnMpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pfX19KS5waXBlKGUpfWZ1bmN0aW9uIGZ1KGUsdCl7aWYoZSE9PSExKXJldHVybiBlPT09dm9pZCAwfHxlPT09ITA/Uy5hbnkoKTpsZShlLHQpfWNvbnN0IE1iPS9eKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZDpbMC01XVxkKD86XC5cZCspPyg/Olp8WystXSg/OlswMV1cZHwyWzAtM10pOlswLTVdXGQpJC87ZnVuY3Rpb24gTmgoZSx0KXtpZihlLm5vdCE9PXZvaWQgMCl7aWYodHlwZW9mIGUubm90PT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZS5ub3QpLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpcyBub3Qgc3VwcG9ydGVkIGluIFpvZCAoZXhjZXB0IHsgbm90OiB7fSB9IGZvciBuZXZlcikiKX1pZihlLnVuZXZhbHVhdGVkSXRlbXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLnVuZXZhbHVhdGVkUHJvcGVydGllcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkUHJvcGVydGllcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5pZiE9PXZvaWQgMHx8ZS50aGVuIT09dm9pZCAwfHxlLmVsc2UhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb25kaXRpb25hbCBzY2hlbWFzIChpZi90aGVuL2Vsc2UpIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS5kZXBlbmRlbnRTY2hlbWFzIT09dm9pZCAwfHxlLmRlcGVuZGVudFJlcXVpcmVkIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLiRyZWYpe2NvbnN0IHI9ZS4kcmVmO2lmKHQucmVmcy5oYXMocikpcmV0dXJuIHQucmVmcy5nZXQocik7aWYodC5wcm9jZXNzaW5nLmhhcyhyKSlyZXR1cm4gUy5sYXp5KCgpPT57aWYoIXQucmVmcy5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3J9YCk7cmV0dXJuIHQucmVmcy5nZXQocil9KTt0LnByb2Nlc3NpbmcuYWRkKHIpO2NvbnN0IHM9QWIocix0KSxpPWxlKHMsdCk7cmV0dXJuIHQucmVmcy5zZXQocixpKSx0LnByb2Nlc3NpbmcuZGVsZXRlKHIpLGl9aWYoZS5lbnVtIT09dm9pZCAwKXtjb25zdCByPWUuZW51bTtpZih0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiZlLm51bGxhYmxlPT09ITAmJnIubGVuZ3RoPT09MSYmclswXT09PW51bGwpcmV0dXJuIFMubnVsbCgpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gUy5uZXZlcigpO2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gUy5saXRlcmFsKHJbMF0pO2lmKHIuZXZlcnkoaT0+dHlwZW9mIGk9PSJzdHJpbmciKSlyZXR1cm4gUy5lbnVtKHIpO2NvbnN0IHM9ci5tYXAoaT0+Uy5saXRlcmFsKGkpKTtyZXR1cm4gcy5sZW5ndGg8Mj9zWzBdOlMudW5pb24oW3NbMF0sc1sxXSwuLi5zLnNsaWNlKDIpXSl9aWYoZS5jb25zdCE9PXZvaWQgMClyZXR1cm4gUy5saXRlcmFsKGUuY29uc3QpO2NvbnN0IG49ZS50eXBlO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IHI9bi5tYXAocz0+e2NvbnN0IGk9ey4uLmUsdHlwZTpzfTtyZXR1cm4gTmgoaSx0KX0pO3JldHVybiByLmxlbmd0aD09PTA/Uy5uZXZlcigpOnIubGVuZ3RoPT09MT9yWzBdOlMudW5pb24ocil9aWYoIW4pcmV0dXJuIFMuYW55KCk7bGV0IG87c3dpdGNoKG4pe2Nhc2Uic3RyaW5nIjp7bGV0IHI9Uy5zdHJpbmcoKTtpZihlLmZvcm1hdCl7Y29uc3Qgcz1lLmZvcm1hdDtzPT09ImVtYWlsIj9yPXIuY2hlY2soUy5lbWFpbCgpKTpzPT09InVyaSJ8fHM9PT0idXJpLXJlZmVyZW5jZSI/cj1yLmNoZWNrKFMudXJsKCkpOnM9PT0idXVpZCJ8fHM9PT0iZ3VpZCI/cj1yLmNoZWNrKFMudXVpZCgpKTpzPT09ImRhdGUtdGltZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGV0aW1lKHtvZmZzZXQ6ITB9KSk6cz09PSJkYXRlIj9yPXIuY2hlY2soUy5pc28uZGF0ZSgpKTpzPT09InRpbWUiP3I9ci5jaGVjayhTLnJlZ2V4KE1iKSk6cz09PSJkdXJhdGlvbiI/cj1yLmNoZWNrKFMuaXNvLmR1cmF0aW9uKCkpOnM9PT0iaG9zdG5hbWUiP3I9ci5jaGVjayhTLmhvc3RuYW1lKCkpOnM9PT0iaXB2NCI/cj1yLmNoZWNrKFMuaXB2NCgpKTpzPT09ImlwdjYiP3I9ci5jaGVjayhTLmlwdjYoKSk6cz09PSJtYWMiP3I9ci5jaGVjayhTLm1hYygpKTpzPT09ImNpZHIiP3I9ci5jaGVjayhTLmNpZHJ2NCgpKTpzPT09ImNpZHItdjYiP3I9ci5jaGVjayhTLmNpZHJ2NigpKTpzPT09ImJhc2U2NCI/cj1yLmNoZWNrKFMuYmFzZTY0KCkpOnM9PT0iYmFzZTY0dXJsIj9yPXIuY2hlY2soUy5iYXNlNjR1cmwoKSk6cz09PSJlMTY0Ij9yPXIuY2hlY2soUy5lMTY0KCkpOnM9PT0iY3JlZGl0X2NhcmQiP3I9ci5jaGVjayhTLmNyZWRpdENhcmQoKSk6cz09PSJpYmFuIj9yPXIuY2hlY2soUy5pYmFuKCkpOnM9PT0iand0Ij9yPXIuY2hlY2soUy5qd3QoKSk6cz09PSJlbW9qaSI/cj1yLmNoZWNrKFMuZW1vamkoKSk6cz09PSJuYW5vaWQiP3I9ci5jaGVjayhTLm5hbm9pZCgpKTpzPT09ImN1aWQiP3I9ci5jaGVjayhTLmN1aWQoKSk6cz09PSJjdWlkMiI/cj1yLmNoZWNrKFMuY3VpZDIoKSk6cz09PSJ1bGlkIj9yPXIuY2hlY2soUy51bGlkKCkpOnM9PT0ieGlkIj9yPXIuY2hlY2soUy54aWQoKSk6cz09PSJrc3VpZCImJihyPXIuY2hlY2soUy5rc3VpZCgpKSl9dHlwZW9mIGUubWluTGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5taW4oZS5taW5MZW5ndGgpKSx0eXBlb2YgZS5tYXhMZW5ndGg9PSJudW1iZXIiJiYocj1yLm1heChlLm1heExlbmd0aCkpLGUucGF0dGVybiYmKHI9ci5yZWdleChuZXcgUmVnRXhwKGUucGF0dGVybikpKSxvPXI7YnJlYWt9Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6e2xldCByPW49PT0iaW50ZWdlciI/Uy5udW1iZXIoKS5pbnQoKTpTLm51bWJlcigpO3R5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1pbmltdW0hPT0hMCYmKHI9ci5taW4oZS5taW5pbXVtKSksdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWF4aW11bSE9PSEwJiYocj1yLm1heChlLm1heGltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNaW5pbXVtPT0ibnVtYmVyIj9yPXIuZ3QoZS5leGNsdXNpdmVNaW5pbXVtKTplLmV4Y2x1c2l2ZU1pbmltdW09PT0hMCYmdHlwZW9mIGUubWluaW11bT09Im51bWJlciImJihyPXIuZ3QoZS5taW5pbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWF4aW11bT09Im51bWJlciI/cj1yLmx0KGUuZXhjbHVzaXZlTWF4aW11bSk6ZS5leGNsdXNpdmVNYXhpbXVtPT09ITAmJnR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiYocj1yLmx0KGUubWF4aW11bSkpLHR5cGVvZiBlLm11bHRpcGxlT2Y9PSJudW1iZXIiJiYocj1yLm11bHRpcGxlT2YoZS5tdWx0aXBsZU9mKSksbz1yO2JyZWFrfWNhc2UiYm9vbGVhbiI6e289Uy5ib29sZWFuKCk7YnJlYWt9Y2FzZSJudWxsIjp7bz1TLm51bGwoKTticmVha31jYXNlIm9iamVjdCI6e2NvbnN0IHI9e30scz1lLnByb3BlcnRpZXN8fHt9LGk9bmV3IFNldChlLnJlcXVpcmVkfHxbXSksYT10eXBlb2YgZS5hZGRpdGlvbmFsUHJvcGVydGllcz09Im9iamVjdCI/bGUoZS5hZGRpdGlvbmFsUHJvcGVydGllcyx0KTp2b2lkIDA7Zm9yKGNvbnN0W20sYl1vZiBPYmplY3QuZW50cmllcyhzKSl7Y29uc3Qgdj1sZShiLHQpO250KHIsbSxpLmhhcyhtKT92OnYub3B0aW9uYWwoKSl9aWYoZS5wYXR0ZXJuUHJvcGVydGllcyl7Y29uc3QgbT1lLnBhdHRlcm5Qcm9wZXJ0aWVzLGI9T2JqZWN0LmtleXMobSksdj1bXTtmb3IoY29uc3QgayBvZiBiKXtjb25zdCAkPWxlKG1ba10sdCksWj1TLnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAoaykpO3YucHVzaChTLmxvb3NlUmVjb3JkKFosJCkpfWNvbnN0IF89W107aWYoT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJl8ucHVzaChTLm9iamVjdChyKS5wYXNzdGhyb3VnaCgpKSxfLnB1c2goLi4udiksXy5sZW5ndGg9PT0wKW89Uy5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCk7ZWxzZSBpZihfLmxlbmd0aD09PTEpbz1fWzBdO2Vsc2V7bGV0IGs9Uy5pbnRlcnNlY3Rpb24oX1swXSxfWzFdKTtmb3IobGV0ICQ9MjskPF8ubGVuZ3RoOyQrKylrPVMuaW50ZXJzZWN0aW9uKGssX1skXSk7bz1rfWlmKGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSl7Y29uc3Qgaz1PYmplY3Qua2V5cyhyKSwkPWIubWFwKFQ9Pm5ldyBSZWdFeHAoVCkpLFo9bztvPW8uY2hlY2soVD0+e2lmKCFMZShULnZhbHVlKSlyZXR1cm47Y29uc3QgSz1bXTtmb3IoY29uc3QgbmUgb2YgT2JqZWN0LmtleXMoVC52YWx1ZSkpay5pbmNsdWRlcyhuZSl8fCQuc29tZShXPT5XLnRlc3QobmUpKXx8Sy5wdXNoKG5lKTtLLmxlbmd0aCYmVC5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6SyxpbnB1dDpULnZhbHVlLGluc3Q6Wn0pfSl9fWVsc2V7Y29uc3QgbT1TLm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1tLnN0cmljdCgpOmE/bz1tLmNhdGNoYWxsKGEpOm89bS5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCxsPXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsZD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fGwhPT12b2lkIDB8fGQhPT12b2lkIDApe2xldCBtO2lmKGMpe2NvbnN0IGI9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO209bGUoYix0KX1vPVJiKG8se2tleVNjaGVtYTptLG1pblByb3BlcnRpZXM6bCxtYXhQcm9wZXJ0aWVzOmR9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChtPT5sZShtLHQpKSxjPXB1KGEsaSksbD1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpmdShzLHQpLGQ9Uy50dXBsZShjKTtvPWw/ZC5yZXN0KGwpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChtPT5sZShtLHQpKSxjPXB1KGEsaSksbD1mdShlLmFkZGl0aW9uYWxJdGVtcyx0KSxkPVMudHVwbGUoYyk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT1sZShzLHQpO2xldCBhPVMuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz1TLmFycmF5KFMuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1qYihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9sZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gbGUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuPU5oKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKGw9PmxlKGwsdCkpLGM9Uy51bmlvbihhKTtuPW8/Uy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAobD0+bGUobCx0KSksYz1TLnhvcihhKTtuPW8/Uy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOlMuYW55KCk7ZWxzZXtsZXQgYT1vP246bGUoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgbD1jO2w8ZS5hbGxPZi5sZW5ndGg7bCsrKWE9Uy5pbnRlcnNlY3Rpb24oYSxsZShlLmFsbE9mW2xdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj1TLm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPVMucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFGdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhRnQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSlDYi5oYXMoYSl8fG50KHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBqaChlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/Uy5hbnkoKTpTLm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1FYihuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/a2V9O3JldHVybiBsZShuLHMpfWZ1bmN0aW9uIE1oKGUpe3JldHVybiBKaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6TyhuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIHFiKGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEcoZSx1ZShuLHtjaGVja3M6Wy4uLm4uY2hlY2tzPz9bXSwuLi50XX0pLHtwYXJlbnQ6ITB9KX1mdW5jdGlvbiBxaChlKXtyZXR1cm4gcWIoZS5vdXQsZS5jaGVja3MpfWZ1bmN0aW9uIERiKGUpe3JldHVybiBlLmluLl96b2QudHJhaXRzLmhhcygiJFpvZFRyYW5zZm9ybSIpP3FoKGUpOmUuaW59ZnVuY3Rpb24gRGgoZSl7cmV0dXJuIEppKGUse3BpcGU6dD0+RGIodC5fem9kLmRlZiksZGVmYXVsdDoodCxuKT0+bj9CKHQuX3pvZC5kZWYuaW5uZXJUeXBlKTp0LGNhdGNoOih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBMaChlKXtyZXR1cm4gSmkoZSx7cGlwZTp0PT5xaCh0Ll96b2QuZGVmKSxwcmVmYXVsdDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gTGIoZSl7cmV0dXJuIEZwKCR0LGUpfWZ1bmN0aW9uIFViKGUpe3JldHVybiBLcCh4dCxlKX1mdW5jdGlvbiBGYihlKXtyZXR1cm4gdGgoQ3QsZSl9ZnVuY3Rpb24gSGIoZSl7cmV0dXJuIG9oKEV0LGUpfWZ1bmN0aW9uIEJiKGUpe3JldHVybiBmaChIbixlKX1jb25zdCBVaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmlnaW50OkhiLGJvb2xlYW46RmIsZGF0ZTpCYixudW1iZXI6VWIsc3RyaW5nOkxifSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLG11PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6T3MsJGlucHV0OmhpLCRvdXRwdXQ6cGksSU5WQUxJRDptaSxORVZFUjpFcyxUaW1lUHJlY2lzaW9uOkxpLFpvZEFueTpscixab2RBcnJheTpmcixab2RCYXNlNjQ6am4sWm9kQmFzZTY0VVJMOk1uLFpvZEJpZ0ludDpFdCxab2RCaWdJbnRGb3JtYXQ6TG4sWm9kQm9vbGVhbjpDdCxab2RDSURSdjQ6Wm4sWm9kQ0lEUnY2Ok5uLFpvZENVSUQ6UG4sWm9kQ1VJRDI6eG4sWm9kQ2F0Y2g6QXIsWm9kQ29kZWM6anQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6Z2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6YmksWm9kQ3JlZGl0Q2FyZDpzcixab2RDdXN0b206TXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkhlLFpvZERhdGU6SG4sWm9kRGVmYXVsdDpJcixab2REaXNjcmltaW5hdGVkVW5pb246Z3IsWm9kRTE2NDpxbixab2RFbWFpbDpTbixab2RFbW9qaTpUbixab2RFbnVtOnR0LFpvZEVycm9yOkVoLFpvZEV4YWN0T3B0aW9uYWw6Sm4sWm9kRmlsZTokcixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIFNvfSxab2RGdW5jdGlvbjpGcixab2RHVUlEOnpuLFpvZElCQU46aXIsWm9kSVB2NDpBbixab2RJUHY2OlJuLFpvZElTT0RhdGU6enQsWm9kSVNPRGF0ZVRpbWU6U3QsWm9kSVNPRHVyYXRpb246SXQsWm9kSVNPVGltZTpUdCxab2RJbnN0YW5jZU9mOkpyLFpvZEludGVyc2VjdGlvbjpicixab2RJc3N1ZUNvZGU6T2gsWm9kSldUOkRuLFpvZEtTVUlEOk9uLFpvZExhenk6RHIsWm9kTGl0ZXJhbDp3cixab2RNQUM6cnIsWm9kTWFwOl9yLFpvZE5hTjpacixab2ROYW5vSUQ6SW4sWm9kTmV2ZXI6cHIsWm9kTm9uT3B0aW9uYWw6S24sWm9kTnVsbDp1cixab2ROdWxsYWJsZTpUcixab2ROdW1iZXI6eHQsWm9kTnVtYmVyRm9ybWF0OkJlLFpvZE9iamVjdDpPdCxab2RPcHRpb25hbDpadCxab2RQaXBlOk50LFpvZFByZWZhdWx0OnhyLFpvZFByZXByb2Nlc3M6TnIsWm9kUHJvbWlzZTpVcixab2RSZWFkb25seTpqcixab2RSZWFsRXJyb3I6ZmUsWm9kUmVjb3JkOmV0LFpvZFNldDprcixab2RTdHJpbmc6JHQsWm9kU3RyaW5nRm9ybWF0OkwsWm9kU3VjY2VzczpPcixab2RTeW1ib2w6YXIsWm9kVGVtcGxhdGVMaXRlcmFsOnFyLFpvZFRyYW5zZm9ybTpTcixab2RUdXBsZTp2cixab2RUeXBlOkUsWm9kVUxJRDpDbixab2RVUkw6UHQsWm9kVVVJRDpJZSxab2RVbmRlZmluZWQ6Y3IsWm9kVW5pb246QXQsWm9kVW5rbm93bjpkcixab2RWb2lkOmhyLFpvZFhJRDpFbixab2RYb3I6bXIsX1pvZFN0cmluZzokbixfZGVmYXVsdDpQcixfZnVuY3Rpb246Z3QsYW55OkZuLGFycmF5OlAsYmFzZTY0OklhLGJhc2U2NHVybDpQYSxiaWdpbnQ6VWEsYm9vbGVhbjpELGNhdGNoOlJyLGNoZWNrOmxjLGNpZHJ2NDp6YSxjaWRydjY6VGEsY2xvbmU6Ryxjb2RlYzppYyxjb2VyY2U6VWgsY29tcGlsZTp2aSxjb25maWc6ZWUsY29yZTpQaCxjcmVkaXRDYXJkOkNhLGN1aWQ6YmEsY3VpZDI6dmEsY3VycmVuY3lDb2RlOk5hLGN1c3RvbTpIcixkYXRlOkphLGRlY29kZTplYSxkZWNvZGVBc3luYzpuYSxkZWVwUGFydGlhbDpNaCxkZXNjcmliZTpkYyxkaXNjcmltaW5hdGVkVW5pb246Qm4sZTE2NDp4YSxlbWFpbDphYSxlbW9qaTptYSxlbmNvZGU6WGksZW5jb2RlQXN5bmM6dGEsZW5kc1dpdGg6bW4sZW51bTpyZSxleGFjdE9wdGlvbmFsOnpyLGZpbGU6bmMsZmxhdHRlbkVycm9yOkxvLGZsb2F0MzI6TWEsZmxvYXQ2NDpxYSxmb3JtYXRFcnJvcjpVbyxmcm9tSlNPTlNjaGVtYTpqaCxmdW5jdGlvbjpndCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOnNpLGdldEVycm9yTWFwOlJoLGdsb2JhbFJlZ2lzdHJ5OmtlLGd0OlplLGd0ZTpiZSxndWlkOmNhLGhhc2g6amEsaGV4OlphLGhvc3RuYW1lOlJhLGh0dHBVcmw6ZmEsaWJhbjpFYSxpbmNsdWRlczpobixpbnB1dDpEaCxpbnN0YW5jZW9mOmhjLGludDpLdCxpbnQzMjpEYSxpbnQ2NDpGYSxpbnRlcnNlY3Rpb246UnQsaW52ZXJ0Q29kZWM6YWMsaXB2NDp3YSxpcHY2OlNhLGlzbzpnYyxqc29uOm1jLGp3dDpPYSxrZXlvZjpLYSxrc3VpZDprYSxsYXp5OkxyLGxlbmd0aDprdCxsaXRlcmFsOmYsbG9jYWxlczpkaSxsb29zZU9iamVjdDpvZSxsb29zZVJlY29yZDpZYSxsb3dlcmNhc2U6ZG4sbHQ6UmUsbHRlOmdlLG1hYzokYSxtYXA6WGEsbWF4TGVuZ3RoOl90LG1heFNpemU6b3QsbWVtb2l6ZXI6V28sbWV0YTpwYyxtaW1lOmJuLG1pbkxlbmd0aDpVZSxtaW5TaXplOk5lLG11bHRpcGxlT2Y6WWUsbmFuOnNjLG5hbm9pZDpnYSxuYXRpdmVFbnVtOnRjLG5lZ2F0aXZlOmVyLG5ldmVyOlhlLG5vbm5lZ2F0aXZlOm5yLG5vbm9wdGlvbmFsOkVyLG5vbnBvc2l0aXZlOnRyLG5vcm1hbGl6ZTp2bixudWxsOlVuLG51bGxhYmxlOm10LG51bGxpc2g6b2MsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6QixvdXRwdXQ6TGgsb3ZlcndyaXRlOkNlLHBhcnNlOldpLHBhcnNlQXN5bmM6R2kscGFydGlhbFJlY29yZDpRYSxwaXBlOld0LHBvc2l0aXZlOlhvLHByZWZhdWx0OkNyLHByZXByb2Nlc3M6V24scHJldHRpZnlFcnJvcjpScyxwcm9taXNlOnVjLHByb3BlcnRpZXM6Z24scHJvcGVydHk6b3IscmVhZG9ubHk6TXIscmVjb3JkOlIscmVmaW5lOkJyLHJlZ2V4OmxuLHJlZ2V4ZXM6Sm8scmVnaXN0cnk6R28sc2FmZURlY29kZTpyYSxzYWZlRGVjb2RlQXN5bmM6aWEsc2FmZUVuY29kZTpvYSxzYWZlRW5jb2RlQXN5bmM6c2Esc2FmZVBhcnNlOlFpLHNhZmVQYXJzZUFzeW5jOllpLHNldDplYyxzZXRFcnJvck1hcDpBaCxzaXplOnl0LHNsdWdpZnk6d24sc3RhcnRzV2l0aDpmbixzdHJpY3RPYmplY3Q6V2Esc3RyaW5nOmgsc3RyaW5nRm9ybWF0OkFhLHN0cmluZ2Jvb2w6ZmMsc3VjY2VzczpyYyxzdXBlclJlZmluZTpWcixzeW1ib2w6QmEsdGVtcGxhdGVMaXRlcmFsOmNjLHRvSlNPTlNjaGVtYTpWaSx0b0xvd2VyQ2FzZTpfbix0b1VwcGVyQ2FzZTprbix0b1pvZDpPbyx0cmFuc2Zvcm06Vm4sdHJlZWlmeUVycm9yOkFzLHRyaW06eW4sdHVwbGU6eXIsdWludDMyOkxhLHVpbnQ2NDpIYSx1bGlkOnlhLHVuZGVmaW5lZDpmdCx1bmlvbjpPLHVua25vd246TSx1cHBlcmNhc2U6cG4sdXJsOmhhLHV0aWw6Q3MsdXVpZDp1YSx1dWlkdjQ6bGEsdXVpZHY2OmRhLHV1aWR2NzpwYSx2YWxpZGF0ZTpIbyx2YWxpZGF0ZUFzeW5jOkJvLHZvaWQ6VmEsd2l0aFBhcnNlcjp5aSx4aWQ6X2EseG9yOkdhfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFZiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6T3MsJGlucHV0OmhpLCRvdXRwdXQ6cGksSU5WQUxJRDptaSxORVZFUjpFcyxUaW1lUHJlY2lzaW9uOkxpLFpvZEFueTpscixab2RBcnJheTpmcixab2RCYXNlNjQ6am4sWm9kQmFzZTY0VVJMOk1uLFpvZEJpZ0ludDpFdCxab2RCaWdJbnRGb3JtYXQ6TG4sWm9kQm9vbGVhbjpDdCxab2RDSURSdjQ6Wm4sWm9kQ0lEUnY2Ok5uLFpvZENVSUQ6UG4sWm9kQ1VJRDI6eG4sWm9kQ2F0Y2g6QXIsWm9kQ29kZWM6anQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6Z2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6YmksWm9kQ3JlZGl0Q2FyZDpzcixab2RDdXN0b206TXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkhlLFpvZERhdGU6SG4sWm9kRGVmYXVsdDpJcixab2REaXNjcmltaW5hdGVkVW5pb246Z3IsWm9kRTE2NDpxbixab2RFbWFpbDpTbixab2RFbW9qaTpUbixab2RFbnVtOnR0LFpvZEVycm9yOkVoLFpvZEV4YWN0T3B0aW9uYWw6Sm4sWm9kRmlsZTokcixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIFNvfSxab2RGdW5jdGlvbjpGcixab2RHVUlEOnpuLFpvZElCQU46aXIsWm9kSVB2NDpBbixab2RJUHY2OlJuLFpvZElTT0RhdGU6enQsWm9kSVNPRGF0ZVRpbWU6U3QsWm9kSVNPRHVyYXRpb246SXQsWm9kSVNPVGltZTpUdCxab2RJbnN0YW5jZU9mOkpyLFpvZEludGVyc2VjdGlvbjpicixab2RJc3N1ZUNvZGU6T2gsWm9kSldUOkRuLFpvZEtTVUlEOk9uLFpvZExhenk6RHIsWm9kTGl0ZXJhbDp3cixab2RNQUM6cnIsWm9kTWFwOl9yLFpvZE5hTjpacixab2ROYW5vSUQ6SW4sWm9kTmV2ZXI6cHIsWm9kTm9uT3B0aW9uYWw6S24sWm9kTnVsbDp1cixab2ROdWxsYWJsZTpUcixab2ROdW1iZXI6eHQsWm9kTnVtYmVyRm9ybWF0OkJlLFpvZE9iamVjdDpPdCxab2RPcHRpb25hbDpadCxab2RQaXBlOk50LFpvZFByZWZhdWx0OnhyLFpvZFByZXByb2Nlc3M6TnIsWm9kUHJvbWlzZTpVcixab2RSZWFkb25seTpqcixab2RSZWFsRXJyb3I6ZmUsWm9kUmVjb3JkOmV0LFpvZFNldDprcixab2RTdHJpbmc6JHQsWm9kU3RyaW5nRm9ybWF0OkwsWm9kU3VjY2VzczpPcixab2RTeW1ib2w6YXIsWm9kVGVtcGxhdGVMaXRlcmFsOnFyLFpvZFRyYW5zZm9ybTpTcixab2RUdXBsZTp2cixab2RUeXBlOkUsWm9kVUxJRDpDbixab2RVUkw6UHQsWm9kVVVJRDpJZSxab2RVbmRlZmluZWQ6Y3IsWm9kVW5pb246QXQsWm9kVW5rbm93bjpkcixab2RWb2lkOmhyLFpvZFhJRDpFbixab2RYb3I6bXIsX1pvZFN0cmluZzokbixfZGVmYXVsdDpQcixfZnVuY3Rpb246Z3QsYW55OkZuLGFycmF5OlAsYmFzZTY0OklhLGJhc2U2NHVybDpQYSxiaWdpbnQ6VWEsYm9vbGVhbjpELGNhdGNoOlJyLGNoZWNrOmxjLGNpZHJ2NDp6YSxjaWRydjY6VGEsY2xvbmU6Ryxjb2RlYzppYyxjb2VyY2U6VWgsY29tcGlsZTp2aSxjb25maWc6ZWUsY29yZTpQaCxjcmVkaXRDYXJkOkNhLGN1aWQ6YmEsY3VpZDI6dmEsY3VycmVuY3lDb2RlOk5hLGN1c3RvbTpIcixkYXRlOkphLGRlY29kZTplYSxkZWNvZGVBc3luYzpuYSxkZWVwUGFydGlhbDpNaCxkZWZhdWx0Om11LGRlc2NyaWJlOmRjLGRpc2NyaW1pbmF0ZWRVbmlvbjpCbixlMTY0OnhhLGVtYWlsOmFhLGVtb2ppOm1hLGVuY29kZTpYaSxlbmNvZGVBc3luYzp0YSxlbmRzV2l0aDptbixlbnVtOnJlLGV4YWN0T3B0aW9uYWw6enIsZmlsZTpuYyxmbGF0dGVuRXJyb3I6TG8sZmxvYXQzMjpNYSxmbG9hdDY0OnFhLGZvcm1hdEVycm9yOlVvLGZyb21KU09OU2NoZW1hOmpoLGZ1bmN0aW9uOmd0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246c2ksZ2V0RXJyb3JNYXA6UmgsZ2xvYmFsUmVnaXN0cnk6a2UsZ3Q6WmUsZ3RlOmJlLGd1aWQ6Y2EsaGFzaDpqYSxoZXg6WmEsaG9zdG5hbWU6UmEsaHR0cFVybDpmYSxpYmFuOkVhLGluY2x1ZGVzOmhuLGlucHV0OkRoLGluc3RhbmNlb2Y6aGMsaW50Okt0LGludDMyOkRhLGludDY0OkZhLGludGVyc2VjdGlvbjpSdCxpbnZlcnRDb2RlYzphYyxpcHY0OndhLGlwdjY6U2EsaXNvOmdjLGpzb246bWMsand0Ok9hLGtleW9mOkthLGtzdWlkOmthLGxhenk6THIsbGVuZ3RoOmt0LGxpdGVyYWw6Zixsb2NhbGVzOmRpLGxvb3NlT2JqZWN0Om9lLGxvb3NlUmVjb3JkOllhLGxvd2VyY2FzZTpkbixsdDpSZSxsdGU6Z2UsbWFjOiRhLG1hcDpYYSxtYXhMZW5ndGg6X3QsbWF4U2l6ZTpvdCxtZW1vaXplcjpXbyxtZXRhOnBjLG1pbWU6Ym4sbWluTGVuZ3RoOlVlLG1pblNpemU6TmUsbXVsdGlwbGVPZjpZZSxuYW46c2MsbmFub2lkOmdhLG5hdGl2ZUVudW06dGMsbmVnYXRpdmU6ZXIsbmV2ZXI6WGUsbm9ubmVnYXRpdmU6bnIsbm9ub3B0aW9uYWw6RXIsbm9ucG9zaXRpdmU6dHIsbm9ybWFsaXplOnZuLG51bGw6VW4sbnVsbGFibGU6bXQsbnVsbGlzaDpvYyxudW1iZXI6QyxvYmplY3Q6ZyxvcHRpb25hbDpCLG91dHB1dDpMaCxvdmVyd3JpdGU6Q2UscGFyc2U6V2kscGFyc2VBc3luYzpHaSxwYXJ0aWFsUmVjb3JkOlFhLHBpcGU6V3QscG9zaXRpdmU6WG8scHJlZmF1bHQ6Q3IscHJlcHJvY2VzczpXbixwcmV0dGlmeUVycm9yOlJzLHByb21pc2U6dWMscHJvcGVydGllczpnbixwcm9wZXJ0eTpvcixyZWFkb25seTpNcixyZWNvcmQ6UixyZWZpbmU6QnIscmVnZXg6bG4scmVnZXhlczpKbyxyZWdpc3RyeTpHbyxzYWZlRGVjb2RlOnJhLHNhZmVEZWNvZGVBc3luYzppYSxzYWZlRW5jb2RlOm9hLHNhZmVFbmNvZGVBc3luYzpzYSxzYWZlUGFyc2U6UWksc2FmZVBhcnNlQXN5bmM6WWksc2V0OmVjLHNldEVycm9yTWFwOkFoLHNpemU6eXQsc2x1Z2lmeTp3bixzdGFydHNXaXRoOmZuLHN0cmljdE9iamVjdDpXYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6QWEsc3RyaW5nYm9vbDpmYyxzdWNjZXNzOnJjLHN1cGVyUmVmaW5lOlZyLHN5bWJvbDpCYSx0ZW1wbGF0ZUxpdGVyYWw6Y2MsdG9KU09OU2NoZW1hOlZpLHRvTG93ZXJDYXNlOl9uLHRvVXBwZXJDYXNlOmtuLHRvWm9kOk9vLHRyYW5zZm9ybTpWbix0cmVlaWZ5RXJyb3I6QXMsdHJpbTp5bix0dXBsZTp5cix1aW50MzI6TGEsdWludDY0OkhhLHVsaWQ6eWEsdW5kZWZpbmVkOmZ0LHVuaW9uOk8sdW5rbm93bjpNLHVwcGVyY2FzZTpwbix1cmw6aGEsdXRpbDpDcyx1dWlkOnVhLHV1aWR2NDpsYSx1dWlkdjY6ZGEsdXVpZHY3OnBhLHZhbGlkYXRlOkhvLHZhbGlkYXRlQXN5bmM6Qm8sdm9pZDpWYSx3aXRoUGFyc2VyOnlpLHhpZDpfYSx4b3I6R2EsejptdX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxLZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixLcj0iMi4wIixYPUhyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLEZoPU8oW2goKSxDKCkuaW50KCldKSxIaD1oKCk7b2Uoe3R0bDpDKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6QygpLm9wdGlvbmFsKCl9KTtjb25zdCBKYj1nKHt0dGw6QygpLm9wdGlvbmFsKCl9KSxLYj1nKHt0YXNrSWQ6aCgpfSksYmM9b2Uoe3Byb2dyZXNzVG9rZW46Rmgub3B0aW9uYWwoKSxbS2VdOktiLm9wdGlvbmFsKCl9KSx5ZT1nKHtfbWV0YTpiYy5vcHRpb25hbCgpfSksR249eWUuZXh0ZW5kKHt0YXNrOkpiLm9wdGlvbmFsKCl9KSxXYj1lPT5Hbi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxzZT1nKHttZXRob2Q6aCgpLHBhcmFtczp5ZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxTZT1nKHtfbWV0YTpiYy5vcHRpb25hbCgpfSksemU9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6U2UubG9vc2UoKS5vcHRpb25hbCgpfSksaWU9b2Uoe19tZXRhOmJjLm9wdGlvbmFsKCl9KSxRbj1PKFtoKCksQygpLmludCgpXSksQmg9Zyh7anNvbnJwYzpmKEtyKSxpZDpRbiwuLi5zZS5zaGFwZX0pLnN0cmljdCgpLGd1PWU9PkJoLnNhZmVQYXJzZShlKS5zdWNjZXNzLFZoPWcoe2pzb25ycGM6ZihLciksLi4uemUuc2hhcGV9KS5zdHJpY3QoKSxHYj1lPT5WaC5zYWZlUGFyc2UoZSkuc3VjY2Vzcyx2Yz1nKHtqc29ucnBjOmYoS3IpLGlkOlFuLHJlc3VsdDppZX0pLnN0cmljdCgpLGhvPWU9PnZjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBVOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoVXx8KFU9e30pKTtjb25zdCB5Yz1nKHtqc29ucnBjOmYoS3IpLGlkOlFuLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpDKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpNKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksUWI9ZT0+eWMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsWWI9TyhbQmgsVmgsdmMseWNdKTtPKFt2Yyx5Y10pO2NvbnN0IF9jPWllLnN0cmljdCgpLFhiPVNlLmV4dGVuZCh7cmVxdWVzdElkOlFuLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSksa2M9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6WGJ9KSxldj1nKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOlAoaCgpKS5vcHRpb25hbCgpLHRoZW1lOnJlKFsibGlnaHQiLCJkYXJrIl0pLm9wdGlvbmFsKCl9KSxZbj1nKHtpY29uczpQKGV2KS5vcHRpb25hbCgpfSksYnQ9Zyh7bmFtZTpoKCksdGl0bGU6aCgpLm9wdGlvbmFsKCl9KSxXcj1idC5leHRlbmQoey4uLmJ0LnNoYXBlLC4uLlluLnNoYXBlLHZlcnNpb246aCgpLHdlYnNpdGVVcmw6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCl9KSx0dj1SdChnKHthcHBseURlZmF1bHRzOkQoKS5vcHRpb25hbCgpfSksUihoKCksTSgpKSksbnY9V24oZT0+ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MD97Zm9ybTp7fX06ZSxSdChnKHtmb3JtOnR2Lm9wdGlvbmFsKCksdXJsOlgub3B0aW9uYWwoKX0pLFIoaCgpLE0oKSkub3B0aW9uYWwoKSkpLG92PW9lKHtsaXN0Olgub3B0aW9uYWwoKSxjYW5jZWw6WC5vcHRpb25hbCgpLHJlcXVlc3RzOm9lKHtzYW1wbGluZzpvZSh7Y3JlYXRlTWVzc2FnZTpYLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOm9lKHtjcmVhdGU6WC5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxydj1vZSh7bGlzdDpYLm9wdGlvbmFsKCksY2FuY2VsOlgub3B0aW9uYWwoKSxyZXF1ZXN0czpvZSh7dG9vbHM6b2Uoe2NhbGw6WC5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxzdj1nKHtleHBlcmltZW50YWw6UihoKCksWCkub3B0aW9uYWwoKSxzYW1wbGluZzpnKHtjb250ZXh0Olgub3B0aW9uYWwoKSx0b29sczpYLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOm52Lm9wdGlvbmFsKCkscm9vdHM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOm92Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpSKGgoKSxYKS5vcHRpb25hbCgpfSksaXY9eWUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpzdixjbGllbnRJbmZvOldyfSksYXY9c2UuZXh0ZW5kKHttZXRob2Q6ZigiaW5pdGlhbGl6ZSIpLHBhcmFtczppdn0pLGN2PWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxYKS5vcHRpb25hbCgpLGxvZ2dpbmc6WC5vcHRpb25hbCgpLGNvbXBsZXRpb25zOlgub3B0aW9uYWwoKSxwcm9tcHRzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6Zyh7c3Vic2NyaWJlOkQoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6cnYub3B0aW9uYWwoKSxleHRlbnNpb25zOlIoaCgpLFgpLm9wdGlvbmFsKCl9KSx1dj1pZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOmN2LHNlcnZlckluZm86V3IsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksbHY9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczpTZS5vcHRpb25hbCgpfSksR3I9c2UuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczp5ZS5vcHRpb25hbCgpfSksZHY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOkIoQygpKSxtZXNzYWdlOkIoaCgpKX0pLHB2PWcoey4uLlNlLnNoYXBlLC4uLmR2LnNoYXBlLHByb2dyZXNzVG9rZW46Rmh9KSx3Yz16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOnB2fSksaHY9eWUuZXh0ZW5kKHtjdXJzb3I6SGgub3B0aW9uYWwoKX0pLFhuPXNlLmV4dGVuZCh7cGFyYW1zOmh2Lm9wdGlvbmFsKCl9KSxlbz1pZS5leHRlbmQoe25leHRDdXJzb3I6SGgub3B0aW9uYWwoKX0pLGZ2PXJlKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLHRvPWcoe3Rhc2tJZDpoKCksc3RhdHVzOmZ2LHR0bDpPKFtDKCksVW4oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOkIoQygpKSxzdGF0dXNNZXNzYWdlOkIoaCgpKX0pLCRjPWllLmV4dGVuZCh7dGFzazp0b30pLG12PVNlLm1lcmdlKHRvKSx6bz16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczptdn0pLFNjPXNlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczp5ZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLHpjPWllLm1lcmdlKHRvKSxUYz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6eWUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtpZS5sb29zZSgpO2NvbnN0IEljPVhuLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLFBjPWVvLmV4dGVuZCh7dGFza3M6UCh0byl9KSx4Yz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6eWUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxndj1pZS5tZXJnZSh0byksSmg9Zyh7dXJpOmgoKSxtaW1lVHlwZTpCKGgoKSksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksS2g9SmguZXh0ZW5kKHt0ZXh0OmgoKX0pLENjPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksV2g9SmguZXh0ZW5kKHtibG9iOkNjfSksbm89cmUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLHF0PWcoe2F1ZGllbmNlOlAobm8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6Wmgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxHaD1nKHsuLi5idC5zaGFwZSwuLi5Zbi5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxtaW1lVHlwZTpCKGgoKSksc2l6ZTpCKEMoKSksYW5ub3RhdGlvbnM6cXQub3B0aW9uYWwoKSxfbWV0YTpCKG9lKHt9KSl9KSxidj1nKHsuLi5idC5zaGFwZSwuLi5Zbi5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246QihoKCkpLG1pbWVUeXBlOkIoaCgpKSxhbm5vdGF0aW9uczpxdC5vcHRpb25hbCgpLF9tZXRhOkIob2Uoe30pKX0pLHZ2PVhuLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxRaD1lby5leHRlbmQoe3Jlc291cmNlczpQKEdoKX0pLHl2PVhuLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksX3Y9ZW8uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKGJ2KX0pLEVjPXllLmV4dGVuZCh7dXJpOmgoKX0pLGt2PUVjLHd2PXNlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOmt2fSksWWg9aWUuZXh0ZW5kKHtjb250ZW50czpQKE8oW0toLFdoXSkpfSksJHY9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlNlLm9wdGlvbmFsKCl9KSxTdj1FYyx6dj1zZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOlN2fSksVHY9RWMsSXY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOlR2fSksUHY9U2UuZXh0ZW5kKHt1cmk6aCgpfSkseHY9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpQdn0pLEN2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxyZXF1aXJlZDpCKEQoKSl9KSxFdj1nKHsuLi5idC5zaGFwZSwuLi5Zbi5zaGFwZSxkZXNjcmlwdGlvbjpCKGgoKSksYXJndW1lbnRzOkIoUChDdikpLF9tZXRhOkIob2Uoe30pKX0pLE92PVhuLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksQXY9ZW8uZXh0ZW5kKHtwcm9tcHRzOlAoRXYpfSksUnY9eWUuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6UihoKCksaCgpKS5vcHRpb25hbCgpfSksWnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6UnZ9KSxPYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpxdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLEFjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOkNjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpxdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLFJjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOkNjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpxdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLE52PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6UihoKCksTSgpKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxYaD1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6TyhbS2gsV2hdKSxhbm5vdGF0aW9uczpxdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLGVmPUdoLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxvbz1PKFtPYyxBYyxSYyxlZixYaF0pLGp2PWcoe3JvbGU6bm8sY29udGVudDpvb30pLE12PWllLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChqdil9KSxxdj16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlNlLm9wdGlvbmFsKCl9KSxEdj1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6RCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkQoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkQoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6RCgpLm9wdGlvbmFsKCl9KSxMdj1nKHt0YXNrU3VwcG9ydDpyZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLFpjPWcoey4uLmJ0LnNoYXBlLC4uLlluLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpSKGgoKSxYKS5vcHRpb25hbCgpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoTSgpKSxvdXRwdXRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLFgpLm9wdGlvbmFsKCkscmVxdWlyZWQ6UChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChNKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6RHYub3B0aW9uYWwoKSxleGVjdXRpb246THYub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSx0Zj1Ybi5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9saXN0Iil9KSxVdj1lby5leHRlbmQoe3Rvb2xzOlAoWmMpfSksUXI9aWUuZXh0ZW5kKHtjb250ZW50OlAob28pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OlIoaCgpLE0oKSkub3B0aW9uYWwoKSxpc0Vycm9yOkQoKS5vcHRpb25hbCgpfSk7UXIub3IoaWUuZXh0ZW5kKHt0b29sUmVzdWx0Ok0oKX0pKTtjb25zdCBGdj1Hbi5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxuZj1zZS5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9jYWxsIikscGFyYW1zOkZ2fSksSHY9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6U2Uub3B0aW9uYWwoKX0pO2coe2F1dG9SZWZyZXNoOkQoKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOkMoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IG9mPXJlKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxCdj15ZS5leHRlbmQoe2xldmVsOm9mfSksVnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczpCdn0pLEp2PVNlLmV4dGVuZCh7bGV2ZWw6b2YsbG9nZ2VyOmgoKS5vcHRpb25hbCgpLGRhdGE6TSgpfSksS3Y9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOkp2fSksV3Y9Zyh7bmFtZTpoKCkub3B0aW9uYWwoKX0pLEd2PWcoe2hpbnRzOlAoV3YpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSxRdj1nKHttb2RlOnJlKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksWXY9Zyh7dHlwZTpmKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpoKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6UChvbykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6RCgpLm9wdGlvbmFsKCksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksWHY9Qm4oInR5cGUiLFtPYyxBYyxSY10pLFRvPUJuKCJ0eXBlIixbT2MsQWMsUmMsTnYsWXZdKSxleT1nKHtyb2xlOm5vLGNvbnRlbnQ6TyhbVG8sUChUbyldKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSx0eT1Hbi5leHRlbmQoe21lc3NhZ2VzOlAoZXkpLG1vZGVsUHJlZmVyZW5jZXM6R3Yub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6aCgpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6cmUoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpDKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6QygpLmludCgpLHN0b3BTZXF1ZW5jZXM6UChoKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6WC5vcHRpb25hbCgpLHRvb2xzOlAoWmMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpRdi5vcHRpb25hbCgpfSksbnk9c2UuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczp0eX0pLHJmPWllLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246QihyZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTpubyxjb250ZW50Olh2fSksc2Y9aWUuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpCKHJlKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTpubyxjb250ZW50Ok8oW1RvLFAoVG8pXSl9KSxveT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkQoKS5vcHRpb25hbCgpfSkscnk9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDpyZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxzeT1nKHt0eXBlOnJlKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLGl5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLGF5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxjeT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksdXk9TyhbaXksYXldKSxseT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSxkeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLHB5PU8oW2x5LGR5XSksaHk9TyhbY3ksdXkscHldKSxmeT1PKFtoeSxveSxyeSxzeV0pLG15PUduLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLGZ5KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksZ3k9R24uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSxieT1PKFtteSxneV0pLHZ5PXNlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpieX0pLHl5PVNlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxfeT16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOnl5fSksa3k9aWUuZXh0ZW5kKHthY3Rpb246cmUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6V24oZT0+ZT09PW51bGw/dm9pZCAwOmUsUihoKCksTyhbaCgpLEMoKSxEKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSksd3k9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksJHk9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSxTeT15ZS5leHRlbmQoe3JlZjpPKFskeSx3eV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlIoaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSx6eT1zZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOlN5fSksVHk9aWUuZXh0ZW5kKHtjb21wbGV0aW9uOm9lKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOkIoQygpLmludCgpKSxoYXNNb3JlOkIoRCgpKX0pfSksSXk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxQeT1zZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOnllLm9wdGlvbmFsKCl9KSx4eT1pZS5leHRlbmQoe3Jvb3RzOlAoSXkpfSksQ3k9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6U2Uub3B0aW9uYWwoKX0pO08oW0dyLGF2LHp5LFZ2LFp2LE92LHZ2LHl2LHd2LHp2LEl2LG5mLHRmLFNjLFRjLEljLHhjXSk7Tyhba2Msd2MsbHYsQ3ksem9dKTtPKFtfYyxyZixzZixreSx4eSx6YyxQYywkY10pO08oW0dyLG55LHZ5LFB5LFNjLFRjLEljLHhjXSk7Tyhba2Msd2MsS3YseHYsJHYsSHYscXYsem8sX3ldKTtPKFtfYyx1dixUeSxNdixBdixRaCxfdixZaCxRcixVdix6YyxQYywkY10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PVUuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgRXkoci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgRXkgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihVLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gSmUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gYnUoZSl7Y29uc3Qgbj13YihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89JGIobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiB2dShlLHQpe2NvbnN0IG49eGgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBPeT02ZTQ7Y2xhc3MgQXl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoa2Msbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKHdjLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihHcixuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFNjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFRjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgYTtmb3IoO2E9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoYS50eXBlPT09InJlc3BvbnNlInx8YS50eXBlPT09ImVycm9yIil7Y29uc3QgYz1hLm1lc3NhZ2UsbD1jLmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxhLnR5cGU9PT0icmVzcG9uc2UiKWQoYyk7ZWxzZXtjb25zdCBtPWMsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09YS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGEubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFpKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighSmUoaS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoSmUoaS5zdGF0dXMpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uYSxfbWV0YTp7Li4uYS5fbWV0YSxbS2VdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihJYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHhjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKEplKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihVLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKFUuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGkpPT57cj8uKHMsaSksaG8ocyl8fFFiKHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6Z3Uocyk/dGhpcy5fb25yZXF1ZXN0KHMsaSk6R2Iocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoVS5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bS2VdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOlUuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGkpO2NvbnN0IGE9V2IodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLGM9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDppLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooVS5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IF89di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBfJiZjJiZhd2FpdCBjLnVwZGF0ZVRhc2tTdGF0dXMoXywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6Yyx0YXNrUmVxdWVzdGVkVHRsOmE/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57YSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpVLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWkmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgaT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxhPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihhJiZpJiZhLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaChjKXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxpKGMpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksaG8odCkpbyh0KTtlbHNle2NvbnN0IGk9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oaSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKGhvKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgaT10LnJlc3VsdDtpZihpLnRhc2smJnR5cGVvZiBpLnRhc2s9PSJvYmplY3QiKXtjb25zdCBhPWkudGFzazt0eXBlb2YgYS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGEudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksaG8odCkpcih0KTtlbHNle2NvbnN0IGk9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoaSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIGo/aTpuZXcgaihVLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBpPWF3YWl0IHRoaXMucmVxdWVzdCh0LCRjLG8pO2lmKGkudGFzaylzPWkudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6aS50YXNrfTtlbHNlIHRocm93IG5ldyBqKFUuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGE9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazphfSxKZShhLnN0YXR1cykpe2Euc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06YS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9OmEuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGEuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IGM9YS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLGMpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2Ygaj9pOm5ldyBqKFUuSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmksdGFzazphLHJlbGF0ZWRUYXNrOmN9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09VD0+e2QoVCl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksYSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goVCl7bShUKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksYSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOmF9KSxjJiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtLZV06Y319KTtjb25zdCBfPVQ9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKFQpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2gobmU9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7bmV9YCkpKTtjb25zdCBLPVQgaW5zdGFuY2VvZiBqP1Q6bmV3IGooVS5SZXF1ZXN0VGltZW91dCxTdHJpbmcoVCkpO2QoSyl9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsVD0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKFQgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChUKTt0cnl7Y29uc3QgSz14aChuLFQucmVzdWx0KTtLLnN1Y2Nlc3M/bChLLmRhdGEpOmQoSy5lcnJvcil9Y2F0Y2goSyl7ZChLKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntfKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IGs9bz8udGltZW91dD8/T3ksJD0oKT0+XyhqLmZyb21FcnJvcihVLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6a30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYixrLG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBaPWM/LnRhc2tJZDtpZihaKXtjb25zdCBUPUs9Pntjb25zdCBuZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTtuZT9uZShLKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsVCksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKFose3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEs9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEspfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKFQ9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKFQpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSx6YyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sUGMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sZ3Ysbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBhPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTphLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW0tlXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYSxuKS5jYXRjaChjPT50aGlzLl9vbmVycm9yKGMpKX0pO3JldHVybn1sZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPWJ1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGk9dnUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oaSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPWJ1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPXZ1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZndShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxpPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2k/KGkobmV3IGooVS5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgaT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoaSkscyhuZXcgaihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxpKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxpLG4pO2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoYSl7Y29uc3QgYz16by5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmF9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihjKSxKZShhLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxpKT0+e2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWEpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihKZShhLnN0YXR1cykpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2Euc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGksbik7Y29uc3QgYz1hd2FpdCBvLmdldFRhc2socixuKTtpZihjKXtjb25zdCBsPXpvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6Y30pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLEplKGMuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIHl1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBSeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBpPW5bcl07eXUoaSkmJnl1KHMpP25bcl09ey4uLmksLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIFp5IGV4dGVuZHMgQXl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8saT0+e2xldCBhPWkucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsYSkscy5vbkhhbmRsZXI/LihhKTtmb3IobGV0IGMgb2ZbLi4ucy5saXN0ZW5lcnNdKWMoYSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIE55PSIyMDI2LTAxLTI2IixqeT0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIE15e2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1ZYi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PWp5JiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgcXk9TyhbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksR3Q9TyhbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLER5PU8oW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLEx5PVIoRHkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksTyhbaCgpLGZ0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIFV5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLEZ5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxIeT1nKHtpc0Vycm9yOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIE5jPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLGpjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBCeT1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksVnk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLEp5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxLeT1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLFd5PWcoe3ZhcmlhYmxlczpMeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOkt5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxHeT1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtSKGgoKSxNKCkpO3ZhciBfdT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIFF5PWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxSKGgoKSxGbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOmpjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpOYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpfdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6X3Uub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxZeT1nKHtleHBlcmltZW50YWw6UihoKCksUihoKCksRm4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAoR3QpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6TmMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOmpjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTpHdC5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBYeT1nKHttb2RlOkd0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxlXz1PKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UChlXykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpYZSgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6WGUoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChPKFtYaCxlZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAob28pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpOYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOmpjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIHRfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOlFyLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksYWY9Zyh7dG9vbEluZm86Zyh7aWQ6UW4ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOlpjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOnF5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6V3kub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOkd0Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChHdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOk8oW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0Ok8oW0MoKSxmdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKE8oW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOk8oW0MoKSxmdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06TyhbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLG5fPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOmFmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAob28pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpSKGgoKSxNKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86V3IuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOll5LmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBvXz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOldyLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6UXkuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6YWYuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCkscl89e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIGt1KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0ocl8pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IE9mKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5WYiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiB3dShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGk9cy5wYXRoPy5tYXAoYT0+dHlwZW9mIGE9PSJvYmplY3QiP2Eua2V5OmEpLmpvaW4oIi4iKTtyZXR1cm4gaT9gJHtpfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gc18oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gaV8oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIGFfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgTWMgZXh0ZW5kcyBaeXtfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6QnksdG9vbGlucHV0cGFydGlhbDpWeSx0b29scmVzdWx0OnRfLHRvb2xjYW5jZWxsZWQ6SnksaG9zdGNvbnRleHRjaGFuZ2VkOm5ffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFNYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8ZWUoe2ppdGxlc3M6ITB9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEdyLHI9Pihjb25zb2xlLmxvZygiUmVjZWl2ZWQgcGluZzoiLHIucGFyYW1zKSx7fSkpLHRoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHZvaWQgMCl9cmVnaXN0ZXJDYXBhYmlsaXRpZXModCl7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBjYXBhYmlsaXRpZXMgYWZ0ZXIgdHJhbnNwb3J0IGlzIGVzdGFibGlzaGVkIik7dGhpcy5fY2FwYWJpbGl0aWVzPVJ5KHRoaXMuX2NhcGFiaWxpdGllcyx0KX1yZWdpc3RlclRvb2wodCxuLG8pe2lmKHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XSl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGApO2xldCByPXRoaXMscz0oKT0+e3IuX2luaXRpYWxpemVkU2VudCYmci5fY2FwYWJpbGl0aWVzLnRvb2xzPy5saXN0Q2hhbmdlZCYmci5zZW5kVG9vbExpc3RDaGFuZ2VkKCl9LGk9bi5pbnB1dFNjaGVtYSE9PXZvaWQgMCxhPXt0aXRsZTpuLnRpdGxlLGRlc2NyaXB0aW9uOm4uZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6bi5pbnB1dFNjaGVtYSxvdXRwdXRTY2hlbWE6bi5vdXRwdXRTY2hlbWEsYW5ub3RhdGlvbnM6bi5hbm5vdGF0aW9ucyxfbWV0YTpuLl9tZXRhLGVuYWJsZWQ6ITAsZW5hYmxlKCl7dGhpcy5lbmFibGVkPSEwLHMoKX0sZGlzYWJsZSgpe3RoaXMuZW5hYmxlZD0hMSxzKCl9LHVwZGF0ZShjKXtPYmplY3QuYXNzaWduKHRoaXMsYykscygpfSxyZW1vdmUoKXtyLl9yZWdpc3RlcmVkVG9vbHNbdF09PT1hJiYoZGVsZXRlIHIuX3JlZ2lzdGVyZWRUb29sc1t0XSxzKCkpfSxoYW5kbGVyOmFzeW5jKGMsbCk9PntpZighYS5lbmFibGVkKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgZGlzYWJsZWRgKTtsZXQgZDtpZihpKXtsZXQgbT1hLmlucHV0U2NoZW1hLGI9bT9hd2FpdCB3dShtLGM/P3t9LGBJbnZhbGlkIGlucHV0IGZvciB0b29sICR7dH06IGApOmM/P3t9O2Q9YXdhaXQgbyhiLGwpfWVsc2UgZD1hd2FpdCBvKGwpO3JldHVybiBhLm91dHB1dFNjaGVtYSYmIWQuaXNFcnJvciYmKGQuc3RydWN0dXJlZENvbnRlbnQ9YXdhaXQgd3UoYS5vdXRwdXRTY2hlbWEsZC5zdHJ1Y3R1cmVkQ29udGVudCxgSW52YWxpZCBvdXRwdXQgZm9yIHRvb2wgJHt0fTogYCkpLGR9fTtyZXR1cm4gdGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdPWEsIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyYmIXRoaXMudHJhbnNwb3J0JiZ0aGlzLnJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHt0b29sczp7bGlzdENoYW5nZWQ6ITB9fSksdGhpcy5lbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpLHMoKSxhfV90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMTtlbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpe3RoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkfHwodGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vbmNhbGx0b29sPWFzeW5jKHQsbik9PntsZXQgbz10aGlzLl9yZWdpc3RlcmVkVG9vbHNbdC5uYW1lXTtpZighbyl0aHJvdyBFcnJvcihgVG9vbCAke3QubmFtZX0gbm90IGZvdW5kYCk7cmV0dXJuIG8uaGFuZGxlcih0LmFyZ3VtZW50cyxuKX0sdGhpcy5vbmxpc3R0b29scz1hc3luYyh0LG4pPT4oe3Rvb2xzOmF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHRoaXMuX3JlZ2lzdGVyZWRUb29scykuZmlsdGVyKChbbyxyXSk9PnIuZW5hYmxlZCkubWFwKGFzeW5jKFtvLHJdKT0+e2xldCBzPXtuYW1lOm8sdGl0bGU6ci50aXRsZSxkZXNjcmlwdGlvbjpyLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOnIuaW5wdXRTY2hlbWE/YXdhaXQga3Uoci5pbnB1dFNjaGVtYSwiaW5wdXQiKTp7dHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnt9fX07cmV0dXJuIHIub3V0cHV0U2NoZW1hJiYocy5vdXRwdXRTY2hlbWE9YXdhaXQga3Uoci5vdXRwdXRTY2hlbWEsIm91dHB1dCIpKSxyLmFubm90YXRpb25zJiYocy5hbm5vdGF0aW9ucz1yLmFubm90YXRpb25zKSxyLl9tZXRhJiYocy5fbWV0YT1yLl9tZXRhKSxzfSkpfSkpfWFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQodD17fSl7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRUb29sTGlzdENoYW5nZWQiKSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIscGFyYW1zOnR9KX1nZXRIb3N0Q2FwYWJpbGl0aWVzKCl7cmV0dXJuIHRoaXMuX2hvc3RDYXBhYmlsaXRpZXN9Z2V0SG9zdFZlcnNpb24oKXtyZXR1cm4gdGhpcy5faG9zdEluZm99Z2V0SG9zdENvbnRleHQoKXtyZXR1cm4gdGhpcy5faG9zdENvbnRleHR9Z2V0IG9udG9vbGlucHV0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiKX1zZXQgb250b29saW5wdXQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIsdCl9Z2V0IG9udG9vbGlucHV0cGFydGlhbCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIpfXNldCBvbnRvb2xpbnB1dHBhcnRpYWwodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiLHQpfWdldCBvbnRvb2xyZXN1bHQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiKX1zZXQgb250b29scmVzdWx0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iix0KX1nZXQgb250b29sY2FuY2VsbGVkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIil9c2V0IG9udG9vbGNhbmNlbGxlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIsdCl9Z2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiKX1zZXQgb25ob3N0Y29udGV4dGNoYW5nZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdCl9X29udGVhcmRvd247Z2V0IG9udGVhcmRvd24oKXtyZXR1cm4gdGhpcy5fb250ZWFyZG93bn1zZXQgb250ZWFyZG93bih0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9udGVhcmRvd24iLHRoaXMuX29udGVhcmRvd24sdCksdGhpcy5fb250ZWFyZG93bj10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKEd5LChuLG8pPT57aWYoIXRoaXMuX29udGVhcmRvd24pdGhyb3cgRXJyb3IoIk5vIG9udGVhcmRvd24gaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb250ZWFyZG93bihuLnBhcmFtcyxvKX0pfV9vbmNhbGx0b29sO2dldCBvbmNhbGx0b29sKCl7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2x9c2V0IG9uY2FsbHRvb2wodCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmNhbGx0b29sIix0aGlzLl9vbmNhbGx0b29sLHQpLHRoaXMuX29uY2FsbHRvb2w9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihuZiwobixvKT0+e2lmKCF0aGlzLl9vbmNhbGx0b29sKXRocm93IEVycm9yKCJObyBvbmNhbGx0b29sIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2wobi5wYXJhbXMsbyl9KX1fb25saXN0dG9vbHM7Z2V0IG9ubGlzdHRvb2xzKCl7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzfXNldCBvbmxpc3R0b29scyh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9ubGlzdHRvb2xzIix0aGlzLl9vbmxpc3R0b29scyx0KSx0aGlzLl9vbmxpc3R0b29scz10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKHRmLChuLG8pPT57aWYoIXRoaXMuX29ubGlzdHRvb2xzKXRocm93IEVycm9yKCJObyBvbmxpc3R0b29scyBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmxpc3R0b29scyhuLnBhcmFtcyxvKX0pfWFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodCl7c3dpdGNoKHQpe2Nhc2Uic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSI6aWYoIXRoaXMuX2hvc3RDYXBhYmlsaXRpZXM/LnNhbXBsaW5nKXRocm93IEVycm9yKGBIb3N0IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke3R9KWApO2JyZWFrfX1hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkodCl7c3dpdGNoKHQpe2Nhc2UidG9vbHMvY2FsbCI6Y2FzZSJ0b29scy9saXN0IjppZighdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKXRocm93IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhcGFiaWxpdHkgKHJlcXVpcmVkIGZvciAke3R9KWApO3JldHVybjtjYXNlInBpbmciOmNhc2UidWkvcmVzb3VyY2UtdGVhcmRvd24iOnJldHVybjtkZWZhdWx0OnRocm93IEVycm9yKGBObyBoYW5kbGVyIGZvciBtZXRob2QgJHt0fSByZWdpc3RlcmVkYCl9fWFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodCl7fWFzc2VydFRhc2tDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFzayBoYW5kbGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzeW5jIGNhbGxTZXJ2ZXJUb29sKHQsbil7aWYodGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNhbGxTZXJ2ZXJUb29sIiksdHlwZW9mIHQ9PSJzdHJpbmciKXRocm93IEVycm9yKGBjYWxsU2VydmVyVG9vbCgpIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgYnV0IHJlY2VpdmVkIGEgc3RyaW5nICgiJHt0fSIpLiBEaWQgeW91IG1lYW46IGNhbGxTZXJ2ZXJUb29sKHsgbmFtZTogIiR7dH0iLCBhcmd1bWVudHM6IHsgLi4uIH0gfSk/YCk7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0b29scy9jYWxsIixwYXJhbXM6dH0sUXIse29ucHJvZ3Jlc3M6KCk9Pnt9LHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6ITAsLi4ubn0pfWFzeW5jIHJlYWRTZXJ2ZXJSZXNvdXJjZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVhZFNlcnZlclJlc291cmNlIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9yZWFkIixwYXJhbXM6dH0sWWgsbil9YXN5bmMgbGlzdFNlcnZlclJlc291cmNlcyh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgibGlzdFNlcnZlclJlc291cmNlcyIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvbGlzdCIscGFyYW1zOnR9LFFoLG4pfWFzeW5jIGNyZWF0ZVNhbXBsaW5nTWVzc2FnZSh0LG4pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjcmVhdGVTYW1wbGluZ01lc3NhZ2UiKTtsZXQgbz10LnRvb2xzP3NmOnJmO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIscGFyYW1zOnR9LG8sbil9c2VuZE1lc3NhZ2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRNZXNzYWdlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL21lc3NhZ2UiLHBhcmFtczp0fSxIeSxuKX1zZW5kTG9nKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL21lc3NhZ2UiLHBhcmFtczp0fSl9dXBkYXRlTW9kZWxDb250ZXh0KHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJ1cGRhdGVNb2RlbENvbnRleHQiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiLHBhcmFtczp0fSxfYyxuKX1vcGVuTGluayh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgib3BlbkxpbmsiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvb3Blbi1saW5rIixwYXJhbXM6dH0sVXksbil9c2VuZE9wZW5MaW5rPXRoaXMub3Blbkxpbms7ZG93bmxvYWRGaWxlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJkb3dubG9hZEZpbGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvZG93bmxvYWQtZmlsZSIscGFyYW1zOnR9LEZ5LG4pfXJlcXVlc3RUZWFyZG93bih0PXt9KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIixwYXJhbXM6dH0pfXJlcXVlc3REaXNwbGF5TW9kZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVxdWVzdERpc3BsYXlNb2RlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIixwYXJhbXM6dH0sWHksbil9c2VuZFNpemVDaGFuZ2VkKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIscGFyYW1zOnR9KX1zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpe2xldCB0PSExLG49MCxvPTAscj0oKT0+e3R8fCh0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3Q9ITE7bGV0IGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9aS5zdHlsZS5oZWlnaHQ7aS5zdHlsZS5oZWlnaHQ9Im1heC1jb250ZW50IjtsZXQgYz1NYXRoLmNlaWwoaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO2kuc3R5bGUuaGVpZ2h0PWE7bGV0IGw9TWF0aC5jZWlsKHdpbmRvdy5pbm5lcldpZHRoKTsobCE9PW58fGMhPT1vKSYmKG49bCxvPWMsdGhpcy5zZW5kU2l6ZUNoYW5nZWQoe3dpZHRoOmwsaGVpZ2h0OmN9KSl9KSl9O3IoKTtsZXQgcz1uZXcgUmVzaXplT2JzZXJ2ZXIocik7cmV0dXJuIHMub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHMub2JzZXJ2ZShkb2N1bWVudC5ib2R5KSwoKT0+cy5kaXNjb25uZWN0KCl9YXN5bmMgY29ubmVjdCh0PW5ldyBNeSh3aW5kb3cucGFyZW50LHdpbmRvdy5wYXJlbnQpLG4pe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJBcHAgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyBhZ2Fpbi4iKTt0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITEsYXdhaXQgc3VwZXIuY29ubmVjdCh0KTt0cnl7bGV0IG89YXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2luaXRpYWxpemUiLHBhcmFtczp7YXBwQ2FwYWJpbGl0aWVzOnRoaXMuX2NhcGFiaWxpdGllcyxhcHBJbmZvOnRoaXMuX2FwcEluZm8scHJvdG9jb2xWZXJzaW9uOk55fX0sb18sbik7aWYobz09PXZvaWQgMCl0aHJvdyBFcnJvcihgU2VydmVyIHNlbnQgaW52YWxpZCBpbml0aWFsaXplIHJlc3VsdDogJHtvfWApO3RoaXMuX2hvc3RDYXBhYmlsaXRpZXM9by5ob3N0Q2FwYWJpbGl0aWVzLHRoaXMuX2hvc3RJbmZvPW8uaG9zdEluZm8sdGhpcy5faG9zdENvbnRleHQ9by5ob3N0Q29udGV4dCxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIn0pLHRoaXMuX2luaXRpYWxpemVkU2VudD0hMCx0aGlzLm9wdGlvbnM/LmF1dG9SZXNpemUmJnRoaXMuc2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsb3NlKCksb319fWxldCAkdT0iIjtjb25zdCBjZj0oZSx0LG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT0+e2lmKCFlKXJldHVybjsoZS50aGVtZT09PSJsaWdodCJ8fGUudGhlbWU9PT0iZGFyayIpJiZ0LmFwcGx5RG9jdW1lbnRUaGVtZShlLnRoZW1lKTtjb25zdCBvPWUuc3R5bGVzPy52YXJpYWJsZXM7byYmdHlwZW9mIG89PSJvYmplY3QiJiZ0LmFwcGx5SG9zdFN0eWxlVmFyaWFibGVzKG8pO2NvbnN0IHI9ZS5zdHlsZXM/LmNzcz8uZm9udHM7dHlwZW9mIHI9PSJzdHJpbmciJiZyJiZyIT09JHUmJih0LmFwcGx5SG9zdEZvbnRzKHIpLCR1PXIpO2NvbnN0IHM9ZS5zYWZlQXJlYUluc2V0cztpZihzKWZvcihjb25zdCBpIG9mWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSl7Y29uc3QgYT1OdW1iZXIoc1tpXT8/MCk7bi5zdHlsZS5zZXRQcm9wZXJ0eShgLS1pbnNldC0ke2l9YCxgJHtOdW1iZXIuaXNGaW5pdGUoYSkmJmE+MD9hOjB9cHhgKX19LGplPW5ldyBNYyh7bmFtZToiaG90ZWwtc3RvcmVmcm9udCIsdmVyc2lvbjoiMS4wLjAifSx7b3BlbkxpbmtzOnt9fSksdWY9e2FwcGx5RG9jdW1lbnRUaGVtZTpzXyxhcHBseUhvc3RTdHlsZVZhcmlhYmxlczppXyxhcHBseUhvc3RGb250czphX30sbWU9ZT0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksdT1lPT5TdHJpbmcoZT8/IiIpLnJlcGxhY2UoL1smPD4iJ10vZyx0PT50PT09IiYiPyImYW1wOyI6dD09PSI8Ij8iJmx0OyI6dD09PSI+Ij8iJmd0OyI6dD09PSciJz8iJnF1b3Q7IjoiJiMzOTsiKTtsZXQgY3Q9IiIsaXM9IiIsbGY9e30sZGY9ITEscGY9IiIsej17Y2hlY2tJbjoiIixjaGVja091dDoiIixndWVzdHM6Mn0sUT0xO2NvbnN0IFN1PTU7bGV0IFk9bnVsbCx2dD1bXSxXZT0iIixwZT1bXSxWPW51bGwsSW89MDtjb25zdCBjXz1uZXcgU2V0KFsiZm9yZ2V0UHJlZmVyZW5jZXMiLCJhZGRUb1RyaXAiLCJjbGVhclRyaXAiLCJyZXF1ZXN0Qm9va2luZyIsImNhbmNlbEJvb2tpbmciLCJjaGFuZ2VCb29raW5nIiwic2lnbkluIiwic2lnbk91dCJdKSxfcz1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO3JldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP2Bob3RlbDoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGV4dHJhczpib29raW5nOiR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgZXh0cmFzOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzInx8dD09PSJwb2xpY3ktbWlzc2luZyI/YHBvbGljeToke2UuaG90ZWw/LmlkPz8iIn06JHtlLnRvcGljPz8iIn1gOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciP2BjYW5jZWw6JHtlLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJjaGFuZ2UtcHJldmlldyI/YGNoYW5nZToke2UuY29uZmlybWF0aW9uQ29kZT8/ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iZGVzdGluYXRpb25zIj9gZGVzdGluYXRpb25zOiR7ZS5zY29wZT8ubmFtZT8/IiJ9YDp0PT09ImhvdGVscyJ8fHQ9PT0ibm8taG90ZWxzIj9gaG90ZWxzOiR7ZS5hc2s/LmNpdHk/PyIifToke2UuYXNrPy5xdWVyeT8/ZS5xdWVyeT8/IiJ9YDp0fSxtbz1lPT57IVZ8fGxfLmhhcyhTdHJpbmcoVi52aWV3KSl8fF9zKGUpIT09X3MoVikmJihwZT1bLi4ucGUse3BheWxvYWQ6VixsYWJlbDpkXyhWKSx2ZXJzaW9uOklvfV0uc2xpY2UoLTYpKX0sdV89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKSxuPWU/LnN0YXk/LmNoZWNrSW4/e2NoZWNrSW46ZS5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6ZS5zdGF5LmNoZWNrT3V0LGd1ZXN0czplLnN0YXkuZ3Vlc3RzPz8yfTp7fTtpZih0PT09InRyaXAiKXJldHVybntrZXk6InZpZXdUcmlwIixhcmdzOnt9fTtpZih0PT09ImJvb2tpbmdzIilyZXR1cm57a2V5OiJsaXN0Qm9va2luZ3MiLGFyZ3M6e319O2lmKCh0PT09ImhvdGVscyJ8fHQ9PT0iZGVzdGluYXRpb25zInx8dD09PSJuby1ob3RlbHMiJiZlLmFzaykmJmUuYXNrKXJldHVybntrZXk6Imxpc3RIb3RlbHMiLGFyZ3M6ey4uLmUuYXNrfX07aWYodD09PSJjb21wYXJpc29uIiYmQXJyYXkuaXNBcnJheShlLmNvbHVtbnMpKXJldHVybntrZXk6ImNvbXBhcmUiLGFyZ3M6ey4uLm4sLi4uZS50aXRsZT97dGl0bGU6ZS50aXRsZX06e30sLi4uZS5yZWNvbW1lbmRlZD97cmVjb21tZW5kZWQ6ZS5yZWNvbW1lbmRlZH06e30sZW50cmllczplLmNvbHVtbnMubWFwKG89Pih7aG90ZWw6by5ob3RlbD8uaWQsLi4uby5iZXN0Rm9yP3tiZXN0Rm9yOm8uYmVzdEZvcn06e30sLi4uby5wcm9zPy5sZW5ndGg/e3Byb3M6by5wcm9zfTp7fSwuLi5vLmNvbnM/Lmxlbmd0aD97Y29uczpvLmNvbnN9Ont9fSkpfX07aWYoKHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zIikmJmUuaG90ZWw/LmlkKXJldHVybntrZXk6ImdldEhvdGVsIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm4sLi4uZS5yb29tc193YW50ZWQ/e3Jvb21zOmUucm9vbXNfd2FudGVkfTp7fX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5mb3JCb29raW5nKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2Jvb2tpbmc6ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9fTtpZih0PT09ImV4dHJhcyImJmUuaG90ZWw/LmlkKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubn19O2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm57a2V5OiJpdGluZXJhcnkiLGFyZ3M6e3RpdGxlOmUudGl0bGUsLi4ubixkYXlzOihlLmRheXM/P1tdKS5tYXAobz0+KHtsYWJlbDpvLmxhYmVsLC4uLm8ubm90ZT97bm90ZTpvLm5vdGV9Ont9LGl0ZW1zOihvLml0ZW1zPz9bXSkubWFwKHI9PnIuaWQpfSkpfX19LHp1PWU9PntwZT1wZS5maWx0ZXIodD0+IWUuaW5jbHVkZXMoU3RyaW5nKHQucGF5bG9hZD8udmlldykpKX0sbF89bmV3IFNldChbImZpbmQtYm9va2luZyIsImJvb2tpbmciLCJjYW5jZWxsZWQiLCJjaGFuZ2VkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiLCJtZW1iZXItc2lnbi1pbiIsIm1lbWJlci1ub3QtZm91bmQiXSksZF89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJuby1ob3RlbHMiKXJldHVybiJ0aGUgc2VhcmNoIjtpZih0PT09ImRlc3RpbmF0aW9ucyIpcmV0dXJuIGUuc2NvcGU/Lm5hbWU/U3RyaW5nKGUuc2NvcGUubmFtZSk6ImFsbCBkZXN0aW5hdGlvbnMiO2lmKHQ9PT0iaG90ZWxzIil7aWYoZS5hc2s/LmNpdHkpcmV0dXJuIFN0cmluZyhlLmFzay5jaXR5KTtjb25zdCBuPVsuLi5uZXcgU2V0KChlLmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby5jaXR5KSkpXTtyZXR1cm4gbi5sZW5ndGg9PT0xP1N0cmluZyhuWzBdKTpgJHtlLnRvdGFsPz8wfSBob3RlbHNgfXJldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIik6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/InRoZSBjYW5jZWxsYXRpb24iOnQ9PT0iY2hhbmdlLXByZXZpZXciPyJ0aGUgY2hhbmdlIjp0PT09Im1lbWJlciI/InlvdXIgbWVtYmVyc2hpcCI6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gYWRkLW9ucyBmb3IgJHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmAke1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIil9IGFkZC1vbnNgOnQ9PT0idHJpcCI/InRoZSB0cmlwIjp0PT09ImJvb2tpbmdzIj8ieW91ciBib29raW5ncyI6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzIj8idGhlIHBvbGljaWVzIjoiYmFjayJ9LGhmPSgpPT57Y29uc3QgZT1tZSgiYmFja2J0biIpLHQ9cGUuYXQoLTEpO2UuaGlkZGVuPSF0LHQmJihlLnRleHRDb250ZW50PWDigLkgJHt0LmxhYmVsfWApfTtsZXQgSHQ9IiIsa3M9IiIsUXQ9MCxxYz0hMTtjb25zdCBmZj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKGtzPXQudHJpcElkKSxRdD1OdW1iZXIodC5jb3VudD8/MCksQXJyYXkuaXNBcnJheSh0LmxpbmVzKSYmKHZ0PXQubGluZXMscWM9ITApKX0scF89ZT0+a3M/ey4uLmUsdHJpcDprc306ZSxoXz1lPT5sZltlXT8/IiI7bGV0IER0PSExO2NvbnN0IFR1PWU9PntEdD1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfTtsZXQgUG89MCxtZj0iIixnZj0iIjtjb25zdCBxPShlLHQ9e30sbj17fSk9Pntjb25zdCBvPWhfKGUpO2lmKCFvKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYG5vIHRvb2wgZm9yICR7ZX1gKSk7aWYoRHQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtUdSghMCk7Y29uc3Qgcj1QbztyZXR1cm4gamUuY2FsbFNlcnZlclRvb2woe25hbWU6byxhcmd1bWVudHM6cF8odCl9KS5maW5hbGx5KCgpPT5UdSghMSkpLnRoZW4ocz0+e2ZmKHM/Ll9tZXRhKTtjb25zdCBpPXM/LnN0cnVjdHVyZWRDb250ZW50LGE9aSYmbi5mb2xkP24uZm9sZChpKTppLGM9Y18uaGFzKGUpJiZhJiZhLnZpZXchPT0iZXJyb3IiO3JldHVybiByPT09UG8mJmE/KG1mPWk/SlNPTi5zdHJpbmdpZnkoaSk6IiIsZ2Y9SlNPTi5zdHJpbmdpZnkoYSksbi5wdXNoIT09ITEmJm1vKGEpLGMmJihJbys9MSksYS52aWV3PT09ImJvb2tpbmciJiYoenUoWyJ0cmlwIiwibmVlZHMtZGF0ZXMiLCJuZWVkcy1ndWVzdCJdKSx4ZT1udWxsKSwoYS52aWV3PT09ImNhbmNlbGxlZCJ8fGEudmlldz09PSJjaGFuZ2VkIikmJnp1KFsiY2FuY2VsbGF0aW9uLXByZXZpZXciLCJjaGFuZ2UtcHJldmlldyJdKSxHZShhKSk6YyYmKElvKz0xKSxmXyhzLG4ubm90ZSksc30pfSxmXz0oZSx0KT0+e2NvbnN0IG49KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG89Pm8/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyFufHwhamUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fGplLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6dD9gJHt0fSAke1N0cmluZyhuKX1gOlN0cmluZyhuKX1dfSkuY2F0Y2goKCk9Pnt9KX07bGV0IFlyPSExO2NvbnN0IG1fPSIoVGhlIGNhcmQgcHJpY2VkIGl0cyBvd24gZGVmYXVsdCBkYXRlcywgdG9uaWdodCwgdG8gc2hvdyB0aGUgcm9vbXM7IHRoZSBndWVzdCBoYXMgbm90IGNob3NlbiB0aGVtLikiLHJvPWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LHNvPWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxnXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLGJfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7Z199JHt1KGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHt1KGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLHRlPSgpPT5kZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke3UocGZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixZdD1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sd3M9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLFZlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake1l0KGUuY2hlY2tJbil9IOKAkyAke1l0KGUuY2hlY2tPdXQpfSDCtyAke3dzKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHt3cyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIix2Xz0oZSx0LG4pPT57Y29uc3Qgbz12dC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0seV89KGUsdCk9Pntjb25zdCBuPXZ0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSx4bz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHt1KG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHt1KG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7dShuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxiZj0oZSx0KT0+e2NvbnN0IG49dHx8dmYoKTtyZXR1cm4oIXouY2hlY2tJbnx8ei5jaGVja0luPG4pJiYoei5jaGVja0luPW4pLCghei5jaGVja091dHx8ei5jaGVja091dDw9ei5jaGVja0luKSYmKHouY2hlY2tPdXQ9RmUoei5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHt1KHouY2hlY2tJbil9IiBtaW49IiR7dShuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7dSh6LmNoZWNrT3V0KX0iIG1pbj0iJHt1KEZlKHouY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7dShRKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7dShYcigpKX08L3NwYW4+CiAgPC9kaXY+YH0sWHI9KCk9Pntjb25zdCBlPXouY2hlY2tJbiYmei5jaGVja091dD93cyh6LmNoZWNrSW4sei5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPVE+MT9gJHtRfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sRmU9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSx2Zj0oKT0+bmV3IERhdGUoRGF0ZS5ub3coKS1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqNmU0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLHlmPWU9Pntjb25zdCB0PVsuLi5lPy50b2RheT9bZS50b2RheS5taW4sZS50b2RheS5tYXhdOltdLC4uLihlPy5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8udG9kYXlUaGVyZT8/IiIpKV0uZmlsdGVyKG89Pi9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KG8pKS5zb3J0KCksbj12ZigpO3JldHVybnttaW46W3RbMF0/P24sbl0uc29ydCgpWzBdPz9uLHN0YXJ0OnQuYXQoLTEpPz9ufX0sX189ZT0+e2NvbnN0e21pbjp0LHN0YXJ0Om59PXlmKGUpOyghei5jaGVja0lufHx6LmNoZWNrSW48dCkmJih6LmNoZWNrSW49biksKCF6LmNoZWNrT3V0fHx6LmNoZWNrT3V0PD16LmNoZWNrSW4pJiYoei5jaGVja091dD1GZSh6LmNoZWNrSW4sMSkpO2NvbnN0IG89YDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHt1KHouY2hlY2tJbil9IiBtaW49IiR7dSh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHt1KHouY2hlY2tPdXQpfSIgbWluPSIke3UoRmUoei5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7dShRKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke2Uuc2NvcGU/IiI6JzxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kIj5TZWFyY2g8L2J1dHRvbj4nfQogICAgICA8L2Rpdj5gLHI9YDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgIDxsYWJlbCBjbGFzcz0id2hlcmUiPldoZXJlIHRvPGlucHV0IGlkPSJ3aGVyZSIgdHlwZT0ic2VhcmNoIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwiIGFyaWEtbGFiZWw9IldoZXJlIHRvIj48L2xhYmVsPgogICAgICAke299CiAgICA8L2Rpdj5gLHM9YT0+YDxkaXYgY2xhc3M9InBsYWNlcyI+JHthLm1hcCgoYyxsKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHt1KGMubmFtZSl9IiR7bD49dXQ/IiBoaWRkZW4iOiIifT4ke3UoYy5uYW1lKX0gPHNtYWxsPiR7dShjLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfSR7YS5sZW5ndGg+dXQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHthLmxlbmd0aC11dH0gbW9yZTwvYnV0dG9uPmA6IiJ9PC9kaXY+YCxpPWUuc2NvcGU7cmV0dXJuIGk/W3RlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UoaS5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UoZS50b3RhbCl9ICR7dShlLnZvY2FiPy5ub3VuUGx1cmFsPz8iaG90ZWxzIil9IGluICR7dSgoaS5jaXRpZXM/P1tdKS5sZW5ndGgpfSBjaXRpZXM8L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzZWFyY2giPiR7b308L2Rpdj5gLHMoaS5jaXRpZXM/P1tdKSxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZS1hbGw9IiR7dShpLm5hbWUpfSI+QWxsICR7dShlLnRvdGFsKX0gaW4gJHt1KGkubmFtZSl9PC9idXR0b24+PC9kaXY+YF0uam9pbigiIik6W3RlKCksciwuLi4oZS5yZWdpb25zPz9bXSkubWFwKGE9PmAKICAgICAgPGRpdiBjbGFzcz0icmVnaW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+JHt1KGEubmFtZSl9IDxzbWFsbD4ke3UoYS5jb3VudCl9PC9zbWFsbD48L2Rpdj4KICAgICAgICAkeyhhLmNvdW50cmllcz8/W10pLm1hcChjPT57Y29uc3QgbD1jLmNpdGllcz8/W10sZD1sLmxlbmd0aD09PTE/bFswXTp2b2lkIDA7cmV0dXJuYAogICAgICAgICAgPGRpdiBjbGFzcz0iZGVzdCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3QtY291bnRyeSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke3UoYy5uYW1lKX0iPiR7dShjLm5hbWUpfSR7ZCYmZC5uYW1lIT09Yy5uYW1lP2A8c21hbGw+IMK3ICR7dShkLm5hbWUpfTwvc21hbGw+YDoiIn0gPHNtYWxsIGNsYXNzPSJuIj4ke3UoYy5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj4KICAgICAgICAgICAgJHtsLmxlbmd0aD4xP3MobCk6IiJ9CiAgICAgICAgICA8L2Rpdj5gfSkuam9pbigiIil9CiAgICAgIDwvZGl2PmApLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhbGwtaG90ZWxzIj5Ccm93c2UgYWxsICR7dShlLnRvdGFsKX08L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kLWJvb2tpbmciPkZpbmQgYSBib29raW5nPC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LHV0PTgsX2Y9ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O3JldHVybiB0P2A8c3BhbiBjbGFzcz0idC1mcm9tIj4ke3UodC50b3RhbCl9PHNtYWxsIGNsYXNzPSJ0LXN1YiI+JHtOdW1iZXIodC5yb29tcyk+MT9gJHt1KHQucm9vbXMpfSByb29tcyDDlyBgOiIifSR7dSh0Lm5pZ2h0cyl9ICR7TnVtYmVyKHQubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn0gwrcgdGF4ZXMgaW48L3NtYWxsPjwvc3Bhbj5gOmUubm9Sb29tc0ZvclN0YXk/YDxzcGFuIGNsYXNzPSJ0LWZyb20gdC1ub25lIj4key9zbGVlcHMvLnRlc3QoU3RyaW5nKGUubm9Sb29tc0ZvclN0YXkpKT9gTm8gcm9vbSBzbGVlcHMgJHt1KHouZ3Vlc3RzKX1gOiJObyByb29tIGZvciB0aGVzZSBkYXRlcyJ9PC9zcGFuPmA6YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7ZS5mcm9tTmlnaHRseT9gJHt1KGUuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+YH0sa189ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O2lmKCF0KXJldHVybiIiO2NvbnN0IG49W3QuZnJlZUNhbmNlbGxhdGlvbj8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uPC9zcGFuPic6IiIsTnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke3UodC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJdLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/YDxzcGFuIGNsYXNzPSJ0LXRhZ3MiPiR7bi5qb2luKCIiKX08L3NwYW4+YDoiIn0sQnQ9KCk9PnouY2hlY2tJbiYmei5jaGVja091dD97Y2hlY2tJbjp6LmNoZWNrSW4sY2hlY2tPdXQ6ei5jaGVja091dCxndWVzdHM6ei5ndWVzdHMsLi4uUT4xP3tyb29tczpRfTp7fX06e30sd189ZT0+e2NvbnN0e2NoZWNrSW46dCxjaGVja091dDpuLGd1ZXN0czpvLHJvb21zOnIsLi4uc309ZT8/e307cmV0dXJuIHN9LCRfPShlLHQpPT57Y29uc3R7bWluOm4sc3RhcnQ6b309eWYodCk7cmV0dXJuKCF6LmNoZWNrSW58fHouY2hlY2tJbjxuKSYmKHouY2hlY2tJbj1vKSwoIXouY2hlY2tPdXR8fHouY2hlY2tPdXQ8PXouY2hlY2tJbikmJih6LmNoZWNrT3V0PUZlKHouY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY2kiIHZhbHVlPSIke3Uoei5jaGVja0luKX0iIG1pbj0iJHt1KG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjbyIgdmFsdWU9IiR7dSh6LmNoZWNrT3V0KX0iIG1pbj0iJHt1KEZlKHouY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0ibHJuIj4ke3UoUSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICAke2U/YDxzcGFuIGNsYXNzPSJuaWdodHMiPiR7dShYcigpKX08L3NwYW4+YDonPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InByaWNlLWxpc3QiPlNob3cgcHJpY2VzPC9idXR0b24+J30KICA8L2Rpdj5gfTtsZXQgVGU9ImRhdGVzIjtjb25zdCBrZj0iZGF0ZXMiLGdvPWU9Pntjb25zdCB0PWU/P3t9O3JldHVybnsuLi50LmJyYW5kP3ticmFuZDp0LmJyYW5kfTp7fSwuLi5BcnJheS5pc0FycmF5KHQuZmFjaWxpdGllcykmJnQuZmFjaWxpdGllcy5sZW5ndGg/e2ZhY2lsaXRpZXM6dC5mYWNpbGl0aWVzfTp7fSwuLi50LmZyZWVDYW5jZWxsYXRpb24/e2ZyZWVDYW5jZWxsYXRpb246ITB9Ont9LC4uLnQuYnJlYWtmYXN0P3ticmVha2Zhc3Q6ITB9Ont9fX0sSXU9ZT0+e2NvbnN0e2JyYW5kOnQsZmFjaWxpdGllczpuLGZyZWVDYW5jZWxsYXRpb246byxicmVha2Zhc3Q6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sU189ZT0+e2NvbnN0IHQ9Z28oZSk7cmV0dXJuKHQuYnJhbmQ/MTowKSsodC5mYWNpbGl0aWVzPy5sZW5ndGg/PzApKyh0LmZyZWVDYW5jZWxsYXRpb24/MTowKSsodC5icmVha2Zhc3Q/MTowKX0sel89ZT0+e2NvbnN0IHQ9ZS5yZWZpbmU7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj0ocixzLGksYSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXI9IiR7dShyKX0iIGFyaWEtcHJlc3NlZD0iJHthPyJ0cnVlIjoiZmFsc2UifSI+JHt1KHMpfSA8c21hbGw+JHt1KGkpfTwvc21hbGw+PC9idXR0b24+YCxvPShyLHMpPT5zLmxlbmd0aD9gPGRpdiBjbGFzcz0iZmdyb3VwIj48c3BhbiBjbGFzcz0ic29ydHMtayI+JHt1KHIpfTwvc3Bhbj4ke3Muam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bbygiQnJhbmQiLCh0LmJyYW5kcz8/W10pLm1hcChyPT5uKGBicmFuZDoke3IubmFtZX1gLHIubmFtZSxyLmNvdW50LHIub24pKSksbygiSGFzIiwodC5mYWNpbGl0aWVzPz9bXSkubWFwKHI9Pm4oYGZhY2lsaXR5OiR7ci5rZXl9YCxyLmxhYmVsLHIuY291bnQsci5vbikpKSxvKCJSb29tIiwodC5yb29tPz9bXSkubWFwKHI9Pm4oci5rZXksci5sYWJlbCxyLmNvdW50LHIub24pKSldLmpvaW4oIiIpfSxUXz0oZSx0KT0+e2NvbnN0IG49cj0+TnVtYmVyKHIuc2xpY2UoOCwxMCkpLG89cj0+bmV3IERhdGUoYCR7cn1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse21vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KTtyZXR1cm4gbyhlKT09PW8odCk/YCR7bihlKX3igJMke24odCl9ICR7byh0KX1gOmAke24oZSl9ICR7byhlKX0g4oCTICR7bih0KX0gJHtvKHQpfWB9LHdmPShlLHQsbik9Pntjb25zdCBvPSEhZS5zdGF5Py5jaGVja0luLHI9U18oZS5hc2spLHM9el8oZSksaT0kZi5maW5kKChbbF0pPT5sPT09bik/LlsxXT8/IkRlZmF1bHQiLGE9bz9gJHtUXyhlLnN0YXkuY2hlY2tJbixlLnN0YXkuY2hlY2tPdXQpfSR7UT4xP2AgwrcgJHtRfSByb29tc2A6IiJ9YDoiQWRkIGRhdGVzIixjPShsLGQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSB0b29sIiB0eXBlPSJidXR0b24iIGRhdGEtcGFuZWw9IiR7bH0iIGFyaWEtZXhwYW5kZWQ9IiR7VGU9PT1sPyJ0cnVlIjoiZmFsc2UifSI+JHtkfTwvYnV0dG9uPmA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icGxhY2VzIHRvb2xiYXIiPgogICAgICAke2MoImRhdGVzIix1KGEpKX0KICAgICAgJHt0P2MoInNvcnQiLG49PT0iZ3JvdXAiPyJTb3J0Ijp1KGkpKToiIn0KICAgICAgJHtzfHxyP2MoImZpbHRlcnMiLGBGaWx0ZXJzJHtyP2AgwrcgJHtyfWA6IiJ9YCk6IiJ9CiAgICAgICR7cj8nPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImNsZWFyLWZpbHRlcnMiPkNsZWFyPC9idXR0b24+JzoiIn0KICAgIDwvZGl2PgogICAgPGRpdiBkYXRhLXBhbmVsLWJvZHk9ImRhdGVzIiR7VGU9PT0iZGF0ZXMiPyIiOiIgaGlkZGVuIn0+JHskXyhvLGUpfTwvZGl2PgogICAgJHt0P2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0ic29ydCIke1RlPT09InNvcnQiPyIiOiIgaGlkZGVuIn0+JHt0fTwvZGl2PmA6IiJ9CiAgICAke3M/YDxkaXYgY2xhc3M9ImZpbHRlci1wYW5lbCIgZGF0YS1wYW5lbC1ib2R5PSJmaWx0ZXJzIiR7VGU9PT0iZmlsdGVycyI/IiI6IiBoaWRkZW4ifT4ke3N9PC9kaXY+YDoiIn1gfSwkZj1bWyJncm91cCIsIkRlZmF1bHQiXSxbInByaWNlLWxvdyIsIkxvd2VzdCBwcmljZSJdLFsicHJpY2UtaGlnaCIsIkhpZ2hlc3QgcHJpY2UiXSxbInJhdGluZyIsIlJhdGluZyJdXSxJXz1lPT57Y29uc3QgdD1lLmhvdGVscz8/W10sbj1bLi4ubmV3IFNldCh0Lm1hcChrPT5TdHJpbmcoay5jaXR5KSkpXSxvPWs9Pntjb25zdCAkPXQuZmluZChaPT5aLmNpdHk9PT1rKT8uY291bnRyeTtyZXR1cm4gJCYmIVN0cmluZygkKS5zdGFydHNXaXRoKGspP1N0cmluZygkKToiIn0scj1bLi4ubmV3IFNldCh0Lm1hcChrPT5TdHJpbmcoay5jb3VudHJ5Pz8iIikpKV0scz1yLmxlbmd0aD4xLGk9az0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHt1KGspfSR7IXMmJm8oayk/YDxzbWFsbD4gwrcgJHt1KG8oaykpfTwvc21hbGw+YDoiIn08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJ0aWxlcyI+CiAgICAgICAgJHt0LmZpbHRlcigkPT4kLmNpdHk9PT1rKS5tYXAoJD0+YAogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke3UoJC5pZCl9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7cm8oU3RyaW5nKCQuaWQpKX0iPgogICAgICAgICAgICAgICR7JC5pbWFnZVVybD9gPGltZyBzcmM9IiR7dSgkLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7dShzbyhTdHJpbmcoJC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICAgICAgICAkeyQuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke3UoJC5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHt1KCQubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXdoZXJlIj4ke3Uobi5sZW5ndGg+MT8kLmFyZWE/PyQuY2l0eTpbJC5hcmVhLCQuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZvb3QiPgogICAgICAgICAgICAgICAgJHtfZigkKX0KICAgICAgICAgICAgICAgICR7Yl8oJC5yYXRpbmcpfQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAke2tfKCQpfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLGE9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxjPU51bWJlcihlLm9mZnNldD8/MCksbD1hLWMtdC5sZW5ndGgsZD1lLnBsYWNlcz8/W107ZS5hc2s/LmNpdHk7Y29uc3QgbT1kLmxlbmd0aD9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iV2hlcmUiPgogICAgICAgICAgICR7ZC5tYXAoKGssJCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7dShrLnBsYWNlKX0iJHskPj11dD8iIGhpZGRlbiI6IiJ9PiR7dShrLmxhYmVsKX0gPHNtYWxsPiR7dShrLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICAgICAgICR7ZC5sZW5ndGg+dXQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHtkLmxlbmd0aC11dH0gbW9yZTwvYnV0dG9uPmA6IiJ9CiAgICAgICAgIDwvZGl2PmA6IiIsYj1TdHJpbmcoZS5zb3J0Pz8iZ3JvdXAiKSx2PSEoKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xKSxfPXQubGVuZ3RoPjE/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Ik9yZGVyIj4keyRmLmZpbHRlcigoW2tdKT0+dnx8IWsuc3RhcnRzV2l0aCgicHJpY2UiKSkubWFwKChbaywkXSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zb3J0PSIke2t9IiBhcmlhLXByZXNzZWQ9IiR7az09PWI/InRydWUiOiJmYWxzZSJ9Ij4keyR9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bdGUoKSxtLHdmKGUsXyxiKSxlLndpZGVuZWQ/YDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIG1hdGNoZWQgJHt1KGUud2lkZW5lZC5mcm9tKX0uIFRoZXNlIGFyZSAke3UoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIixgPGRpdj4ke3M/ci5tYXAoaz0+YDxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj4ke3Uoayl9PC9kaXY+JHtuLmZpbHRlcigkPT50LnNvbWUoWj0+Wi5jaXR5PT09JCYmU3RyaW5nKFouY291bnRyeT8/IiIpPT09aykpLm1hcChpKS5qb2luKCIiKX1gKS5qb2luKCIiKTpuLm1hcChpKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7dShlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke3UoZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIixsPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHtjP2Ake2MrMX3igJMke2MrdC5sZW5ndGh9YDp0Lmxlbmd0aH0gb2YgJHthfS48L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMjAsbCl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKX0sUF89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXSxuPWUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke3UoZS53aWRlbmVkLmZyb20pfSwgc28gdGhpcyBsb29rZWQgaW4gJHt1KGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiI7cmV0dXJuIGUuYmVmb3JlRmlsdGVycz8oVGU9ImZpbHRlcnMiLFt0ZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj4ke3UoZS53aHk/P2BOb25lIG9mIHRoZSAke2UuYmVmb3JlRmlsdGVyc30gaGVyZSBoYXMgYWxsIG9mIHRob3NlIHRvZ2V0aGVyLmApfTwvZGl2PmAsd2YoZSwiIixTdHJpbmcoZS5hc2s/LnNvcnQ/PyJncm91cCIpKV0uam9pbigiIikpOnQubGVuZ3RoP1t0ZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7dSh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobz0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KG8uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7cm8oU3RyaW5nKG8uaWQpKX0iPgogICAgICAgICAgJHtvLmltYWdlVXJsP2A8aW1nIHNyYz0iJHt1KG8uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke3Uoc28oU3RyaW5nKG8ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHt1KG8ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7dShbby5hcmVhLG8uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICR7X2Yobyl9CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YCR7bn08ZGl2IGNsYXNzPSJlbXB0eSI+JHt1KGUud2h5Pz9gTm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZS5xdWVyeX0iYDoiIn0uIFRyeSBhIGNpdHkuYCl9PC9kaXY+YH0sU2Y9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke3JvKFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7dShlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHt1KHNvKFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHt1KGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7dShlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHt1KFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke3UoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHt1KGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7dShlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHt1KHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAseF89KGUsdCxuKT0+e2NvbnN0IG89dl8oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtybyhgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke3UodC5pbWFnZVVybCl9IiBhbHQ9IiI+YDp1KHNvKFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHt1KHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7dShTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke3UodC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7dSh0LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke3UodC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke3UodC5uaWdodGx5KX0gLyBuaWdodCR7UT4xP2AgwrcgJHtRfSByb29tc2A6IiJ9IMK3IGluY2wuIHRheDwvZGl2PgogICAgICAgICR7dC5tZW1iZXJSYXRlP2A8ZGl2IGNsYXNzPSJwLW1lbWJlciI+JHt1KHQubWVtYmVyUmF0ZS50aWVyKX0gcmF0ZTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7eG8oYGRhdGEtYWRkLXJvb209IiR7dSh0LmlkKX0iIGRhdGEtaG90ZWw9IiR7dShlLmlkKX0iYCxvLFN0cmluZyh0Lm5hbWUpLFEpfTwvZGl2PgogICAgPC9kaXY+YH0sQ189KGUsdCk9PiFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyPyIiOmAKICA8ZGl2IGNsYXNzPSJmbGV4LWRhdGVzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iTmVhcmJ5IGFycml2YWwgZGF0ZXMiPgogICAgJHt0Lm1hcChuPT5gPGJ1dHRvbiBjbGFzcz0iZmQke24uY2hvc2VuPyIgb24iOiIifSR7bi5mcm9tPyIiOiIgb3V0In0ke24uYmVzdD8iIGJlc3QiOiIifSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke3UoZSl9IiBkYXRhLWNpPSIke3Uobi5jaGVja0luKX0iIGRhdGEtY289IiR7dShuLmNoZWNrT3V0KX0iIGFyaWEtbGFiZWw9IkFycml2ZSAke3UoWXQoU3RyaW5nKG4uY2hlY2tJbikpKX0ke24uZnJvbT9gLCBmcm9tICR7dShuLmZyb20pfWA6Iiwgbm90aGluZyBsZWZ0In0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1kYXkiPiR7dShZdChTdHJpbmcobi5jaGVja0luKSkpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtcHJpY2UiPiR7bi5mcm9tP3Uobi5mcm9tKToiRnVsbCJ9PC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gLFB1PWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5yb29tcz8/W10sbz1lLnN0YXk/P3o7cmV0dXJuW3RlKCksU2YodCksYmYoU3RyaW5nKHQuaWQpLHQudG9kYXlUaGVyZSksQ18oU3RyaW5nKHQuaWQpLGUuZGF0ZXMpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke3UoZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PnhfKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke3UodC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke3Uoci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke3UodC5pZCl9Ij4ke3Uoci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LEVfPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdLG89ZS5mb3JCb29raW5nO3JldHVybiBvP1t0ZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+QWRkLW9ucyBmb3IgJHt1KG8uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHt1KHQubmFtZSl9IMK3ICR7dShWZShvLnN0YXkpKX08L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7dShyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3Uoci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHt1KHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke3Uoci5wZXIpfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7eG8oYGRhdGEtYm9va2luZy1leHRyYT0iJHt1KHIuaWQpfSIgZGF0YS1ib29raW5nPSIke3Uoby5jb25maXJtYXRpb25Db2RlKX0iYCxOdW1iZXIoby5oZWxkPy5bci5pZF0/PzApLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLCc8ZGl2IGNsYXNzPSJub3RlIj5FYWNoIGNoYW5nZSBpcyBzaG93biB3aXRoIGl0cyBuZXcgdG90YWwgYmVmb3JlIGFueXRoaW5nIG1vdmVzLiBOb3RoaW5nIGlzIGNoYXJnZWQgaGVyZS48L2Rpdj4nLCc8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkJhY2sgdG8geW91ciBib29raW5nczwvYnV0dG9uPiddLmpvaW4oIiIpOlt0ZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHt1KHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3Uoci5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7dShyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke3Uoci5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke3Uoci5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHt4byhgZGF0YS1hZGQtZXh0cmE9IiR7dShyLmlkKX0iIGRhdGEtaG90ZWw9IiR7dSh0LmlkKX0iYCx5XyhTdHJpbmcodC5pZCksU3RyaW5nKHIuaWQpKSxTdHJpbmcoci5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7dSh0LmlkKX0iPkJhY2sgdG8gJHt1KHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LE9fPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHt1KGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke3UoZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7dShlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHt1KGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHt1KGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7dShlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7dShlLmhvdGVsSWQpfSIke2UuZGF5P2AgZGF0YS1kYXk9IiR7dShlLmRheSl9ImA6IiJ9YDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3UoZS50aXRsZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHt1KGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtWZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7dShlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7dShlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHt4byh0LE51bWJlcihlLmtpbmQ9PT0iZXh0cmEiP2Uub3JkZXJlZD8/ZS5xdWFudGl0eT8/MTplLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0seHU9KGUsdCk9PmA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7dShlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke3UoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHt1KGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHt1KGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dSh0KX08L3NwYW4+PHNwYW4+JHt1KGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIGVhcm5zPC9zcGFuPjxzcGFuPiR7dShOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgIDwvZGl2PmAsQV89ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVyblt0ZSgpLCc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlIHRyaXAgaXMgZW1wdHkuPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkJyb3dzZSAke3UoY3QpfSBob3RlbHM8L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBuPVsuLi5uZXcgU2V0KHQubWFwKG89PlN0cmluZyhvLmRheT8/IiIpKSldLnNvcnQoKTtyZXR1cm5bdGUoKSxuLm1hcChvPT5gCiAgICAgICR7bz9gPGRpdiBjbGFzcz0iZGF5Ij4ke3UoWXQobykpfTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InJvd3MiPiR7dC5maWx0ZXIocj0+U3RyaW5nKHIuZGF5Pz8iIik9PT1vKS5tYXAoT18pLmpvaW4oIiIpfTwvZGl2PmApLmpvaW4oIiIpLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG89PmAke3Uoby50aXRsZSl9OiAke3Uoby53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLC4uLkFycmF5LmlzQXJyYXkoZS5ncm91cHMpJiZlLmdyb3Vwcy5sZW5ndGg+MT9bYDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlZCBpbiAke3UoKGUuY3VycmVuY2llcz8/W10pLmpvaW4oIiBhbmQgIikpfSwgc2VwYXJhdGVseS4gTm90aGluZyBoZXJlIGNvbnZlcnRzIG9uZSBpbnRvIHRoZSBvdGhlcjsgZWFjaCBob3RlbCBpcyBib29rZWQgYW5kIHBhaWQgaW4gaXRzIG93bi48L2Rpdj5gLC4uLmUuZ3JvdXBzLm1hcChvPT54dShvLG8uZ29lc1dpdGhBU3RheT9gSW4gJHtvLmN1cnJlbmN5fSwgZ29lcyB3aXRoIGEgc3RheSAtIG5vdCBpbiB0aGUgdG90YWxgOmBUb3RhbCBpbiAke28uY3VycmVuY3l9YCkpXTpbeHUoZSwiVG90YWwiKV0sLi4uQXJyYXkuaXNBcnJheShlLm5lZWRzUm9vbSkmJmUubmVlZHNSb29tLmxlbmd0aD9lLm5lZWRzUm9vbS5tYXAobz0+YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICAgIDxiPkdvZXMgd2l0aCBhIHN0YXk8L2I+CiAgICAgICAgICAgICA8c3Bhbj4ke3UoKG8uZXh0cmFzPz9bXSkuam9pbigiIGFuZCAiKSl9IGlzICR7dShvLmhvdGVsTmFtZSl9J3Mgc2VydmljZSBmb3IgaXRzIGd1ZXN0cywgc28gaXQgaXMgYm9va2VkIHdpdGggYSByb29tIHRoZXJlIC0gb3IgYWRkZWQgdG8gYSBib29raW5nIHlvdSBhbHJlYWR5IGhhdmUuPC9zcGFuPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7dShvLmhvdGVsSWQpfSI+Um9vbXMgYXQgJHt1KG8uaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPC9kaXY+YCk6Wyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siPlJlcXVlc3QgYm9va2luZzwvYnV0dG9uPjwvZGl2PicsYDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBSZXF1ZXN0aW5nIGEgYm9va2luZyBhc2tzICR7dShjdCl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLHpmKCldLFk/IiI6YDxkaXYgY2xhc3M9Im5vdGUiPkEgJHt1KGN0KX0gQ2lyY2xlIG1lbWJlcj8gPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj5TaWduIGluIGZvciB0aGUgbWVtYmVyIHJhdGU8L2J1dHRvbj4uPC9kaXY+JHtDbygpfWBdLmpvaW4oIiIpfSxEYz1be2lkOiJraW5nLWJlZCIsbGFiZWw6IktpbmcgYmVkIn0se2lkOiJ0d2luLWJlZHMiLGxhYmVsOiJUd2luIGJlZHMifSx7aWQ6ImhpZ2gtZmxvb3IiLGxhYmVsOiJIaWdoIGZsb29yIn0se2lkOiJsb3ctZmxvb3IiLGxhYmVsOiJMb3cgZmxvb3IifSx7aWQ6InF1aWV0LXJvb20iLGxhYmVsOiJRdWlldCByb29tIn0se2lkOiJjb25uZWN0aW5nLXJvb21zIixsYWJlbDoiQ29ubmVjdGluZyByb29tcyJ9LHtpZDoiZWFybHktY2hlY2staW4iLGxhYmVsOiJFYXJseSBjaGVjay1pbiJ9LHtpZDoibGF0ZS1hcnJpdmFsIixsYWJlbDoiTGF0ZSBhcnJpdmFsIn0se2lkOiJhY2Nlc3NpYmxlLXJvb20iLGxhYmVsOiJBY2Nlc3NpYmxlIHJvb20ifV0sUl89eyJraW5nLWJlZCI6InR3aW4tYmVkcyIsInR3aW4tYmVkcyI6ImtpbmctYmVkIiwiaGlnaC1mbG9vciI6Imxvdy1mbG9vciIsImxvdy1mbG9vciI6ImhpZ2gtZmxvb3IifTtsZXQgeGU9bnVsbDtjb25zdCB6Zj0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0iZ3Vlc3QiJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+R3Vlc3QgbmFtZTxpbnB1dCBpZD0iZ25hbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgYm9va2luZyIgdmFsdWU9IiR7dSh4ZT8ubmFtZT8/IiIpfSI+PC9sYWJlbD4KICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJnbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBjb25maXJtYXRpb24iIHZhbHVlPSIke3UoeGU/LmVtYWlsPz8iIil9Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke0RjLm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7dSh0LmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoeGU/eGUucmVxdWVzdHM6WT8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7dSh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7dSh4ZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHt1KHhlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke3UoY3QpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7WT9gPGxhYmVsIGNsYXNzPSJyZW1lbWJlciI+PGlucHV0IGlkPSJncmVtZW1iZXIiIHR5cGU9ImNoZWNrYm94IiR7eGU/LnJlbWVtYmVyPyIgY2hlY2tlZCI6IiJ9PiBSZW1lbWJlciB0aGUgYmVkLCBmbG9vciBhbmQgcm9vbSByZXF1ZXN0cyBvbiBteSAke3UoWS5wcm9ncmFtbWU/PyJtZW1iZXJzaGlwIil9IGZvciBuZXh0IHRpbWU8L2xhYmVsPmA6IiJ9CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj5Ib2xkIHRoZXNlIHJvb21zPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4KICA8L2Rpdj5gLFpfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke3UoKGUubWlzc2luZz8/W10pLmpvaW4oIiBhbmQgIil8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsemYoITApLCc8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4nXS5qb2luKCIiKSxOXz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW3RlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt1KHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgICR7dC5uYW1lP2A8ZGl2IGNsYXNzPSJ3aGVyZSI+JHt1KHQubmFtZSl9PC9kaXY+YDonPGRpdiBjbGFzcz0id2hlcmUiPlNpZ25lZCBpbjwvZGl2Pid9CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7dSh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgJHt0eXBlb2YgdC5wb2ludHM9PSJudW1iZXIiP2A8ZGl2IGNsYXNzPSJ3aGVuIj4ke3UodC5wb2ludHMudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHt1KE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke3UodC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLCh0LnByZWZlcmVuY2VzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgPGI+U2F2ZWQgZm9yIHlvdXIgbmV4dCBzdGF5czwvYj4KICAgICAgICAgICA8c3Bhbj4ke3UodC5wcmVmZXJlbmNlcy5tYXAobj0+RGMuZmluZChvPT5vLmlkPT09bik/LmxhYmVsPz9uKS5qb2luKCIsICIpKX0gLSB0aWNrZWQgb24gdGhlIGJvb2tpbmcgZm9ybSwgYW5kIGFza2VkIGZvciBvbmx5IHdoZW4geW91IGJvb2sgd2l0aCB0aGVtLjwvc3Bhbj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZm9yZ2V0LXByZWZzIj5Gb3JnZXQgdGhlbTwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sal89KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLENvKCEwKV0uam9pbigiIiksQ289KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxNXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RlZD8/W107cmV0dXJuIHQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCR7ZS5hY2Nlc3NpYmlsaXR5PyIgZmxhZyI6IiJ9Ij4KICAgIDxiPlJlcXVlc3RlZCwgbm90IGhlbGQ8L2I+CiAgICAke3QubWFwKG49PmA8c3Bhbj4ke3Uobil9PC9zcGFuPmApLmpvaW4oIiIpfQogIDwvZGl2PmA6IiJ9LEN1PWU9PlN0cmluZyhlLmhvbGRVbnRpbD8/IiIpLnNsaWNlKDAsMTYpLnJlcGxhY2UoIlQiLCIgIikscV89ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmJvb2tpbmdzKSYmZS5ib29raW5ncy5sZW5ndGg/ZS5ib29raW5nczpbZS5ib29raW5nPz97fV0sbj10Lmxlbmd0aD4xLG89KHIscyxpKT0+W2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+Q29uZmlybWF0aW9uIGNvZGU8L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHt1KHIuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke3Uoci5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke3UoVmUoci5zdGF5KSl9IMK3ICR7dShyLmd1ZXN0Py5uYW1lPz8iIil9PC9kaXY+CiAgICAgICA8L2Rpdj5gLG4/YDxkaXYgY2xhc3M9Im5vdGUiPkhlbGQgdW50aWwgJHt1KEN1KHIpKX0gVVRDLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7dShzKX08L3NwYW4+PC9kaXY+YCxNXyhpKSxgPGRpdiBjbGFzcz0icm93cyI+JHsoci5xdW90ZT8ubGluZXM/P1tdKS5tYXAoTF8pLmpvaW4oIiIpfTwvZGl2PmAsbj9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke3Uoci5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke3Uoci5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCAke3Uoci5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpO3JldHVyblt0ZSgpLG4/YDxkaXYgY2xhc3M9Im5vdGUiPiR7dC5sZW5ndGh9IGJvb2tpbmdzLCBvbmUgZm9yIGVhY2ggc3RheS4gRWFjaCBob3RlbCBob2xkcyBpdHMgb3duIG5pZ2h0cyB1bmRlciBpdHMgb3duIGNvZGUsIGFuZCBlYWNoIGlzIGNoYW5nZWQgb3IgY2FuY2VsbGVkIG9uIGl0cyBvd24uPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCB0aGUgdGltZSB1bmRlciBlYWNoIGNvZGUuIjpgVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7dShDdSh0WzBdKSl9IFVUQy5gfSBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCwuLi50Lm1hcChyPT5uP28ocixTdHJpbmcoci50b3RhbD8/IiIpLHIpOm8ocixTdHJpbmcoZS50b3RhbD8/IiIpLGUpKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAke24/IiI6YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7dSh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHt1KHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPmB9CiAgICAgPC9kaXY+YF0uam9pbigiIil9LERfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj4ke3UoZS5kZXRhaWw/P2Uud2h5Pz8iVGhhdCBjb3VsZCBub3QgYmUgZG9uZS4iKX08L2Rpdj5gLFF0PjA/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIj5WaWV3IHRoZSB0cmlwPC9idXR0b24+PC9kaXY+JzoiIl0uam9pbigiIiksTF89ZT0+YAogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KGUudGl0bGUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3UoZS5raW5kPT09InJvb20iP1ZlKGUuc3RheSk6ZS5kZXRhaWw/PyIiKX08L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7dShlLnRvdGFsKX08L2Rpdj48L2Rpdj4KICA8L2Rpdj5gLFVfPXtyZXF1ZXN0ZWQ6Indhcm4iLGNvbmZpcm1lZDoiZ29vZCIsY2FuY2VsbGVkOiJiYWQiLGV4cGlyZWQ6ImJhZCJ9LEZfPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5EYy5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke3Uobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LEhfPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdLG49ZS5ub3RGb3VuZD9gPGRpdiBjbGFzcz0iZXJyIj4ke3UoZS50b29NYW55P2Uubm90Rm91bmRMaW5lOmBObyBib29raW5nIG1hdGNoZXMgJHtlLm5vdEZvdW5kfSB3aXRoIHRoYXQgZW1haWwuIEJvdGggaGF2ZSB0byBiZSBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLmApfTwvZGl2PmA6IiI7cmV0dXJuIGUubm90Rm91bmQmJnQubGVuZ3RoPT09MD9gJHtufQogICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5UcnkgYWdhaW48L2J1dHRvbj48L2Rpdj5gOnQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOlt0ZSgpLG4sYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KG8uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7dShvLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke3UoVmUoby5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke0ZfKG8pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtVX1tTdHJpbmcoby5zdGF0dXMpXT8/IiJ9Ij4ke3Uoby5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHt1KG8ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke28uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG8uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7dShvLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHt1KG8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sRXU9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHt1KG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke3UoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke3UoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke3Uobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxPdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89ZS5mcm9tPz97fSxyPWUudG8scz0hIXImJihyLmNoZWNrSW4hPT1vLmNoZWNrSW58fHIuY2hlY2tPdXQhPT1vLmNoZWNrT3V0fHxOdW1iZXIoci5yb29tcykhPT1OdW1iZXIoby5yb29tcyl8fHIucm9vbU5hbWUhPT1vLnJvb21OYW1lKSxpPShhLGMsbCk9PmM/YDxkaXYgY2xhc3M9ImxlZyR7bD8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke3UoYSl9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHt1KGMuY2hlY2tJbil9IOKGkiAke3UoYy5jaGVja091dCl9IMK3ICR7dShjLm5pZ2h0cyl9ICR7TnVtYmVyKGMubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke3UoYy5yb29tTmFtZSl9JHtOdW1iZXIoYy5yb29tcyk+MT9gIMK3ICR7dShjLnJvb21zKX0gcm9vbXNgOiIifSDCtyAke3UoYy50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW3RlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDaGFuZ2VkIjoiQ2hhbmdpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHt1KG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlLmhvdGVsTmFtZT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHt1KGUuaG90ZWxOYW1lKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJsZWdzIj4ke2kodD8iV2FzIjoiTm93IixlLmZyb20scyl9JHtpKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHt1KGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7dShlLmFkZE9uLmZyb20pfSDihpIgJHt1KGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7dShlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke3UoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke3Uobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sYXM9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7dShlLnRpdGxlKX08L2g0PiR7dShlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHt1KG8udGl0bGUpfTwvaDQ+JHt1KG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHt1KHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHt1KHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KHQuaWQpfSI+QmFjayB0byAke3UodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sQl89ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7cm8oU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7dShyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7dShzbyhTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHt1KHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7dShyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke3Uoci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7dShyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7dShyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke3Uocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke3Uocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW3RlKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7dShWZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7dShlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHt1KHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke3UoaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHt1KHIubmFtZSl9OiAke3Uoci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHt1KGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LFZfPWU9Pntjb25zdCB0PWUuZGF5cz8/W107cmV0dXJuW3RlKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7dShlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UoVmUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7dShOdW1iZXIoZS5pblRyaXA/PzApK051bWJlcihlLmJvb2tlZD8/MCkpfS8ke3UoZS5wbGFubmVkKX08L2I+PHNwYW4+JHt1KGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKG4sbyk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bysxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHt1KG4ubGFiZWwpfSR7bi5kYXRlP2A8c21hbGw+IMK3ICR7dShTdHJpbmcobi5kYXRlKS5zbGljZSg1KSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtuLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7dShuLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAkeyhuLml0ZW1zPz9bXSkubWFwKHI9PmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIiR7ci5raW5kPT09ImhvdGVsIj9gIGRhdGEtaG90ZWw9IiR7dShyLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtyLmNoZWNrSW4/YCBkYXRhLWNpPSIke3Uoci5jaGVja0luKX0iIGRhdGEtY289IiR7dShyLmNoZWNrT3V0KX0iYDoiIn1gOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3UoW3IuZGV0YWlsLHIubmlnaHRzP051bWJlcihyLm5pZ2h0Pz8xKT4xP2BuaWdodCAke3IubmlnaHR9IG9mICR7ci5uaWdodHN9YDpgJHtyLm5pZ2h0c30gJHtyLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiIsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmJvb2tlZHx8ci5pblRyaXA/InllcyI6Im5vIn0iPiR7ci5ib29rZWQ/YEJvb2tlZCDCtyAke3Uoci5ib29rZWQpfWA6ci5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG49PmAke3Uobi5uYW1lKX06ICR7dShuLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxHZT0oZSx0PSExKT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2NvbnN0IG49dCYmZS52aWV3PT09Im1lbWJlciImJlk/ey4uLmUsbWVtYmVyOll9OmU7bi50b29sTmFtZXMmJihsZj1uLnRvb2xOYW1lcyksbi5icmFuZCYmKGN0PVN0cmluZyhuLmJyYW5kKSksbi5sb2dvVXJsJiYoaXM9U3RyaW5nKG4ubG9nb1VybCkpLHR5cGVvZiBuLmRlbW89PSJib29sZWFuIiYmKGRmPW4uZGVtbyksbi5kZW1vTm90ZSYmKHBmPVN0cmluZyhuLmRlbW9Ob3RlKSksdHlwZW9mIG4ucm9vbXNfd2FudGVkPT0ibnVtYmVyIj9RPW4ucm9vbXNfd2FudGVkOihuLnZpZXc9PT0iaG90ZWxzInx8bi52aWV3PT09ImRlc3RpbmF0aW9ucyJ8fG4udmlldz09PSJuby1ob3RlbHMiKSYmbi5zdGF5Py5jaGVja0luJiYhbHQmJihRPU1hdGgubWF4KDEsTnVtYmVyKG4uYXNrPy5yb29tcz8/MSl8fDEpKSx0fHwobi52aWV3PT09Im1lbWJlciImJm4ubWVtYmVyPy50aWVyPy5uYW1lP1k9bi5tZW1iZXI6bi5tZW1iZXI/LnRpZXI/Lm5hbWUmJihZPVk/LnByb2dyYW1tZT09PW4ubWVtYmVyLnByb2dyYW1tZSYmWT8udGllcj8ubmFtZT09PW4ubWVtYmVyLnRpZXIubmFtZT97Li4uWSwuLi5uLm1lbWJlcixwcmVmZXJlbmNlczpuLm1lbWJlci5wcmVmZXJlbmNlc306bi5tZW1iZXIpLChuLnZpZXc9PT0ic2lnbmVkLW91dCJ8fG4uc2lnbmVkSW49PT0hMSkmJihZPW51bGwpKSxuLnN0YXk/LmNoZWNrSW4mJiFWdCYmIWx0JiYoej17Y2hlY2tJbjpuLnN0YXkuY2hlY2tJbixjaGVja091dDpuLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOm4uc3RheS5ndWVzdHM/PzJ9KSwhcWMmJihuLnZpZXc9PT0idHJpcCJ8fG4udmlldz09PSJuZWVkcy1kYXRlcyIpJiYodnQ9bi5saW5lcz8/W10pLChuLnZpZXc9PT0iYm9va2luZyJ8fG4udmlldz09PSJlbXB0eS10cmlwIikmJih2dD1bXSxRdD0wKSxXZT1TdHJpbmcobi52aWV3Pz8iIiksaGYoKTtjb25zdCBvPW1lKCJicmFuZCIpO2lzPyhvLnNyYz1pcyxvLmhpZGRlbj0hMSxtZSgidGl0bGUiKS5oaWRkZW49ITApOihvLmhpZGRlbj0hMCxtZSgidGl0bGUiKS5oaWRkZW49ITEsbWUoInRpdGxlIikudGV4dENvbnRlbnQ9Y3R8fCJIb3RlbHMiKSxtZSgic3ViIikudGV4dENvbnRlbnQ9V18obiksUV8oKSxHXygpO2NvbnN0IHI9e2hvdGVsczpJXyxkZXN0aW5hdGlvbnM6X18sIm5vLWhvdGVscyI6UF8saG90ZWw6UHUsIm5vLXJvb21zIjpQdSwiaG90ZWwtbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGF0IGhvdGVsIGlzIG5vdCBpbiB0aGlzIGNvbm5lY3Rvci48L2Rpdj4nLGV4dHJhczpFXyx0cmlwOkFfLCJuZWVkcy1kYXRlcyI6S18sYm9va2luZzpxXywibmVlZHMtZ3Vlc3QiOlpfLG1lbWJlcjpOXywibWVtYmVyLW5vdC1mb3VuZCI6al8sInNpZ25lZC1vdXQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlNpZ25lZCBvdXQuIFJhdGVzIGFyZSB0aGUgcHVibGljIG9uZXMgYWdhaW4uPC9kaXY+PGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPjwvZGl2PicsImVtcHR5LXRyaXAiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRyaXAgeWV0LjwvZGl2PicsYm9va2luZ3M6SF8sImNhbmNlbGxhdGlvbi1wcmV2aWV3IjpFdSxjYW5jZWxsZWQ6RXUsImNoYW5nZS1wcmV2aWV3IjpPdSxjaGFuZ2VkOk91LCJib29raW5nLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZyBoZXJlIG1hdGNoZXMgdGhhdCBjb2RlLjwvZGl2PicsY29tcGFyaXNvbjpCXywibm90aGluZy10by1jb21wYXJlIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5Ob25lIG9mIHRob3NlIGFyZSBob3RlbHMgdGhpcyBjb25uZWN0b3Iga25vd3MuPC9kaXY+JyxpdGluZXJhcnk6Vl8sImVtcHR5LWl0aW5lcmFyeSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+QW4gaXRpbmVyYXJ5IG5lZWRzIGF0IGxlYXN0IG9uZSBkYXkuPC9kaXY+Jyxwb2xpY3k6YXMscG9saWNpZXM6YXMsInBvbGljeS1taXNzaW5nIjphcyxlcnJvcjpEXywiZmluZC1ib29raW5nIjooKT0+W3RlKCksJzxkaXYgY2xhc3M9Im5vdGUiPkEgYm9va2luZyBtYWRlIGluIGFub3RoZXIgY29udmVyc2F0aW9uIGlzIGZvdW5kIHdpdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgaXQgd2FzIG1hZGUgd2l0aCAtIGJvdGgsIGFzIHRoZXkgYXJlIG9uIHRoZSBjb25maXJtYXRpb24uPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9ybSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICAgICAgIDxsYWJlbD5Db25maXJtYXRpb24gY29kZTxpbnB1dCBpZD0iZmNvZGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iU0wt4oCmIj48L2xhYmVsPgogICAgICAgICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJmbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIG9uZSBvbiB0aGUgYm9va2luZyI+PC9sYWJlbD4KICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibG9va3VwLWJvb2tpbmciPkZpbmQgaXQ8L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YF0uam9pbigiIiksIm5vLW1lbWJlciI6KCk9PmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9ib2R5IGlzIHNpZ25lZCBpbiwgc28gdGhlcmUgaXMgbm90aGluZyBzYXZlZCB0byBmb3JnZXQuPC9kaXY+JHtDbyghMCl9YCwibWVtYmVyLXNpZ24taW4iOigpPT5bdGUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+JyxDbyghMCldLmpvaW4oIiIpfTsoV2U9PT0iaG90ZWwifHxXZT09PSJuby1yb29tcyJ8fFdlPT09Im5lZWRzLWRhdGVzIikmJm4uaG90ZWw/LmlkPyhIdD1TdHJpbmcobi5ob3RlbC5pZCksbi5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5lcygwLCFZciksMCkpOihIdD0iIixMYygpKSxWPW47Y29uc3Qgcz1yW1dlXTttZSgiY29udGVudCIpLmlubmVySFRNTD0ocz9zKG4pOmA8ZGl2IGNsYXNzPSJlcnIiPiR7dShuLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7bi5kZXRhaWw/YDxicj4ke3Uobi5kZXRhaWwpfWA6IiJ9PC9kaXY+YCkrSl8obil9LEpfPWU9Pntjb25zdCB0PSEhamUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy5tZXNzYWdlLG49KGUuc3VnZ2VzdGlvbnM/P1tdKS5tYXAoKG8scik9Pm8/LmFzaz9gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7dShvLmxhYmVsKX08L2J1dHRvbj5gOm8/LnNheSYmdD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBzYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zdWdnZXN0PSIke3J9Ij4ke3Uoby5sYWJlbCl9IDxzbWFsbD7CtyBpbiB0aGUgY2hhdDwvc21hbGw+PC9idXR0b24+YDoiIikuam9pbigiIik7cmV0dXJuIG4/YDxkaXYgY2xhc3M9InN1Z2dlc3QiPiR7bn08L2Rpdj5gOiIifSxLXz1lPT5bdGUoKSxlLmhvdGVsP1NmKGUuaG90ZWwpOiIiLGA8ZGl2IGNsYXNzPSJlcnIiPiR7dShlLndoeT8/IldoaWNoIG5pZ2h0cz8gQSByb29tIG5lZWRzIGEgY2hlY2staW4gYW5kIGEgY2hlY2stb3V0IGRhdGUuIil9PC9kaXY+YCxiZihTdHJpbmcoZS5ob3RlbD8uaWQ/PyIiKSxlLmhvdGVsPy50b2RheVRoZXJlKV0uam9pbigiIiksV189ZT0+ZS52aWV3PT09ImhvdGVscyI/YCR7ZS50b3RhbD8/MH0gJHtOdW1iZXIoZS50b3RhbCk9PT0xPyJob3RlbCI6ImhvdGVscyJ9YDplLnZpZXc9PT0iaG90ZWwifHxlLnZpZXc9PT0ibm8tcm9vbXMiP1ZlKGUuc3RheSk6ZS52aWV3PT09InRyaXAiPyhlLmxpbmVzPz9bXSkubGVuZ3RoP1N0cmluZyhlLnRvdGFsPz8iIik6IiI6ZS52aWV3PT09ImNvbXBhcmlzb24iP2AkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA6ZS52aWV3PT09Iml0aW5lcmFyeSI/TnVtYmVyKGUuYm9va2VkKT4wP2Ake2UuYm9va2VkfS8ke2UucGxhbm5lZH0gYm9va2VkYDpgJHtlLmluVHJpcH0vJHtlLnBsYW5uZWR9IGluIHRoZSB0cmlwYDplLnZpZXc9PT0iYm9va2luZ3MiP2Ake2UuY291bnQ/PzB9IGJvb2tpbmcke051bWJlcihlLmNvdW50KT09PTE/IiI6InMifWA6IiIsR189KCk9Pntjb25zdCBlPW1lKCJtZW1iZXJjaGlwIik7WT8oZS5oaWRkZW49ITEsZS50ZXh0Q29udGVudD1gJHtZLnRpZXI/Lm5hbWU/PyJNZW1iZXIifSDCtyAke01hdGgucm91bmQoKFkudGllcj8uZGlzY291bnQ/PzApKjEwMCl9JSBvZmZgLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsIm1lbWJlciIpLGUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsW1kubmFtZSxZLnByb2dyYW1tZV0uZmlsdGVyKHQ9PnR5cGVvZiB0PT0ic3RyaW5nIiYmdCkuam9pbigiIMK3ICIpKSk6KGUuaGlkZGVuPVdlPT09Im1lbWJlci1ub3QtZm91bmQiLGUudGV4dENvbnRlbnQ9Ik1lbWJlciBzaWduIGluIixlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJhc2stc2lnbi1pbiIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKX0sUV89KCk9Pntjb25zdCBlPW1lKCJoZWFkdHJpcCIpLHQ9cWM/UXQ6UXR8fHZ0Lmxlbmd0aDtlLmhpZGRlbj10PT09MHx8V2U9PT0idHJpcCIsbWUoImhlYWR0cmlwbiIpLnRleHRDb250ZW50PVN0cmluZyh0KX0sWV89KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3UiKTt6PXtjaGVja0luOmU/LnZhbHVlPz96LmNoZWNrSW4sY2hlY2tPdXQ6dD8udmFsdWU/P3ouY2hlY2tPdXQsZ3Vlc3RzOk51bWJlcihuPy52YWx1ZT8/ei5ndWVzdHMpfHwyfX0sYm89KGU9e30pPT56LmNoZWNrSW4mJnouY2hlY2tPdXQ/e2NoZWNrSW46ei5jaGVja0luLGNoZWNrT3V0OnouY2hlY2tPdXQsZ3Vlc3RzOnouZ3Vlc3RzLC4uLmV9OmU7bGV0ICRzLFZ0PSExO2NvbnN0IExjPSgpPT57Y2xlYXJUaW1lb3V0KCRzKSxWdD0hMX0sZXM9KGU9MCx0PSExKT0+e0h0JiYoY2xlYXJUaW1lb3V0KCRzKSxWdD0hMCwkcz1zZXRUaW1lb3V0KCgpPT57aWYoIUh0KXtWdD0hMTtyZXR1cm59aWYoRHQpe2VzKDE1MCx0KTtyZXR1cm59VnQ9ITEscSgiZ2V0SG90ZWwiLHtob3RlbDpIdCxyb29tczpRLC4uLmJvKCl9LHQ/e25vdGU6bV99Ont9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxOPWU9PnttZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHt1KGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSxbZGF0YS1ib29raW5nLWV4dHJhc10sW2RhdGEtYm9va2luZy1leHRyYV0sW2RhdGEtc3VnZ2VzdF0sW2RhdGEtcGxhY2VdLFtkYXRhLXBsYWNlLWFsbF0sW2RhdGEtc29ydF0sW2RhdGEtbGlzdC1yb29tc10sW2RhdGEtZmlsdGVyXSxbZGF0YS1wYW5lbF0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKHcpKTtjb25zdCBJPVJfW25dO3cmJkkmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7SX0iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksVGYoKTtyZXR1cm59Y29uc3Qgbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1saXN0LXJvb21zIik7aWYobyE9PW51bGwpe1E9TWF0aC5taW4oU3UsTWF0aC5tYXgoMSxRK051bWJlcihvKSkpO2NvbnN0IHc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxybiIpO3cmJih3LnRleHRDb250ZW50PVN0cmluZyhRKSksRW8oNDUwKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYociE9PW51bGwpe1lfKCksUT1NYXRoLm1pbihTdSxNYXRoLm1heCgxLFErTnVtYmVyKHIpKSk7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm4iKTt3JiYody50ZXh0Q29udGVudD1TdHJpbmcoUSkpO2NvbnN0IEk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO0kmJihJLnRleHRDb250ZW50PVhyKCkpLGVzKDQ1MCk7cmV0dXJufWNvbnN0IHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihzIT09bnVsbCl7Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixJPXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhZGQiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/UTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxhZT10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9OmJvKCk7cSgiYWRkVG9UcmlwIix7aG90ZWw6dyxyb29tOnMscm9vbXM6SSwuLi5hZX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihpIT09bnVsbCl7Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1kYXkiKTtxKCJhZGRUb1RyaXAiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixleHRyYTppLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLC4uLnc/e2RheTp3fTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZSIpO2lmKGEhPT1udWxsKXtjb25zdCB3PVY/LmFzaz8uc29ydCxJPVY/LnZpZXc9PT0iaG90ZWxzIj9WPy5hc2s/LnF1ZXJ5OnZvaWQgMDtTcygpO2NvbnN0IGFlPVY/LnZpZXc9PT0iZGVzdGluYXRpb25zInx8ISFWPy5zdGF5Py5jaGVja0luO3EoImxpc3RIb3RlbHMiLHsuLi5hP3tjaXR5OmF9Ont9LC4uLnc/e3NvcnQ6d306e30sLi4uYSYmST97cXVlcnk6SX06e30sLi4uVj8udmlldz09PSJob3RlbHMiP2dvKFY/LmFzayk6e30sLi4uYWU/QnQoKTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCBjPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWZpbHRlciIpO2lmKGMhPT1udWxsKXtjb25zdCB3PVY/LmFzaz8/e30sST1nbyh3KTtpZihjLnN0YXJ0c1dpdGgoImJyYW5kOiIpKXtjb25zdCBjZT1jLnNsaWNlKDYpO0kuYnJhbmQ9SS5icmFuZD09PWNlP3ZvaWQgMDpjZX1lbHNlIGlmKGMuc3RhcnRzV2l0aCgiZmFjaWxpdHk6Iikpe2NvbnN0IGNlPWMuc2xpY2UoOSksUGU9SS5mYWNpbGl0aWVzPz9bXTtJLmZhY2lsaXRpZXM9UGUuaW5jbHVkZXMoY2UpP1BlLmZpbHRlcihzdD0+c3QhPT1jZSk6Wy4uLlBlLGNlXX1lbHNlKGM9PT0iZnJlZUNhbmNlbGxhdGlvbiJ8fGM9PT0iYnJlYWtmYXN0IikmJihJW2NdPSFJW2NdKTtjb25zdCBhZT1nbyhJKTtxKCJsaXN0SG90ZWxzIix7Li4uSXUodyksLi4uYWV9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGZpbHRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc29ydCIpO2lmKGwhPT1udWxsKXtUZT1rZjtjb25zdHtzb3J0OncsLi4uSX09Vj8uYXNrPz97fTtxKCJsaXN0SG90ZWxzIix7Li4uSSwuLi5sIT09Imdyb3VwIj97c29ydDpsfTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgcmVvcmRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UtYWxsIik7aWYoZCE9PW51bGwpe3EoImxpc3RIb3RlbHMiLHtjaXR5OmQsYWxsOiEwLC4uLkJ0KCl9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgbT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKG0hPT1udWxsKXtxKCJsaXN0RXh0cmFzIix7Ym9va2luZzptfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgYj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYoYiE9PW51bGwpe3EoInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6YixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCB2PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHYhPT1udWxsKXtxKCJsaXN0RXh0cmFzIix7aG90ZWw6diwuLi5ibygpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgXz10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZihfIT09bnVsbCl7cSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzpffSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZihrIT09bnVsbCl7cSgicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6a30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0ICQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZigkIT09bnVsbCl7cSgiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6JCxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBaPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoWiE9PW51bGwpe2NvbnN0IHc9Vj8udG8/P3t9LEk9Vj8uZnJvbT8/e30sYWU9Vj8uYWRkT24sY2U9dy5jaGVja0luJiYody5jaGVja0luIT09SS5jaGVja0lufHx3LmNoZWNrT3V0IT09SS5jaGVja091dCk7cSgiY2hhbmdlQm9va2luZyIse2Jvb2tpbmc6Wixjb25maXJtZWQ6ITAsLi4uY2U/e2NoZWNrSW46dy5jaGVja0luLGNoZWNrT3V0OncuY2hlY2tPdXR9Ont9LC4uLmFlPy5pZD97ZXh0cmE6YWUuaWQscXVhbnRpdHk6TnVtYmVyKGFlLnRvKX06e30sLi4udy5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKHcucm9vbXMpIT09TnVtYmVyKEkucm9vbXMpP3tyb29tczpOdW1iZXIody5yb29tcyl9Ont9LC4uLncucm9vbU5hbWUmJncucm9vbU5hbWUhPT1JLnJvb21OYW1lP3tyb29tOncucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgVD10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZihUPT09ImJhY2siKXtBdSgpO3JldHVybn1jb25zdCBLPVQ9PT0iYm9va2luZ3MiPyJib29raW5ncyI6dC5oYXNBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/YGhvdGVsOiR7dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKX1gOiIiO2lmKEsmJnBlLmxlbmd0aCYmX3MocGUuYXQoLTEpPy5wYXlsb2FkKT09PUspe0F1KCk7cmV0dXJufWlmKFQ9PT0ibW9yZS1wbGFjZXMiKXtmb3IoY29uc3QgdyBvZih0LmNsb3Nlc3QoIi5wbGFjZXMiKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jaGlwLnBsYWNlW2hpZGRlbl0iKSl3LmhpZGRlbj0hMTt0LnJlbW92ZSgpO3JldHVybn1jb25zdCBuZT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpO2lmKG5lIT09bnVsbCl7VGU9VGU9PT1uZT8iIjpuZTtmb3IoY29uc3QgdyBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbC1ib2R5XSIpKXcuaGlkZGVuPXcuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsLWJvZHkiKSE9PVRlO2Zvcihjb25zdCB3IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsXSIpKXcuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcody5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKT09PVRlKSk7cmV0dXJufWlmKFQ9PT0iY2xlYXItZmlsdGVycyIpe3EoImxpc3RIb3RlbHMiLEl1KFY/LmFzaykpLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2xlYXIgdGhlIGZpbHRlcnMuIikpO3JldHVybn1pZihUPT09ImFsbC1ob3RlbHMiKXtTcygpLHEoImxpc3RIb3RlbHMiLHthbGw6ITAsLi4uQnQoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoVD09PSJwcmljZS1saXN0Iil7RW8oMCk7cmV0dXJufWlmKFQ9PT0iZmluZC1ib29raW5nIil7Y29uc3Qgdz17dmlldzoiZmluZC1ib29raW5nIn07bW8odyksR2UodyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LmZvY3VzKCk7cmV0dXJufWlmKFQ9PT0ibG9va3VwLWJvb2tpbmciKXtjb25zdCB3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy52YWx1ZS50cmltKCk/PyIiLEk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIXd8fCFJLmluY2x1ZGVzKCJAIikpe04oIkJvdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgdGhlIGJvb2tpbmcgd2FzIG1hZGUgd2l0aCwgcGxlYXNlLiIpO3JldHVybn1xKCJsaXN0Qm9va2luZ3MiLHtib29raW5nOncsZW1haWw6SX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9vayB0aGF0IHVwLiIpKTtyZXR1cm59aWYoVD09PSJmaW5kIil7SWYoKTtyZXR1cm59aWYoVD09PSJtb3JlLWhvdGVscyIpe2NvbnN0IHc9VjtpZighd3x8dy52aWV3IT09ImhvdGVscyIpcmV0dXJuO3EoImxpc3RIb3RlbHMiLHsuLi53LmFzaz8/e30sb2Zmc2V0Ok51bWJlcih3Lm9mZnNldD8/MCkrKHcuaG90ZWxzPz9bXSkubGVuZ3RoLGxpbWl0OjIwfSx7Zm9sZDpJPT5JPy52aWV3PT09ImhvdGVscyI/ey4uLkksaG90ZWxzOlsuLi53LmhvdGVscz8/W10sLi4uSS5ob3RlbHM/P1tdXSxzaG93bjoody5ob3RlbHM/P1tdKS5sZW5ndGgrKEkuaG90ZWxzPz9bXSkubGVuZ3RoLG9mZnNldDpOdW1iZXIody5vZmZzZXQ/PzApLHBsYWNlczp3LnBsYWNlcywuLi53LndpZGVuZWQ/e3dpZGVuZWQ6dy53aWRlbmVkfTp7fX06SX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCBtb3JlIGhvdGVscy4iKSk7cmV0dXJufWlmKFQ9PT0iaG9tZSIpe3EoImxpc3RIb3RlbHMiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKChUPT09Im1lbWJlciJ8fFQ9PT0iZmluZC1ib29raW5nInx8VD09PSJhc2stc2lnbi1pbiIpJiZEdClyZXR1cm47aWYoVD09PSJtZW1iZXIiKXtpZighWSlyZXR1cm47Y29uc3Qgdz17dmlldzoibWVtYmVyIixtZW1iZXI6WX07bW8odyksR2Uodyk7cmV0dXJufWlmKFQ9PT0iYXNrLXNpZ24taW4iKXtjb25zdCB3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtpZih3KXcuaGlkZGVuPSExO2Vsc2V7Y29uc3QgST17dmlldzoibWVtYmVyLXNpZ24taW4ifTttbyhJKSxHZShJKX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZihUPT09InNpZ24taW4iKXtjb25zdCB3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsST1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCF3fHwhSSl7TigiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufXEoInNpZ25JbiIse251bWJlcjp3LHN1cm5hbWU6SX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKFQ9PT0iZm9yZ2V0LXByZWZzIil7cSgiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgVz10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYoVyE9PW51bGwpe2NvbnN0IHc9KFY/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKFcpXTt3Py5hc2s/LnRvb2w/cShTdHJpbmcody5hc2sudG9vbCksdy5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6dz8uc2F5JiZqZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHcuc2F5KX1dfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZihUPT09InNpZ24tb3V0Iil7WT1udWxsLHEoInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoVD09PSJhc2stYm9vayIpe2NvbnN0IHc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7dyYmKHcuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoVD09PSJib29rIil7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIixJPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLGFlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiLGNlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndGltZSIpPy52YWx1ZS50cmltKCk/PyIiLFBlPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcCh0cz0+dHMuZGF0YXNldC5hc2s/PyIiKSxzdD0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZih4ZT17bmFtZTp3LGVtYWlsOkksbm90ZXM6YWUsYXJyaXZpbmdBdDpjZSxyZXF1ZXN0czpQZSxyZW1lbWJlcjpzdH0sIXd8fCFJLmluY2x1ZGVzKCJAIikpe04odz8nVGhhdCBlbWFpbCBoYXMgbm8gIkAiIGluIGl0IC0gdGhlIGNvbmZpcm1hdGlvbiBuZWVkcyBhbiBhZGRyZXNzIGl0IGNhbiByZWFjaC4nOiJUaGUgYm9va2luZyBuZWVkcyBhIG5hbWUgYW5kIGFuIGVtYWlsIHRvIHNlbmQgdGhlIGNvbmZpcm1hdGlvbiB0by4iKTtyZXR1cm59cSgicmVxdWVzdEJvb2tpbmciLHtuYW1lOncsZW1haWw6SSwuLi5hZT97bm90ZXM6YWV9Ont9LC4uLmNlP3thcnJpdmluZ0F0OmNlfTp7fSwuLi5QZS5sZW5ndGg/e3JlcXVlc3RzOlBlfTp7fSwuLi5zdD97cmVtZW1iZXJSZXF1ZXN0czohMH06e319KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGFzayBmb3IgdGhvc2Ugcm9vbXMuIikpO3JldHVybn1pZihUPT09ImJvb2tpbmdzIil7cSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZihUPT09InRyaXAiKXtxKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IEg9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihIKXtjb25zdCB3PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIiksST10LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpO3cmJkkmJih6LmNoZWNrSW49dyx6LmNoZWNrT3V0PUkpLHEoImdldEhvdGVsIix7aG90ZWw6SCwuLi5ibygpLC4uLnouY2hlY2tJbiYmUT4xP3tyb29tczpRfTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtjb25zdCBUZj0oKT0+e2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKSlyZXR1cm47Y29uc3QgZT10PT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KT8udmFsdWU/PyIiO3hlPXtuYW1lOmUoImduYW1lIiksZW1haWw6ZSgiZ21haWwiKSxub3RlczplKCJnbm90ZSIpLGFycml2aW5nQXQ6ZSgiZ3RpbWUiKSxyZXF1ZXN0czpbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAodD0+dC5kYXRhc2V0LmFzaz8/IiIpLHJlbWVtYmVyOiEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkfX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5pZD8/IiI7WyJnbmFtZSIsImdtYWlsIiwiZ25vdGUiLCJndGltZSIsImdyZW1lbWJlciJdLmluY2x1ZGVzKHQpJiZUZigpfSk7Y29uc3QgQXU9KCk9Pntmb3IoO3BlLmF0KC0xKT8ucGF5bG9hZD8udmlldz09PSJtZW1iZXIiJiYhWTspcGU9cGUuc2xpY2UoMCwtMSk7Y29uc3QgZT1wZS5hdCgtMSk7aWYoIWV8fER0KXtoZigpO3JldHVybn1wZT1wZS5zbGljZSgwLC0xKSxQbys9MSxMYygpLFBmKCk7Y29uc3QgdD1lLnZlcnNpb249PT1Jbz92b2lkIDA6dV8oZS5wYXlsb2FkKTt0PyhWPWUucGF5bG9hZCxxKHQua2V5LHQuYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT5HZShlLnBheWxvYWQsITApKSk6R2UoZS5wYXlsb2FkLCEwKX0sSWY9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aGVyZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFlKXtOKCJXaGVyZSB0bz8gQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbC4iKTtyZXR1cm59U3MoKTtjb25zdCBuPShWPy5yZWdpb25zPz9bXSkuZmxhdE1hcChvPT4oby5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKHI9PltyLm5hbWUsLi4uKHIuY2l0aWVzPz9bXSkubWFwKHM9PnMubmFtZSldKSkuZmluZChvPT5vLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpO3EoImxpc3RIb3RlbHMiLHsuLi5uP3tjaXR5Om59OntxdWVyeTplfSwuLi5CdCgpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBzZWFyY2gganVzdCBub3cuIikpfSxTcz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjbyIpO2U/LnZhbHVlJiYoei5jaGVja0luPWUudmFsdWUpLHQ/LnZhbHVlJiYoei5jaGVja091dD10LnZhbHVlKSxlPy52YWx1ZSYmKFlyPSEwKX07bGV0IHpzLGx0PSExO2NvbnN0IFBmPSgpPT57Y2xlYXJUaW1lb3V0KHpzKSxsdD0hMX0sWF89ZT0+ZT8udmlldz09PSJob3RlbHMifHxlPy52aWV3PT09Im5vLWhvdGVscyImJiEhZT8uYXNrLEVvPShlPTApPT57Y2xlYXJUaW1lb3V0KHpzKSxsdD0hMCx6cz1zZXRUaW1lb3V0KCgpPT57aWYoIVhfKFYpKXtsdD0hMTtyZXR1cm59aWYoRHQpe0VvKDE1MCk7cmV0dXJufWx0PSExLHEoImxpc3RIb3RlbHMiLHsuLi53XyhWPy5hc2spLC4uLkJ0KCl9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IHByaWNlIHRob3NlIG5pZ2h0cy4iKSl9LGUpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57aWYoZS50YXJnZXQ/LmlkPT09IndoZXJlIiYmZS5rZXk9PT0iRW50ZXIiJiYhZS5pc0NvbXBvc2luZyl7ZS5wcmV2ZW50RGVmYXVsdCgpLElmKCk7cmV0dXJufWNvbnN0IHQ9ZS50YXJnZXQ7IXR8fHQuZ2V0QXR0cmlidXRlKCJyb2xlIikhPT0iYnV0dG9uInx8ZS5rZXkhPT0iRW50ZXIiJiZlLmtleSE9PSIgInx8KGUucHJldmVudERlZmF1bHQoKSx0LmNsaWNrKCkpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDt0Py50eXBlPT09ImRhdGUiJiYoWXI9ITApO2NvbnN0IG89e2RjaTpbImRjaSIsImRjbyJdLGRjbzpbImRjaSIsImRjbyJdLGxjaTpbImxjaSIsImxjbyJdLGxjbzpbImxjaSIsImxjbyJdfVt0Py5pZD8/IiJdO2lmKG8pe2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1swXSksYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzFdKTtpZighYXx8IWMpcmV0dXJuO2lmKHQuaWQ9PT1vWzBdJiZhLnZhbHVlKXtjb25zdCBsPUZlKGEudmFsdWUsMSk7Yy5taW49bCwoIWMudmFsdWV8fGMudmFsdWU8PWEudmFsdWUpJiYoYy52YWx1ZT1sKX16LmNoZWNrSW49YS52YWx1ZXx8ei5jaGVja0luLHouY2hlY2tPdXQ9Yy52YWx1ZXx8ei5jaGVja091dCxvWzBdPT09ImxjaSImJkVvKDMwMCk7cmV0dXJufWlmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIXJ8fCFzKXJldHVybjtpZih0LmlkPT09ImNpIiYmci52YWx1ZSl7Y29uc3QgYT1GZShyLnZhbHVlLDEpO3MubWluPWEsKCFzLnZhbHVlfHxzLnZhbHVlPD1yLnZhbHVlKSYmKHMudmFsdWU9YSl9ei5jaGVja0luPXIudmFsdWV8fHouY2hlY2tJbix6LmNoZWNrT3V0PXMudmFsdWV8fHouY2hlY2tPdXQ7Y29uc3QgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7aSYmKGkudGV4dENvbnRlbnQ9WHIoKSksZXMoKX0pO2NvbnN0IHhmPShlLHQpPT57dHJ5e2ZmKHQpO2NvbnN0IG49ZT9KU09OLnN0cmluZ2lmeShlKToiIjtpZihuJiZuPT09bWYmJkpTT04uc3RyaW5naWZ5KFYpPT09Z2YpcmV0dXJuO2U/LnN0YXk/LmNoZWNrSW4mJihZcj0hMCkscGU9W10sUG8rPTEsTGMoKSxQZigpLFRlPWtmLEdlKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxtZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07amUub250b29scmVzdWx0PWU9PnhmKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtqZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT5jZihlLHVmKTtqZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9amUuZ2V0SG9zdENvbnRleHQoKTtjZihlLHVmKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJnhmKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PnttZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0jY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMnB4fS5oZWFke21pbi1oZWlnaHQ6MjhweH0uaG9tZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjB9LmhvbWU6aG92ZXJ7b3BhY2l0eTouNzJ9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5iYWNrYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMXB4IDRweCA4cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LXdpZHRoOjQyJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjdXJzb3I6cG9pbnRlcn0uYmFja2J0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uaGVhZCAuc3Vie2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWlubGluZS1zdGFydDphdXRvO3RleHQtYWxpZ246ZW5kfS5oZWFkdHJpcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo1cHggMTFweCA1cHggOXB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0uaGVhZHRyaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uaGVhZCAuc3ViKy5oZWFkdHJpcHttYXJnaW4taW5saW5lLXN0YXJ0OjB9LmNhcmQuYnVzeXtvcGFjaXR5Oi42Mn0uY2FyZC5idXN5IGJ1dHRvbiwuY2FyZC5idXN5IGlucHV0LC5jYXJkLmJ1c3kgc2VsZWN0e3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1lbWJlcmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEwcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjIwO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0ubWVtYmVyY2hpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5saW5reXtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO2ZvbnQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1saW5rKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5wLXdhc3tmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnAtbWVtYmVye2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LnN1bS5nb29kIHNwYW46bGFzdC1jaGlsZHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5kZW1ve2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQ1fS5kZW1vIGJ7Zm9udC13ZWlnaHQ6NzAwfS5jaXR5Z3JvdXArLmNpdHlncm91cHttYXJnaW4tdG9wOjE0cHh9LmNpdHluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLWJvdHRvbTo4cHh9LmNpdHluYW1lIHNtYWxse2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtvcGFjaXR5Oi43NX0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9LnQtc2hvdCBpbWcsLmhlcm8gaW1ne3otaW5kZXg6MX0udC1icmFuZHt6LWluZGV4OjI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtYmxvY2stc3RhcnQ6OHB4O2luc2V0LWlubGluZS1zdGFydDo4cHg7YmFja2dyb3VuZDojMDAwMDAwNjE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbX0udC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nOjEwcHggMTFweCAxMXB4fS50LW5hbWV7Zm9udC13ZWlnaHQ6NjQwO2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS4zO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjI7bGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDoyLjZlbX0udC13aGVyZXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udC1mb290e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6OHB4O21hcmdpbi10b3A6MnB4fS50LWZyb217Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwfS50LWZyb20gc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMXB4fS5yYXRle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJhdGUgc3Zne2NvbG9yOiNlOGEzM2R9Lmhlcm97cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MjEgLyA4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0uaGVybyAudC1tYXJre2ZvbnQtc2l6ZTo0MHB4fS5oLW5hbWV7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjgwO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07bGluZS1oZWlnaHQ6MS4yNX0uaC13aGVyZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4fS5oLXN1bXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7YmFja2dyb3VuZDp2YXIoLS1iZyl9LnN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMTEycHgsMWZyKSBtaW5tYXgoMTEycHgsMWZyKSBhdXRvIDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmVuZDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnN0YXkgbGFiZWwsLnN0YXkgLmd1ZXN0c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3RheSBpbnB1dCwuc3RheSBzZWxlY3R7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6N3B4IDZweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5uaWdodHN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZy1ib3R0b206OHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RheSAuZ297d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTRweDtjdXJzb3I6cG9pbnRlcn0uc3RheSAuZ29bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOmRlZmF1bHR9LmZsZXgtZGF0ZXN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MnB4O3Njcm9sbGJhci13aWR0aDp0aGluOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5mZHtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDttaW4td2lkdGg6NzhweDtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250OmluaGVyaXQ7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyfS5mZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uZmQtZGF5e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpub3dyYXB9LmZkLXByaWNle2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjUwO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmZkLm9ue2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2N1cnNvcjpkZWZhdWx0fS5mZC5vbiAuZmQtZGF5e2NvbG9yOnZhcigtLWFjY2VudC1mZyk7b3BhY2l0eTouODV9LmZkLmJlc3R7Ym9yZGVyLWNvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmZkLmJlc3QgLmZkLXByaWNlLC5mZC5iZXN0IC5mZC1kYXl7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZmQub3V0IC5mZC1wcmljZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXdlaWdodDo1MDB9LnRodW1ie2dyaWQtYXJlYTp0aHVtYjt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtmbGV4OjAgMCBhdXRvfS50aHVtYiBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LmxlZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5sZWd7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzo5cHggMTFweH0ubGVnLndhc3tvcGFjaXR5Oi43Mn0ubGVnLndhcyAubGVndnt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5sZWdre2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmxlZ3Z7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjQwO21hcmdpbi10b3A6MnB4fS5sZWdte2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDoycHh9LnJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgcHJpY2UgYWN0aW9uIjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4IDExcHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IHByaWNlIGFjdGlvbiJ9LnJvdyAuYm9keXtncmlkLWFyZWE6Ym9keTttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHh9LnJvdyAubmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnJvdyAubWV0YXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNDtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDozO2xpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS5yb3cgLnByaWNle2dyaWQtYXJlYTpwcmljZTt0ZXh0LWFsaWduOmVuZDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnJvdyAucC10b3RhbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY2MH0ucm93IC5wLXVuaXR7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJvdyAuYWN0aW9ue2dyaWQtYXJlYTphY3Rpb259LmJhZGdlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDttYXJnaW4tdG9wOjJweH0uYmFkZ2V7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2MjA7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYmFkZ2UuZ29vZHtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmJhZGdlLndhcm57YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKX0uYmFkZ2UuYmFke2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpfS5hZGR7ZGlzcGxheTppbmxpbmUtZ3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MzhweDtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdH0uYWRkOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5hZGRbZGlzYWJsZWRde29wYWNpdHk6LjQ7Y3Vyc29yOmRlZmF1bHR9LnN0ZXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4fS5zdGVwIGJ1dHRvbnt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5zdGVwIGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZmZmYyZX0uc3RlcCAubnttaW4td2lkdGg6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2ODA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXl7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbjoxMnB4IDAgNnB4fS5zdW1ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjVweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTttYXJnaW4tdG9wOjEycHg7cGFkZGluZy10b3A6MTBweDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnN1bXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3VtLnRvdGFse2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmZvb3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi10b3A6MTJweH0uZ297ZmxleDoxO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MTFweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MTJweCAxNnB4O2N1cnNvcjpwb2ludGVyfS5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTU7Y3Vyc29yOmRlZmF1bHR9LmdvLnF1aWV0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NjIwfS5nby5kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1iYWQpO2NvbG9yOnZhcigtLWJnKX0ubm90ZXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNX0uZm9ybXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMXB4O21hcmdpbi10b3A6MTBweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZm9ybSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo4cHggOXB4fS5mb3JtIC50d297ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHh9LmNvbmZ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjE2cHggMTJweH0uY29uZiAuY29kZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MjA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb25mIC53aGVyZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMH0uY29uZiAud2hlbntmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS51bnBhaWR7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS51bnBhaWQgYntmb250LXdlaWdodDo3MjB9Lndhcm5ub3Rle2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6OXB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnRpbGUub3ZlcntvcGFjaXR5Oi44Mn0uYXNrZWQtbGluZXtmb250LXN0eWxlOml0YWxpY30uYXNrZWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmFza2VkIGJ7Zm9udC13ZWlnaHQ6NzIwO2NvbG9yOnZhcigtLWZnKX0uYXNrZWQuZmxhZ3tiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS13YXJuKX0uYXNrZWQuZmxhZyBie2NvbG9yOnZhcigtLXdhcm4pfS5hc2tze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0uYXNrcy10e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXAuYXNre2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4fS5jaGlwLmFza1thcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9Lm1vbmV5LW91dHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjYwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucHJvc2V7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOnByZS13cmFwfS5wcm9zZSBoNHttYXJnaW46MTRweCAwIDRweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmVtcHR5e2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MThweCA0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVycntiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey50aWxlc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjhweH0udC1tYXJre2ZvbnQtc2l6ZToyNHB4fS5zdGF5e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zdGF5IC5ndWVzdHN7Z3JpZC1jb2x1bW46MX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uc3RheSAuZ297Z3JpZC1jb2x1bW46Mjt3aWR0aDoxMDAlfS5yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgYWN0aW9uIiAicHJpY2UgYWN0aW9uIjtyb3ctZ2FwOjZweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IGFjdGlvbiIgInRodW1iIHByaWNlIGFjdGlvbiJ9LnJvdy53aXRodGh1bWIgLnRodW1ie3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7YWxpZ24tc2VsZjpzdGFydH0ucm93IC5wcmljZXt0ZXh0LWFsaWduOnN0YXJ0fS5mb3JtIC50d297Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19LmNtcC13cmFwe292ZXJmbG93LXg6YXV0bzttYXJnaW4taW5saW5lOi0ycHg7cGFkZGluZzoycHh9LmNtcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg3NnB4LDk2cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTEycHgsMWZyKSk7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOjhweH0uY21wLWNvcm5lcntncmlkLWNvbHVtbjoxfS5jbXAtaGVhZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjttaW4td2lkdGg6MH0uY21wLWhlYWQucGlja3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQpfS5jbXAtaGVhZCAudC1zaG90e2FzcGVjdC1yYXRpbzoxNiAvIDk7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmNvbC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nOjEwcHggMTFweCAxMnB4fS5jb2wtbmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmNvbC1wcmljZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb2wtcHJpY2Ugc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS53aHl7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLWlubGluZS1zdGFydDoycHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZy1pbmxpbmUtc3RhcnQ6OHB4fS5wY3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHg7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1fS5wYyBkaXZ7ZGlzcGxheTpmbGV4O2dhcDo1cHh9LnBjIC5te2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NzAwfS5wYyAucHJvIC5te2NvbG9yOnZhcigtLWdvb2QpfS5wYyAuY29uIC5te2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jbXAgLmssLmNtcCAudntmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDU7cGFkZGluZzo2cHggOHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNtcCAua3tncmlkLWNvbHVtbjoxO2NvbG9yOnZhcigtLWZnLXNvZnQpO3Bvc2l0aW9uOnN0aWNreTtpbnNldC1pbmxpbmUtc3RhcnQ6MDtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uY21wIC52e2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY21wIC52LmFsdCwuY21wIC5rOmhhcygrLnYuYWx0KXtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6NnB4fS5waWNrbWFya3tiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7cGFkZGluZzozcHggOHB4O3RleHQtYWxpZ246Y2VudGVyfS5kYXlze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH0uZGF5cm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MjhweCAxZnI7Z2FwOjEwcHh9LmRheW51bXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4fS5kYXludW0gYntkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheW51bSBpe2ZsZXg6MTt3aWR0aDoxcHg7YmFja2dyb3VuZDp2YXIoLS1saW5lKX0uZGF5cm93Omxhc3QtY2hpbGQgLmRheW51bSBpe2Rpc3BsYXk6bm9uZX0uZGF5Ym9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTRweDttaW4td2lkdGg6MH0uZGF5bGFiZWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5kYXlub3Rle2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19LnN1Z2dlc3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWFyZ2luLXRvcDoxNHB4fS5zdWdnZXN0IC5jaGlwe2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweCAxMXB4O2NvbG9yOnZhcigtLWZnKX0uc3VnZ2VzdCAuY2hpcDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uc3VnZ2VzdCAuY2hpcDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb3JtIGxhYmVsLnJlbWVtYmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Zm9udC13ZWlnaHQ6NDAwO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowfS5mb3JtIGxhYmVsLnJlbWVtYmVyIGlucHV0e21hcmdpbjoycHggMCAwfS5wbGFjZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXAucGxhY2V7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4IDEwcHg7Y29sb3I6dmFyKC0tZmcpfS5jaGlwLnBsYWNlIHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY2hpcC5wbGFjZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uY2hpcC5wbGFjZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5zdWdnZXN0IC5jaGlwLnNheSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZmluZGVye2Rpc3BsYXk6ZmxleDtnYXA6OHB4fS5maW5kZXIgaW5wdXR7ZmxleDoxO21pbi13aWR0aDowO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtwYWRkaW5nOjlweCAxMnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKX0uZmluZGVyIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnJlZ2lvbntkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LmNvdW50cnluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDo2cHh9LmNvdW50cnluYW1lIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzowO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdHtkaXNwbGF5OmdyaWQ7Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5kZXN0Omxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTowfS5kZXN0LWNvdW50cnl7anVzdGlmeS1zZWxmOnN0YXJ0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5kZXN0LWNvdW50cnkgc21hbGx7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5kZXN0LWNvdW50cnkgLm57Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0LWNvdW50cnk6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uZGVzdC1jb3VudHJ5OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LmZpbmRlciAuZ297ZmxleDpub25lO3BhZGRpbmc6OXB4IDE4cHg7Zm9udC1zaXplOjEzcHh9LnNvcnRzLWt7YWxpZ24tc2VsZjpjZW50ZXI7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tcmlnaHQ6MnB4fS5jaGlwLnNvcnRbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5zZWFyY2h7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zZWFyY2ggLnN0YXl7cGFkZGluZzowO2JhY2tncm91bmQ6bm9uZX0uc2VhcmNoIC53aGVyZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc2VhcmNoIC53aGVyZSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OXB4IDExcHh9LnNlYXJjaCAud2hlcmUgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0uc2VhcmNoIC5zdGF5IC5nb3twYWRkaW5nOjlweCAxNHB4O2ZvbnQtc2l6ZToxM3B4fS50LXRhZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo0cHg7bWFyZ2luLXRvcDo0cHh9LnQtZnJvbS50LW5vbmV7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4fS5zdGF5IC5nby5xdWlldHtwYWRkaW5nOjhweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHh9LmZpbHRlci1wYW5lbHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LmZncm91cHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDthbGlnbi1pdGVtczpjZW50ZXJ9LnQtZnJvbSAudC1zdWJ7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjFweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXSBzbWFsbHtjb2xvcjppbmhlcml0fS5jaGlwLnRvb2x7Zm9udC13ZWlnaHQ6NjAwfS5jaGlwLnRvb2xbYXJpYS1leHBhbmRlZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWQiPgogICAgICAgIDwhLS0gVGhlIGdyb3VwJ3Mgd29yZG1hcmsgYXJyaXZlcyBXSVRIIFRIRSBEQVRBIGFzIGBsb2dvVXJsYC4gTm90aGluZyBpcwogICAgICAgICAgICAgYmFrZWQgaW4gaGVyZTogYSBsb2dvIGNvbXBpbGVkIGludG8gdGhlIGNhcmQgaXMgdGhlIGZpcnN0IGJyYW5kJ3MsCiAgICAgICAgICAgICBhbmQgZXZlcnkgaG90ZWwgZ3JvdXAgYWZ0ZXIgdGhlbSB3b3VsZCB3ZWFyIGl0LiAtLT4KICAgICAgICA8IS0tIFRoZSB3YXkgYmFjaywgb24gZXZlcnkgdmlldy4gV2l0aG91dCBpdCB0aGUgdHJpcCwgdGhlIGJvb2tpbmdzIGxpc3QKICAgICAgICAgICAgIGFuZCBhIGNhbmNlbGxlZCBib29raW5nIGFyZSBhbGwgcGxhY2VzIGEgZ3Vlc3QgY2FuIHJlYWNoIGFuZCBub3QKICAgICAgICAgICAgIGxlYXZlIChyb2JpbiwgMjAyNi0wOS0xOCkuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhvbWUiIGlkPSJob21lIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIiBhcmlhLWxhYmVsPSJCYWNrIHRvIHRoZSBob3RlbHMiPgogICAgICAgICAgPGltZyBjbGFzcz0iYnJhbmQiIGlkPSJicmFuZCIgYWx0PSIiIGhpZGRlbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSIgaWQ9InRpdGxlIj48L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgICAgPCEtLSBPbmUgc3RlcCBiYWNrIElOU0lERSB0aGUgY2FyZC4gVGhlIGJyYW5kIGFib3ZlIGdvZXMgaG9tZSwgd2hpY2ggaXMgYQogICAgICAgICAgICAgZGlmZmVyZW50IGFuc3dlcjsgdGhpcyBjb21lcyBiYWNrIHRvIHRoZSBvbmUgdGhleSB3ZXJlIHJlYWRpbmcgLSB0aGUKICAgICAgICAgICAgIHRocmVlIGhvdGVscyB0aGV5IHdlcmUgY29tcGFyaW5nIHdoZW4gdGhleSB0YXBwZWQgb25lIChyb2JpbiwKICAgICAgICAgICAgIDIwMjYtMDktMjEpLiBIaWRkZW4gdW5sZXNzIHRoZXJlIGlzIHNvbWV3aGVyZSB0byBnbyBiYWNrIHRvLCBhbmQKICAgICAgICAgICAgIGNsZWFyZWQgd2hlbmV2ZXIgdGhlIGNvbnZlcnNhdGlvbiBzZW5kcyBhIG5ldyBhbnN3ZXIuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJhY2tidG4iIGlkPSJiYWNrYnRuIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJiYWNrIiBoaWRkZW4+PC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9InN1YiIgaWQ9InN1YiI+PC9zcGFuPgogICAgICAgIDwhLS0gVGhlIHRpZXIsIG9yIHRoZSB3YXkgaW4uIEEgbWVtYmVyIHJhdGUgaXMgYSBmYWN0IGFib3V0IGV2ZXJ5IHByaWNlCiAgICAgICAgICAgICBvbiB0aGUgY2FyZCwgc28gaXQgYmVsb25ncyBpbiB0aGUgaGVhZGVyIHJhdGhlciB0aGFuIG9uIG9uZSB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW1iZXJjaGlwIiBpZD0ibWVtYmVyY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPjwvYnV0dG9uPgogICAgICAgIDwhLS0gVGhlIHRyaXAsIGZyb20gdGhlIHRvcC4gVGhlIHNob3BwaW5nIGNhcmQgbGVhcm5lZCBvbiAyMDI2LTA5LTE3IHRoYXQKICAgICAgICAgICAgIGEgZm9vdGVyLW9ubHkgY2FydCBtZWFucyBzY3JvbGxpbmcgcGFzdCB0d2VudHkgdGlsZXMgdG8gcmVhY2ggaXQuCiAgICAgICAgICAgICBTaG93biBvbmNlIHRoZSB0cmlwIGhhcyBzb21ldGhpbmcgaW4gaXQsIGhpZGRlbiBvbiB0aGUgdHJpcCB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkdHJpcCIgaWQ9ImhlYWR0cmlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIiBoaWRkZW4gYXJpYS1sYWJlbD0iVmlldyB0aGUgdHJpcCI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIKICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQgOC41aDE2djExYTEuNSAxLjUgMCAwIDEtMS41IDEuNWgtMTNBMS41IDEuNSAwIDAgMSA0IDE5LjV6IiAvPgogICAgICAgICAgICA8cGF0aCBkPSJNOSA4LjVWNmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyLjUiIC8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDxzcGFuIGlkPSJoZWFkdHJpcG4iPjA8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250ZW50Ij48ZGl2IGNsYXNzPSJlbXB0eSI+TG9hZGluZ+KApjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==', 'base64').toString('utf8');
5
+ export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgRWY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLE9mPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxGYz17fSxBZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAoZD0+e2lmKGQ9T2YoZCxvKSxkIGluIEZjKXJldHVybjtGY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOkVmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBSZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBaZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBSbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIE5mKGUpe31mdW5jdGlvbiBqZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIE1mKGUpe31mdW5jdGlvbiBscyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBkcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+eHMobikpLmpvaW4odCl9ZnVuY3Rpb24gX28oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIHFme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gdG4oZSl7cmV0dXJuIG5ldyBxZihlKX1mdW5jdGlvbiBJcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBxZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gWnUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgSGM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gTnUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1IYylyZXR1cm4gbz09PXZvaWQgMCYmKG89SGMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIERmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gbnQoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBabyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBFZShlKXtyZXR1cm4gWm8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24ganUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBudCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBNdShlLHQsbil7dCBpbiBlP250KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gUWUoZSx0LG4sbyl7Y29uc3Qgcj1FZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9qdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpNdShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBMZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/anUoZSxuLCgpPT50W25dKTpNdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBVZihlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gRmYoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gSGYoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIEJmKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gcXUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIER1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgUHM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gcHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IEx1PXRuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gTGUoZSl7aWYocHQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHB0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIExlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gVmYoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgSmY9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LGtvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksVXU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBHKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBLZihlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBGdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEh1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxCdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gVnUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gUWUocyxlLGpvKGUsdCkpLEcoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBqbyhlLHQpe2NvbnN0IG49RWUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBKdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoam8oZSx0KSksaT17fTtyZXR1cm4gUWUoaSxlLFJlZmxlY3Qub3duS2V5cyhFZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEcoZSx1ZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBLdShlLHQpe2lmKCFMZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1FZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gRyhlLHVlKGUuX3pvZC5kZWYse3NoYXBlOld1KGUsdCl9KSl9ZnVuY3Rpb24gV3UoZSx0KXtjb25zdCBuPXt9O3JldHVybiBRZShuLGUsUmVmbGVjdC5vd25LZXlzKEVlKGUpKSksTGYobix0KSxufWZ1bmN0aW9uIEd1KGUsdCl7aWYoIUxlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBHKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6V3UoZSx0KX0pKX1mdW5jdGlvbiBRdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtRZShuLGUsUmVmbGVjdC5vd25LZXlzKEVlKGUpKSksUWUobix0LFJlZmxlY3Qub3duS2V5cyhFZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBHKGUsbyl9ZnVuY3Rpb24gcHMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KGpvKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBRZShjLHQsUmVmbGVjdC5vd25LZXlzKEVlKHQpKSxlJiYoKGwsZCk9PmEmJiFhLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLEcodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBZdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoam8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIFFlKHIsdCxSZWZsZWN0Lm93bktleXMoRWUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEcodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGhlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWHUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIGl0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIGhzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiAkZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOml0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9pdChzPy4oZSkpPz9pdCh0Py5lcnJvcj8uKGUpKT8/aXQobi5jdXN0b21FcnJvcj8uKGUpKT8/aXQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IFdmPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIHFvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIVdmLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gRG8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIGVsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gaHQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBHZihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gdGwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIG5sKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gUWYoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gdGwodCtuKX1mdW5jdGlvbiBZZihlKXtyZXR1cm4gbmwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIFhmKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBlbShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyB0bXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIG9sKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6bm0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBBZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBMbyhlLHQsbil7cmV0dXJuIEFlKGUsdCxuLCExKX1mdW5jdGlvbiBubihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gQWUodGhpcyxuLG8odGhpcykpfSxzZXQocil7QWUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIG5tKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpBZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe0FlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBvbShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IHJzLE1lPSExO2NvbnN0IHJtPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7TWU9ITB9fTtmdW5jdGlvbiBBKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmcnMhPT1lLl96b2Qpe3JzPXZvaWQgMDtyZXR1cm59cnM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHJtKTtjb25zdCByPU1lO01lPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIE1lP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksTWU9TWV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxNZT1NZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gcmwoZSx0LG4sbyl7Y29uc3Qgcj1vbShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IHNsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gQ3MoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtzbF09ITAsdH1jb25zdCBFcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6QnUsQ09OU1RBTlRfQ0FUQ0g6c2wsQ2xhc3M6dG0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6SHUsYWJvcnRlZDpoZSxhbGxvd3NFdmFsOkx1LGFzc2VydDpNZixhc3NlcnRFcXVhbDpSZixhc3NlcnRJczpOZixhc3NlcnROZXZlcjpqZixhc3NlcnROb3RFcXVhbDpaZixhc3NpZ25Qcm9wOm50LGF0dGFjaFNjaGVtYTpocyxiYXNlNjRUb1VpbnQ4QXJyYXk6dGwsYmFzZTY0dXJsVG9VaW50OEFycmF5OlFmLGNhY2hlZDp0bixjYXB0dXJlU3RhY2tUcmFjZTpQcyxjbGVhbkVudW06R2YsY2xlYW5SZWdleDpxZSxjbG9uZTpHLGNsb25lRGVmOlVmLGNvZGVQb2ludExlbmd0aDpxbyxjb25zdGFudENhdGNoOkNzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6S2YsZGVmaW5lTGF6eTpOdSxkZWZpbmVMYXp5SW50ZXJuYWw6QSxkZXJpdmVkOm5uLGVzYzpxdSxlc2NhcGVSZWdleDpPZSxleHBsaWNpdGx5QWJvcnRlZDpYdSxleHRlbmQ6S3UsZmluYWxpemVJc3N1ZTokZSxmbG9hdFNhZmVSZW1haW5kZXI6WnUsZ2V0RWxlbWVudEF0UGF0aDpGZixnZXRFbnVtVmFsdWVzOmxzLGdldExlbmd0aGFibGVPcmlnaW46RG8sZ2V0UGFyc2VkVHlwZTpKZixnZXRTaXphYmxlT3JpZ2luOk1vLGhleFRvVWludDhBcnJheTpYZixoaWRlOkxvLGluc3RhbGxMYXp5UHJvcDpybCxpc09iamVjdDpwdCxpc1BsYWluT2JqZWN0OkxlLGlzc3VlOmh0LGpvaW5WYWx1ZXM6ZHMsanNvblN0cmluZ2lmeVJlcGxhY2VyOl9vLG1lbWJlcnM6b2wsbWVyZ2U6UXUsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6SXMsbnVtS2V5czpWZixvYmplY3RDbG9uZTpEZixvbWl0Okp1LG9wdGlvbmFsS2V5czpGdSxvd246QWUscGFyc2VkVHlwZTplbCxwYXJ0aWFsOnBzLHBpY2s6VnUscHJlZml4SXNzdWVzOl9lLHByaW1pdGl2ZVR5cGVzOlV1LHByb21pc2VBbGxPYmplY3Q6SGYscHJvcGVydHlLZXlUeXBlczprbyxyYW5kb21TdHJpbmc6QmYscmF3U2hhcGU6Wm8scmVxdWlyZWQ6WXUsc2FmZUV4dGVuZDpHdSxzaGFsbG93Q2xvbmU6Tm8sc2x1Z2lmeTpEdSxzdHJpbmdpZnlQcmltaXRpdmU6eHMsdG9ab2Q6Um8sdWludDhBcnJheVRvQmFzZTY0Om5sLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpZZix1aW50OEFycmF5VG9IZXg6ZW0sdW53cmFwTWVzc2FnZTppdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgQmM7Y29uc3QgT3M9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLHNzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFZjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIHNtKGUpe2NvbnN0IHQ9VmM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBWYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyhiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7c3MudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixzcyl9ZmluYWxseXtzcy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxhKXtjb25zdCBrPU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBaPWs7Zm9yKDtaJiZaIT09JDspWj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoWik7Y29uc3QgVD1aPz9rO2EuaGFzKFQpfHwoYS5hZGQoVCksb2woVCxpKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgayBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLGspJiYoayBpbiBifHwoYltrXT1fW2tdLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P3NtKGQpOnRoaXM7Yyh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgaz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gayYmayh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBBcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIERlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFVvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShCYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhCYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIGVlKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIGltKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZixfbywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIGFtKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgY209e2dldDppbSxzZXQ6YW0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LGlzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sSmM9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksaWw9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIsaXMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixpcyksaXMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixjbSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7SmMuaGFzKG4pfHwoSmMuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LGFsPXAoIiRab2RFcnJvciIsaWwpLHZlPXAoIiRab2RFcnJvciIsaWwsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiB1bShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIEZvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/dW0obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIEhvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAoYT0+byh7aXNzdWVzOmF9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCBhPVsuLi5zLC4uLmkucGF0aF07aWYoYS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoaSkpO2Vsc2V7bGV0IGM9bixsPTA7Zm9yKDtsPGEubGVuZ3RoOyl7Y29uc3QgZD1hW2xdLG09bD09PWEubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmYy5fZXJyb3JzLnB1c2godChpKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPWNbZF07bSYmYi5fZXJyb3JzLnB1c2godChpKSksYz1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBScyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgaTtmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoYz0+byh7aXNzdWVzOmN9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBjPVsuLi5zLC4uLmEucGF0aF07aWYoYy5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoYSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDxjLmxlbmd0aDspe2NvbnN0IG09Y1tkXSxiPWQ9PT1jLmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGk9bC5pdGVtcylbbV0/PyhpW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChhKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gY2woZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIFpzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke2NsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIEJvKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3Qgb249ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGE9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGkpO2lmKGEgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBEZTtpZihhLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IGM9bmV3KHM/LkVycj8/ZSkoYS5pc3N1ZXMubWFwKGw9PiRlKGwsaSxlZSgpKSkpO3Rocm93IFBzKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sZnM9b24odmUpLHJuPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSYmKGE9YXdhaXQgYSksYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcChsPT4kZShsLGksZWUoKSkpKTt0aHJvdyBQcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LG1zPXJuKHZlKSxzbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBEZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP2xsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sdWw9c24odmUpO2Z1bmN0aW9uIGxsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+JGUocixuLGVlKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBhbj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP2xsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sbG09YW4odmUpLGRtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSxwbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLFZvPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09ZG0pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBobShlLHQsbil9KTtmdW5jdGlvbiBobShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1twbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBEZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBKbz1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LE5zPWU9Pntjb25zdCB0PW9uKGUpLG49KG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixhLEJvKG4saSkpfTtyZXR1cm4gbn0sZm09TnModmUpLGpzPWU9Pntjb25zdCB0PW9uKGUpLG49KG8scixzLGkpPT50KG8scixzLEJvKG4saSkpO3JldHVybiBufSxtbT1qcyh2ZSksTXM9ZT0+e2NvbnN0IHQ9cm4oZSksbj1hc3luYyhvLHIscyxpKT0+e2NvbnN0IGE9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsYSxCbyhuLGkpKX07cmV0dXJuIG59LGdtPU1zKHZlKSxxcz1lPT57Y29uc3QgdD1ybihlKSxuPWFzeW5jKG8scixzLGkpPT5hd2FpdCB0KG8scixzLEJvKG4saSkpO3JldHVybiBufSxibT1xcyh2ZSksRHM9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gc24oZSkodCxuLHIpfSx2bT1Ecyh2ZSksTHM9ZT0+KHQsbixvKT0+c24oZSkodCxuLG8pLHltPUxzKHZlKSxVcz1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGFuKGUpKHQsbixyKX0sX209VXModmUpLEZzPWU9PmFzeW5jKHQsbixvKT0+YW4oZSkodCxuLG8pLGttPUZzKHZlKSxkbD0vXltjQ11bMC05YS16XXs2LH0kLyxwbD0vXlswLTlhLXpdKyQvLGhsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLGZsPS9eWzAtOWEtdkEtVl17MjB9JC8sbWw9L15bQS1aYS16MC05XXsyN30kLyxnbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gYmwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IHZsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLHdtPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8seWw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLGZ0PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLywkbT1mdCg0KSxTbT1mdCg2KSx6bT1mdCg3KSxfbD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxUbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxJbT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxrbD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxQbT1rbCx4bT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxDbT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIHdsKCl7cmV0dXJuIG5ldyBSZWdFeHAoQ20sInUiKX1jb25zdCAkbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sU2w9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyx6bD1lPT57Y29uc3QgdD1PZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxUbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sSWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sRW09L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sT209L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLFBsPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyx4bD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sSHM9L15odHRwcz8kLyxDbD0vXlwrWzEtOV1cZHs2LDE0fSQvLEJzPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxFbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxWcz0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxPbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gQW0oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IEFsPUFtKE9sKTtmdW5jdGlvbiBncyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIFJsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtncyhlKX0kYCl9ZnVuY3Rpb24gWmwoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke2dzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7Z3Moe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7T2x9VCg/OiR7b30pJGApfWNvbnN0IE5sPS9eW1xzXFNdezAsfSQvLGpsPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LE1sPS9eLT9cZCtuPyQvLHFsPS9eLT9cZCskLyxLbz0vXi0/XGQrKD86XC5cZCspPyQvLERsPS9eKD86dHJ1ZXxmYWxzZSkkL2ksTGw9L15udWxsJC9pLFVsPS9edW5kZWZpbmVkJC9pLEZsPS9eW15BLVpdKiQvLEhsPS9eW15hLXpdKiQvLEJsPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gY24oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIHVuKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBSbT0vXlswLTlhLWZBLUZdezMyfSQvLFptPWNuKDIyLCI9PSIpLE5tPXVuKDIyKSxqbT0vXlswLTlhLWZBLUZdezQwfSQvLE1tPWNuKDI3LCI9IikscW09dW4oMjcpLERtPS9eWzAtOWEtZkEtRl17NjR9JC8sTG09Y24oNDMsIj0iKSxVbT11big0MyksRm09L15bMC05YS1mQS1GXXs5Nn0kLyxIbT1jbig2NCwiIiksQm09dW4oNjQpLFZtPS9eWzAtOWEtZkEtRl17MTI4fSQvLEptPWNuKDg2LCI9PSIpLEttPXVuKDg2KSxXbz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOk5sLGJhc2U2NDpFbSxiYXNlNjR1cmw6T20sYmlnaW50Ok1sLGJvb2xlYW46RGwsYnJvd3NlckVtYWlsOnhtLGNpZHJ2NDpUbCxjaWRydjY6SWwsY3JlZGl0Q2FyZDpCcyxjdWlkOmRsLGN1aWQyOnBsLGN1cnJlbmN5Q29kZTpFbCxkYXRlOkFsLGRhdGV0aW1lOlpsLGRvbWFpbjp4bCxkdXJhdGlvbjp2bCxlMTY0OkNsLGVtYWlsOl9sLGVtb2ppOndsLGV4dGVuZGVkRHVyYXRpb246d20sZ3VpZDp5bCxoZXg6QmwsaG9zdG5hbWU6UGwsaHRtbDVFbWFpbDpUbSxodHRwUHJvdG9jb2w6SHMsaWJhbjpWcyxpZG5FbWFpbDpQbSxpbnRlZ2VyOnFsLGlwdjQ6JGwsaXB2NjpTbCxrc3VpZDptbCxsb3dlcmNhc2U6RmwsbWFjOnpsLG1kNV9iYXNlNjQ6Wm0sbWQ1X2Jhc2U2NHVybDpObSxtZDVfaGV4OlJtLG5hbm9pZDpnbCxuYW5vaWRPZkxlbmd0aDpibCxudWxsOkxsLG51bWJlcjpLbyxyZmM1MzIyRW1haWw6SW0sc2hhMV9iYXNlNjQ6TW0sc2hhMV9iYXNlNjR1cmw6cW0sc2hhMV9oZXg6am0sc2hhMjU2X2Jhc2U2NDpMbSxzaGEyNTZfYmFzZTY0dXJsOlVtLHNoYTI1Nl9oZXg6RG0sc2hhMzg0X2Jhc2U2NDpIbSxzaGEzODRfYmFzZTY0dXJsOkJtLHNoYTM4NF9oZXg6Rm0sc2hhNTEyX2Jhc2U2NDpKbSxzaGE1MTJfYmFzZTY0dXJsOkttLHNoYTUxMl9oZXg6Vm0sc3RyaW5nOmpsLHRpbWU6UmwsdWxpZDpobCx1bmRlZmluZWQ6VWwsdW5pY29kZUVtYWlsOmtsLHVwcGVyY2FzZTpIbCx1dWlkOmZ0LHV1aWQ0OiRtLHV1aWQ2OlNtLHV1aWQ3OnptLHhpZDpmbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxKPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxKcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFJcyh0KSYmdC5zaXplIT09dm9pZCAwfSxLcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFJcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LHdvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LFdzPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49d29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOndvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEdzPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49d29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOndvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVmw9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6WnUobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxKbD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Si5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPUh1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9aT0+e2NvbnN0IGE9aS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihhKSl7aS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDphLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoYSkpe2E+MD9pLmlzc3Vlcy5wdXNoKHtpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTppLmlzc3Vlcy5wdXNoKHtpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19YTxyJiZpLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksYT5zJiZpLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEtsPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdFtuLG9dPUJ1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksV2w9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUpzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOk1vKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEdsPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1KcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpNbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFFsPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1KcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgaT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46TW8ociksLi4uaT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxZbD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1LcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9xbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBhPURvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjphLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFhsPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUtzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9xbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBhPURvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksZWQ9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49S3MpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsaT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP3FvKHIpOnM7aWYoaT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBhPURvKHIpLGM9aT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSwuLi5jP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxsbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztKLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSx0ZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pntsbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxuZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUZsKSxsbi5pbml0KGUsdCl9KSxvZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUhsKSxsbi5pbml0KGUsdCl9KSxyZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPU9lKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxzZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7T2UodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxpZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtPZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiAkbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLl9lKG4sZS5pc3N1ZXMpKX1jb25zdCBhZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT4kbyhyLG4sdC5wcm9wZXJ0eSkpOyRvKG8sbix0LnByb3BlcnR5KX19KSxjZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e0ouaW5pdChlLHQpLExvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChpPT5baSx0LnNoYXBlW2ldXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbaSxhXW9mIG4pe2NvbnN0IGM9YS5fem9kLnJ1bih7dmFsdWU6cltpXSxpc3N1ZXM6W119LHt9KTtjIGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaChjLnRoZW4obD0+JG8obCxvLGkpKSkpOiRvKGMsbyxpKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksdWQ9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxsZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Si5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgZGR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihpPT5pKSxyPU1hdGgubWluKC4uLm8ubWFwKGk9PmkubGVuZ3RoLWkudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChpPT5pLnNsaWNlKHIpKS5tYXAoaT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKStpKTtmb3IoY29uc3QgaSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGkpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCBwZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LHg9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPXBkO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgaSBvZiBzLl96b2Qub25hdHRhY2gpaShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShhLGMsbCk9PntpZihhLm1lbW8pcmV0dXJuIGE7bGV0IGQ9aGUoYSksbTtmb3IoY29uc3QgYiBvZiBjKXtpZihiLl96b2QuZGVmLndoZW4pe2lmKFh1KGEpfHwhYi5fem9kLmRlZi53aGVuKGEpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWEuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhhKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgRGU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8sYS5pc3N1ZXMubGVuZ3RoIT09diYmKGhzKGEuaXNzdWVzLHYsZSksZHx8KGQ9aGUoYSx2KSkpfSk7ZWxzZXtpZihhLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO2hzKGEuaXNzdWVzLHYsZSksZHx8KGQ9aGUoYSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+YSk6YX0saT0oYSxjLGwpPT57aWYoaGUoYSkpcmV0dXJuIGEuYWJvcnRlZD0hMCxhO2NvbnN0IGQ9cyhjLHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRGU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShhLGMpPT57aWYoYy5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoYSxjKTtpZihjLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTphLnZhbHVlLGlzc3VlczpbXX0sey4uLmMsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+aShtLGEsYykpOmkoZCxhLGMpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGEsYyk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGMuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRGU7cmV0dXJuIGwudGhlbihkPT5zKGQscixjKSl9cmV0dXJuIHMobCxyLGMpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBMbyh0aGlzLCJ+c3RhbmRhcmQiLFFzKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7QWUodGhpcywifnN0YW5kYXJkIixlKX19KSxoZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PiRlKG4sdCxlZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBXbShlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gaGQoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIFFzKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gaGQobyxuKX1jYXRjaHt9cmV0dXJuIFdtKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IGRuPXAoIiRab2RTdHJpbmciLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9ObCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEY9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pntsbi5pbml0KGUsdCksZG4uaW5pdChlLHQpfSksZmQ9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXlsKSxGLmluaXQoZSx0KX0pLG1kPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZnQobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWZ0KCkpO0YuaW5pdChlLHQpfSksZ2Q9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1fbCksRi5pbml0KGUsdCl9KSxZcz0xLEt0PTI7ZnVuY3Rpb24gWHMoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBiZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP1hzKGUpfHxLdDp2ZChlLHQpfWZ1bmN0aW9uIHZkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1Icy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gWXM7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/S3R9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIEt0fX1jb25zdCBHbT0vW1x0XG5ccl0vZztmdW5jdGlvbiBicyhlKXtyZXR1cm4gZS5yZXBsYWNlKEdtLCIiKX1mdW5jdGlvbiB5ZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBfZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBrZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1iZChvLHQpO2lmKHI9PT1Zcyl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1LdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9YnMobyk7cmV0dXJufXQuaG9zdG5hbWUmJiF5ZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhX2Qocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6YnMobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksd2Q9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj13bCgpKSxGLmluaXQoZSx0KX0pLCRkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9nbDpibCh0Lmxlbmd0aCkpLEYuaW5pdChlLHQpfSksU2Q9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWRsKSxGLmluaXQoZSx0KX0pLHpkPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cGwpLEYuaW5pdChlLHQpfSksVGQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWhsKSxGLmluaXQoZSx0KX0pLElkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWZsKSxGLmluaXQoZSx0KX0pLFBkPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bWwpLEYuaW5pdChlLHQpfSkseGQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1abCh0KSksRi5pbml0KGUsdCl9KSxDZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QWwpLEYuaW5pdChlLHQpfSksRWQ9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVJsKHQpKSxGLmluaXQoZSx0KX0pLE9kPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dmwpLEYuaW5pdChlLHQpfSksQWQ9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPSRsKSxGLmluaXQoZSx0KX0pLFFtPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBlaShlKXtyZXR1cm4gUW0udGVzdChlKT9YcyhgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IFJkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1TbCksRi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntlaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxaZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj16bCh0LmRlbGltaXRlcikpLEYuaW5pdChlLHQpfSksTmQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VGwpLEYuaW5pdChlLHQpfSk7ZnVuY3Rpb24gamQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOmVpKG4pfWNvbnN0IE1kPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUlsKSxGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2pkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gdGkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBxZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sRGQ9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cWQpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dGkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxuaT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gTGQoZSl7aWYoIW5pLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gdGkobil9Y29uc3QgVWQ9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bmkpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57TGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxGZD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Q2wpLEYuaW5pdChlLHQpfSksWW09L1stIF0vZztmdW5jdGlvbiBYbShlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBIZChlKXtyZXR1cm4gQnMudGVzdChlKT9YbShlLnJlcGxhY2UoWW0sIiIpKTohMX1jb25zdCBCZD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QnMpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57SGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGVnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIFZkKGUpe3JldHVybiBWcy50ZXN0KGUpP2VnKGUpOiExfWNvbnN0IEpkPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1WcyksRi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntWZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBLZChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IFdkPXAoIiRab2RKV1QiLChlLHQpPT57Ri5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntLZChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEdkPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57Ri5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksb2k9cCgiJFpvZE51bWJlciIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1LbyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxRZD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e0psLmluaXQoZSx0KSxvaS5pbml0KGUsdCl9KSxyaT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1EbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHNpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49TWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxZZD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0tsLmluaXQoZSx0KSxzaS5pbml0KGUsdCl9KSxYZD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxlcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVVsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHRwPXAoIiRab2ROdWxsIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPUxsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxucD1wKCIkWm9kQW55IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksb3A9cCgiJFpvZFVua25vd24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxycD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxzcD1wKCIkWm9kVm9pZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGlwPXAoIiRab2REYXRlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gS2MoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5fZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IGFwPXAoIiRab2RBcnJheSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgaT1bXSxhPXI/LmFib3J0RWFybHk7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspe2NvbnN0IGw9c1tjXSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaChkLnRoZW4obT0+S2MobSxvLGMpKSk7ZWxzZSBpZihLYyhkLG8sYyksYSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmaGUoZCkpYnJlYWt9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gU28oZSx0LG4sbyxyLHMpe2NvbnN0IGk9biBpbiBvLGE9cz09PSJvcHRpb25hbCI7aWYoISghaSYmYSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmEmJiFpKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLl9lKG4sZS5pc3N1ZXMpKX1pZighaSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGl8fHI9PT0iZGVmYXVsdGVkIiYmIWEpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgdGc9W107ZnVuY3Rpb24gY3AoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOnRnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgaSBvZiByKWlmKCFlLnNoYXBlPy5baV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoaSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1GdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIHVwKGUsdCxuLG8scixzLGkpe2NvbnN0IGE9W10sYz1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihpJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihoZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKGMuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmEucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7YS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IGs9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2goay50aGVuKCQ9PlNvKCQsbixfLHQsbSxiKSkpOlNvKGssbixfLHQsbSxiKX1yZXR1cm4gYS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmEsaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IGxwPXAoIiRab2RPYmplY3QiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9dG4oKCk9PmNwKHQpKTtBKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHxudChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPXB0LGk9dC5jYXRjaGFsbDtsZXQgYTtjb25zdCBjPWRlLm1lbW9pemVyO2M/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PnthPz8oYT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9Yz9jLmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9YS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IGs9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGEuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09ayl7aWYoaGUobCxrKSlicmVhaztrPWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgWj12WyRdLFQ9Wi5fem9kLm9wdGluLEs9Wi5fem9kLm9wdG91dCxuZT1aLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7bmUgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChuZS50aGVuKFc9PlNvKFcsbCwkLG0sVCxLKSkpOlNvKG5lLGwsJCxtLFQsSyl9cmV0dXJuIGk/dXAoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLGRwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57bHAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89dG4oKCk9PmNwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSxrPV8uc3ltYm9sS2V5cywkPW5ldyBkZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6a30pLFo9Vz0+YHNoYXBlWyR7V31dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7V31dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFQ9KFcsSCk9PmAKICAgICAgICAgIGxldCAke1d9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7V30uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7V30uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7SH0sIC4uLmlzcy5wYXRoXSA6IFske0h9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke1d9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke1d9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBLPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG5lPTA7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKUtbV109YGtleV8ke25lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKXtpZihXPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgSD1LW1ddLHc9dHlwZW9mIFc9PSJzeW1ib2wiP2BzeW1zWyR7ay5pbmRleE9mKFcpfV1gOnF1KFcpLEk9YCR7d30gaW4gaW5wdXRgLGFlPXZbV10sY2U9YWU/Ll96b2Q/Lm9wdGluLFBlPWNlIT09dm9pZCAwLHN0PWFlPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7SH0gPSAke1oodyl9O2ApLFBlJiZzdCl7Y29uc3Qgb3M9Y2U9PT0ib3B0aW9uYWwiP2Ake0h9X3ByZXNlbnRgOmAke0h9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtIfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0h9X3ByZXNlbnQgPSAke0l9OwogICAgICAgIGlmICghJHtIfS5pc3N1ZXMubGVuZ3RoIHx8ICR7SH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7VChILHcpfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke29zfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHt3fV0gPSAke0h9LnZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGApfWVsc2UgUGU/KCQud3JpdGUoYAogICAgICAgIGlmICgke0h9Lmlzc3Vlcy5sZW5ndGgpIHske1QoSCx3KX0KICAgICAgICB9CiAgICAgIGApLGNlPT09ImRlZmF1bHRlZCI/JC53cml0ZShgbmV3UmVzdWx0WyR7d31dID0gJHtIfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtIfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7SX0pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske3d9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtIfV9wcmVzZW50ID0gJHtJfTsKICAgICAgICBpZiAoJHtIfS5pc3N1ZXMubGVuZ3RoKSB7JHtUKEgsdyl9CiAgICAgICAgfQogICAgICAgIGlmICghJHtIfV9wcmVzZW50ICYmICEke0h9Lmlzc3Vlcy5sZW5ndGgpIHsKICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goewogICAgICAgICAgICBjb2RlOiAiaW52YWxpZF90eXBlIiwKICAgICAgICAgICAgZXhwZWN0ZWQ6ICJub25vcHRpb25hbCIsCiAgICAgICAgICAgIGlucHV0OiB1bmRlZmluZWQsCiAgICAgICAgICAgIHBhdGg6IFske3d9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7SH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7d31dID0gJHtIfS52YWx1ZTsKICAgICAgICB9CgogICAgICBgKX1yZXR1cm4gJC53cml0ZSgicGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsiKSwkLndyaXRlKCJyZXR1cm4gcGF5bG9hZDsiKSwkLmNvbXBpbGUoKX07bGV0IGk7Y29uc3QgYT1wdCxjPSFkZS5qaXRsZXNzLGQ9YyYmTHUudmFsdWUsbT10LmNhdGNoYWxsO2xldCBiO2UuX3pvZC5wYXJzZT0odixfKT0+e2I/PyhiPW8udmFsdWUpO2NvbnN0IGs9di52YWx1ZTtyZXR1cm4gYShrKT9jJiZkJiZfPy5hc3luYz09PSExJiZfLmppdGxlc3MhPT0hMD8oaXx8KGk9cyh0LnNoYXBlKSksdj1pKHYsXyksbT91cChbXSxrLHYsXyxiLGUsXz8uYWJvcnRFYXJseT09PSEwKTp2KTpuKHYsXyk6KHYuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ayxpbnN0OmV9KSx2KX19KTtmdW5jdGlvbiBXYyhlLHQsbixvKXtmb3IoY29uc3QgcyBvZiBlKWlmKHMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHQudmFsdWU9cy52YWx1ZSx0O2NvbnN0IHI9ZS5maWx0ZXIocz0+IWhlKHMpKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPXJbMF0udmFsdWUsclswXSk6KHQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+JGUoaSxvLGVlKCkpKSl9KSx0KX1jb25zdCBHbz1wKCIkWm9kVW5pb24iLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksQShlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEEoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksQShlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+cWUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2kucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5XYyhhLG8sZSxyKSk6V2MoaSxvLGUscil9fSk7ZnVuY3Rpb24gR2MoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT4kZShpLG8sZWUoKSkpKX0pOnQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczpbXSxpbmNsdXNpdmU6ITEsbWF0Y2hlczpyfSksdCl9Y29uc3QgcHA9cCgiJFpvZFhvciIsKGUsdCk9PntHby5pbml0KGUsdCksdC5pbmNsdXNpdmU9ITE7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgaT1bXTtmb3IoY29uc3QgYSBvZiB0Lm9wdGlvbnMpe2NvbnN0IGM9YS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhpLnB1c2goYykscz0hMCk6aS5wdXNoKGMpfXJldHVybiBzP1Byb21pc2UuYWxsKGkpLnRoZW4oYT0+R2MoYSxvLGUscikpOkdjKGksbyxlLHIpfX0pO2Z1bmN0aW9uIGlpKGUsdCl7Y29uc3Qgbj1lLl96b2Q7bGV0IG89bi5iYWcub3B0aW9uc01hcDtvfHwobz1ocChuLmRlZiksbi5iYWcub3B0aW9uc01hcD1vKTtjb25zdCByPW8uZ2V0KHQpO2lmKHI9PT1udWxsKXRocm93IG5ldyBFcnJvcihgQW1iaWd1b3VzIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHQpfSJgKTtyZXR1cm4gcn1mdW5jdGlvbiBocChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0IG4gb2YgZS5vcHRpb25zKXtjb25zdCBvPW4uX3pvZC5wcm9wVmFsdWVzPy5bZS5kaXNjcmltaW5hdG9yXTtpZighb3x8by5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ZS5vcHRpb25zLmluZGV4T2Yobil9ImApO2Zvcihjb25zdCByIG9mIG8paWYodC5oYXMocikpe2lmKHIhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcocil9ImApO3Quc2V0KHIsbnVsbCl9ZWxzZSB0LnNldChyLG4pfXJldHVybiB0fWNvbnN0IGZwPXAoIiRab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57dC5pbmNsdXNpdmU9ITEsR28uaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlO0EoZSwicHJvcFZhbHVlcyIscj0+e2NvbnN0IHM9e307bGV0IGk9MDtmb3IoY29uc3QgYSBvZiByLmRlZi5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5wcm9wVmFsdWVzO2lmKCFjfHxPYmplY3Qua2V5cyhjKS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtyLmRlZi5vcHRpb25zLmluZGV4T2YoYSl9ImApO2Nbci5kZWYuZGlzY3JpbWluYXRvcl0/Lmhhcyh2b2lkIDApJiZpKys7Zm9yKGNvbnN0W2wsZF1vZiBPYmplY3QuZW50cmllcyhjKSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbCl8fG50KHMsbCxuZXcgU2V0KTtmb3IoY29uc3QgbSBvZiBkKXNbbF0uYWRkKG0pfX1yZXR1cm4hci5kZWYudW5pb25GYWxsYmFjayYmaT4xJiZzW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5kZWxldGUodm9pZCAwKSxzfSksdC5vcHRpb25zLmZvckVhY2goKHIscyk9Pntjb25zdCBpPVpvKHIuX3pvZC5kZWYpO2lmKGkmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSx0LmRpc2NyaW1pbmF0b3IpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtzfSJgKX0pO2NvbnN0IG89dG4oKCk9PmhwKHQpKTtlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIXB0KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJvYmplY3QiLGlucHV0OmksaW5zdDplfSkscjtjb25zdCBhPWk/Llt0LmRpc2NyaW1pbmF0b3JdLGM9by52YWx1ZS5nZXQoYSk7cmV0dXJuIGMmJihhIT09dm9pZCAwfHxzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCIpP2MuX3pvZC5ydW4ocixzKTp0LnVuaW9uRmFsbGJhY2t8fHMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIj9uKHIscyk6KHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGVycm9yczpbXSxub3RlOiJObyBtYXRjaGluZyBkaXNjcmltaW5hdG9yIixkaXNjcmltaW5hdG9yOnQuZGlzY3JpbWluYXRvcixvcHRpb25zOkFycmF5LmZyb20oby52YWx1ZS5rZXlzKCkpLmZpbHRlcihsPT5vLnZhbHVlLmdldChsKSE9PW51bGwpLGlucHV0OmkscGF0aDpbdC5kaXNjcmltaW5hdG9yXSxpbnN0OmV9KSxyKX19KSxtcD1wKCIkWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZSxzPXQubGVmdC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pLGk9dC5yaWdodC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZXx8aSBpbnN0YW5jZW9mIFByb21pc2U/UHJvbWlzZS5hbGwoW3MsaV0pLnRoZW4oKFtjLGxdKT0+UWMobixjLGwpKTpRYyhuLHMsaSl9fSk7ZnVuY3Rpb24gem8oZSx0KXtpZihlPT09dClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUmJitlPT0rdClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihMZShlKSYmTGUodCkpe2NvbnN0IG49T2JqZWN0LmtleXModCksbz1PYmplY3Qua2V5cyhlKS5maWx0ZXIocz0+bi5pbmRleE9mKHMpIT09LTEpLHI9ey4uLmUsLi4udH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIl9fcHJvdG9fXyIpJiZkZWxldGUgci5fX3Byb3RvX187Zm9yKGNvbnN0IHMgb2Ygbyl7aWYocz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGk9em8oZVtzXSx0W3NdKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W3MsLi4uaS5tZXJnZUVycm9yUGF0aF19O3Jbc109aS5kYXRhfXJldHVybnt2YWxpZDohMCxkYXRhOnJ9fWlmKEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkodCkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfTtjb25zdCBuPVtdO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtjb25zdCByPWVbb10scz10W29dLGk9em8ocixzKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W28sLi4uaS5tZXJnZUVycm9yUGF0aF19O24ucHVzaChpLmRhdGEpfXJldHVybnt2YWxpZDohMCxkYXRhOm59fXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX19ZnVuY3Rpb24gUWMoZSx0LG4pe2NvbnN0IG89bmV3IE1hcDtsZXQgcjtjb25zdCBzPW5ldyBNYXAsaT0obCxkKT0+e2xldCBtO2lmKGwuY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyImJiFsLnBhdGg/Lmxlbmd0aClyPz8ocj1sKSxtPWwua2V5cztlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX2tleSImJmwub3JpZ2luPT09InJlY29yZCImJmwucGF0aD8ubGVuZ3RoPT09MSl7Y29uc3QgYj1TdHJpbmcobC5wYXRoWzBdKTtzLmhhcyhiKXx8cy5zZXQoYixsKSxtPVtiXX1lbHNlIHJldHVybiExO2Zvcihjb25zdCBiIG9mIG0pby5oYXMoYil8fG8uc2V0KGIse30pLG8uZ2V0KGIpW2RdPSEwO3JldHVybiEwfTtmb3IoY29uc3QgbCBvZiB0Lmlzc3VlcylpKGwsImwiKXx8ZS5pc3N1ZXMucHVzaChsKTtmb3IoY29uc3QgbCBvZiBuLmlzc3VlcylpKGwsInIiKXx8ZS5pc3N1ZXMucHVzaChsKTtjb25zdCBhPVsuLi5vXS5maWx0ZXIoKFssbF0pPT5sLmwmJmwucikubWFwKChbbF0pPT5sKTtpZihhLmxlbmd0aCl7Y29uc3QgbD1yP2EuZmlsdGVyKGQ9PnIua2V5cy5pbmNsdWRlcyhkKSk6W107bC5sZW5ndGgmJmUuaXNzdWVzLnB1c2goey4uLnIsa2V5czpsfSk7Zm9yKGNvbnN0IGQgb2YgYSkhbC5pbmNsdWRlcyhkKSYmcy5oYXMoZCkmJmUuaXNzdWVzLnB1c2gocy5nZXQoZCkpfWNvbnN0IGM9em8odC52YWx1ZSxuLnZhbHVlKTtpZighYy52YWxpZCl7aWYoaGUoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbm1lcmdhYmxlIGludGVyc2VjdGlvbi4gRXJyb3IgcGF0aDogJHtKU09OLnN0cmluZ2lmeShjLm1lcmdlRXJyb3JQYXRoKX1gKX1yZXR1cm4gZS52YWx1ZT1jLmRhdGEsZX1jb25zdCBhaT1wKCIkWm9kVHVwbGUiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj10Lml0ZW1zLG89ZGUubWVtb2l6ZXI7bz8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighQXJyYXkuaXNBcnJheShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7aW5wdXQ6aSxpbnN0OmUsZXhwZWN0ZWQ6InR1cGxlIixjb2RlOiJpbnZhbGlkX3R5cGUifSkscjtyLnZhbHVlPW8/by5hbGxvYyhlLHIsW10scyk6W107Y29uc3QgYT1bXSxjPVljKG4sIm9wdGluIiksbD1ZYyhuLCJvcHRvdXQiKTtpZighdC5yZXN0KXtpZihpLmxlbmd0aDxjKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06YyxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KSxyO2kubGVuZ3RoPm4ubGVuZ3RoJiZyLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm4ubGVuZ3RoLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pfWNvbnN0IGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxtPXQucmVzdD9zPy5hYm9ydEVhcmx5OnZvaWQgMDtsZXQgYj0hMTtmb3IobGV0IHY9MDt2PG4ubGVuZ3RoO3YrKyl7Y29uc3QgXz1uW3ZdLl96b2QucnVuKHt2YWx1ZTppW3ZdLGlzc3VlczpbXX0scyk7XyBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKF8udGhlbihrPT57ZFt2XT1rfSkpOihkW3ZdPV8sbSYmIWImJl8uaXNzdWVzLmxlbmd0aCYmKGI9aGUoXykpKX1pZih0LnJlc3QmJiFiKXtsZXQgdj1uLmxlbmd0aC0xO2NvbnN0IF89aS5zbGljZShuLmxlbmd0aCk7bGV0IGs9ci5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIF8pe2lmKG0mJnIuaXNzdWVzLmxlbmd0aCE9PWspe2lmKGhlKHIsaykpYnJlYWs7az1yLmlzc3Vlcy5sZW5ndGh9disrO2NvbnN0IFo9dC5yZXN0Ll96b2QucnVuKHt2YWx1ZTokLGlzc3VlczpbXX0scyk7WiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFoudGhlbihUPT5YYyhULHIsdikpKTpYYyhaLHIsdil9fXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5ldShkLHIsbixpLGwpKTpldShkLHIsbixpLGwpfX0pO2Z1bmN0aW9uIFljKGUsdCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoISh0PT09Im9wdGluIj9lW25dLl96b2Qub3B0aW4hPT12b2lkIDA6ZVtuXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpKXJldHVybiBuKzE7cmV0dXJuIDB9ZnVuY3Rpb24gWGMoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5fZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWZ1bmN0aW9uIGV1KGUsdCxuLG8scil7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IGk9ZVtzXSxhPXM8by5sZW5ndGg7aWYoIWEmJnM+PXImJm5bc10uX3pvZC5vcHRpbj09PSJvcHRpb25hbCIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9aWYoaS5pc3N1ZXMubGVuZ3RoKXtpZighYSYmcz49cil7dC52YWx1ZS5sZW5ndGg9czticmVha310Lmlzc3Vlcy5wdXNoKC4uLl9lKHMsaS5pc3N1ZXMpKX10LnZhbHVlW3NdPWkudmFsdWV9Zm9yKGxldCBzPXQudmFsdWUubGVuZ3RoLTE7cz49by5sZW5ndGgmJihuW3NdLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIiYmdC52YWx1ZVtzXT09PXZvaWQgMCk7cy0tKXQudmFsdWUubGVuZ3RoPXM7cmV0dXJuIHR9Y29uc3QgZ3A9cCgiJFpvZFJlY29yZCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUxlKHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoicmVjb3JkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdLGE9dC5rZXlUeXBlLl96b2QudmFsdWVzO2lmKGEmJiF0LnBhcnRpYWwpe28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtjb25zdCBjPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYSlpZih0eXBlb2YgZD09InN0cmluZyJ8fHR5cGVvZiBkPT0ibnVtYmVyInx8dHlwZW9mIGQ9PSJzeW1ib2wiKXtpZihjLmFkZCh0eXBlb2YgZD09Im51bWJlciI/ZC50b1N0cmluZygpOmQpLGQ9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO2lmKG0gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKG0uaXNzdWVzLmxlbmd0aCl7by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6bS5pc3N1ZXMubWFwKF89PiRlKF8scixlZSgpKSksaW5wdXQ6ZCxwYXRoOltkXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBiPW0udmFsdWU7aWYoYj09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IHY9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbZF0saXNzdWVzOltdfSxyKTt2IGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2godi50aGVuKF89PntfLmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uX2UoZCxfLmlzc3VlcykpLG8udmFsdWVbYl09Xy52YWx1ZX0pKToodi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLl9lKGQsdi5pc3N1ZXMpKSxvLnZhbHVlW2JdPXYudmFsdWUpfWxldCBsO2Zvcihjb25zdCBkIGluIHMpaWYoIWMuaGFzKGQpKWlmKHQubW9kZT09PSJsb29zZSIpe2lmKGQ9PT0iX19wcm90b19fIiljb250aW51ZTtvLnZhbHVlW2RdPXNbZF19ZWxzZSBsPWw/P1tdLGwucHVzaChkKTtsJiZsLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpsLGNvbnRpbnVlOiEwfSl9ZWxzZXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307bGV0IGM7Zm9yKGNvbnN0IGwgb2YgUmVmbGVjdC5vd25LZXlzKHMpKXtpZihsPT09Il9fcHJvdG9fXyJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocyxsKSljb250aW51ZTtsZXQgZD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZih0eXBlb2YgbD09InN0cmluZyImJktvLnRlc3QobCkmJmQuaXNzdWVzLmxlbmd0aCl7Y29uc3QgXz10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOk51bWJlcihsKSxpc3N1ZXM6W119LHIpO2lmKF8gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO18uaXNzdWVzLmxlbmd0aD09PTAmJihkPV8pfWlmKGQuaXNzdWVzLmxlbmd0aCl7dC5tb2RlPT09Imxvb3NlIj9vLnZhbHVlW2xdPXNbbF06YT8oYz1jPz9bXSxjLnB1c2gobCkpOm8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmQuaXNzdWVzLm1hcChfPT4kZShfLHIsZWUoKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1kLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLl9lKGwsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5fZShsLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSksYnA9cCgiJFpvZE1hcCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W2wsZF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihoZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0sciksYj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO20gaW5zdGFuY2VvZiBQcm9taXNlfHxiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW20sYl0pLnRoZW4oKFt2LF9dKT0+e3R1KHYsXyxvLGwscyxlLHIpfSkpOnR1KG0sYixvLGwscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIHR1KGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKGtvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5fZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PiRlKGEsaSxlZSgpKSl9KSksdC5pc3N1ZXMubGVuZ3RoJiYoa28uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLl9lKG8sdC5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im1hcCIsY29kZToiaW52YWxpZF9lbGVtZW50IixpbnB1dDpyLGluc3Q6cyxrZXk6byxpc3N1ZXM6dC5pc3N1ZXMubWFwKGE9PiRlKGEsaSxlZSgpKSl9KSksbi52YWx1ZS5zZXQoZS52YWx1ZSx0LnZhbHVlKX1jb25zdCB2cD1wKCIkWm9kU2V0IiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49ZGUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtpbnB1dDpzLGluc3Q6ZSxleHBlY3RlZDoic2V0Iixjb2RlOiJpbnZhbGlkX3R5cGUifSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgU2V0LHIpOm5ldyBTZXQ7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgbCBvZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihoZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGQ9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtkIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goZC50aGVuKG09Pm51KG0sbykpKTpudShkLG8pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIG51KGUsdCl7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmUuaXNzdWVzKSx0LnZhbHVlLmFkZChlLnZhbHVlKX1jb25zdCB5cD1wKCIkWm9kRW51bSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWxzKHQuZW50cmllcyksbz1uZXcgU2V0KG4pO2UuX3pvZC52YWx1ZXM9byxBKGUsInBhdHRlcm4iLHI9Pntjb25zdCBzPWxzKHIuZGVmLmVudHJpZXMpLmZpbHRlcihpPT5rby5oYXModHlwZW9mIGkpKTtyZXR1cm4gbmV3IFJlZ0V4cChzLmxlbmd0aD9gXigke3MubWFwKGk9Pk9lKGkudG9TdHJpbmcoKSkpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7cmV0dXJuIG8uaGFzKGkpfHxyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6bixpbnB1dDppLGluc3Q6ZX0pLHJ9fSksX3A9cCgiJFpvZExpdGVyYWwiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQudmFsdWVzKTtlLl96b2QudmFsdWVzPW4sQShlLCJwYXR0ZXJuIixvPT57Y29uc3Qgcj1vLmRlZi52YWx1ZXM7cmV0dXJuIG5ldyBSZWdFeHAoci5sZW5ndGg/YF4oJHtyLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/T2Uocyk6cz9PZShzLnRvU3RyaW5nKCkpOlN0cmluZyhzKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtyZXR1cm4gbi5oYXMocyl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0LnZhbHVlcyxpbnB1dDpzLGluc3Q6ZX0pLG99fSksa3A9cCgiJFpvZEZpbGUiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiByIGluc3RhbmNlb2YgRmlsZXx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImZpbGUiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHdwPXAoIiRab2RUcmFuc2Zvcm0iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJvcHRpb25hbCIsZGUubWVtb2l6ZXI/Lmd1YXJkKGUpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgVW8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7aWYoby5hc3luYylyZXR1cm4ociBpbnN0YW5jZW9mIFByb21pc2U/cjpQcm9taXNlLnJlc29sdmUocikpLnRoZW4oaT0+KG4udmFsdWU9aSxuKSk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IERlO3JldHVybiBuLnZhbHVlPXIsbn19KTtmdW5jdGlvbiBvdShlLHQpe3JldHVybiBlLnZhbHVlPXQuaXNzdWVzLmxlbmd0aD92b2lkIDA6dC52YWx1ZSxlfWNvbnN0IGNpPXAoIiRab2RPcHRpb25hbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLGUuX3pvZC5vcHRvdXQ9Im9wdGlvbmFsIixBKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm8sdm9pZCAwXSk6dm9pZCAwfSksQShlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtxZShvLnNvdXJjZSl9KT8kYCk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYobi52YWx1ZT09PXZvaWQgMCl7aWYodC5pbm5lclR5cGUuX3pvZC5vcHRpbiE9PSJkZWZhdWx0ZWQiKXJldHVybiBuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pm91KG4scykpOm91KG4scil9cmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9fSksJHA9cCgiJFpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57Y2kuaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEEoZSwicGF0dGVybiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybiksZS5fem9kLnBhcnNlPShuLG8pPT50LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksU3A9cCgiJFpvZE51bGxhYmxlIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxBKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke3FlKG8uc291cmNlKX18bnVsbCkkYCk6dm9pZCAwfSksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcz9uZXcgU2V0KFsuLi5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsbnVsbF0pOnZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5uLnZhbHVlPT09bnVsbD9uOnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSx6cD1wKCIkWm9kRGVmYXVsdCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2lmKG4udmFsdWU9PT12b2lkIDApcmV0dXJuIG4udmFsdWU9dC5kZWZhdWx0VmFsdWUsbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5ydShzLHQpKTpydShyLHQpfX0pO2Z1bmN0aW9uIHJ1KGUsdCl7cmV0dXJuIGUudmFsdWU9PT12b2lkIDAmJihlLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSxlfWNvbnN0IFRwPXAoIiRab2RQcmVmYXVsdCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT4oby5kaXJlY3Rpb249PT0iYmFja3dhcmQifHxuLnZhbHVlPT09dm9pZCAwJiYobi52YWx1ZT10LmRlZmF1bHRWYWx1ZSksdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKSl9KSxJcD1wKCIkWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vXS5maWx0ZXIocj0+ciE9PXZvaWQgMCkpOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnN1KHMsZSkpOnN1KHIsZSl9fSk7ZnVuY3Rpb24gc3UoZSx0KXtyZXR1cm4hZS5pc3N1ZXMubGVuZ3RoJiZlLnZhbHVlPT09dm9pZCAwJiZlLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6ZS52YWx1ZSxpbnN0OnR9KSxlfWNvbnN0IFBwPXAoIiRab2RTdWNjZXNzIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgVW8oIlpvZFN1Y2Nlc3MiKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLmlzc3Vlcy5sZW5ndGg9PT0wLG4pKToobi52YWx1ZT1yLmlzc3Vlcy5sZW5ndGg9PT0wLG4pfX0pO2Z1bmN0aW9uIGl1KGUsdCxuLG8pe3JldHVybiB0Lmlzc3Vlcy5sZW5ndGg/KGUudmFsdWU9bi5jYXRjaFZhbHVlKHsuLi50LHZhbHVlOmUudmFsdWUsZXJyb3I6e2lzc3Vlczp0Lmlzc3Vlcy5tYXAocj0+JGUocixvLGVlKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCB4cD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+aXUobixzLHQsbykpOml1KG4scix0LG8pfX0pLENwPXAoIiRab2ROYU4iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLHVpPXAoIiRab2RQaXBlIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+Y28oaSx0LmluLG8pKTpjbyhzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5jbyhzLHQub3V0LG8pKTpjbyhyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIGNvKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBsaT1wKCIkWm9kQ29kZWMiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PnVvKGksdCxvKSk6dW8ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+dW8oaSx0LG8pKTp1byhzLHQsbyl9fX0pO2Z1bmN0aW9uIHVvKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+bG8oZSxzLHQub3V0LG4pKTpsbyhlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+bG8oZSxzLHQuaW4sbikpOmxvKGUscix0LmluLG4pfX1mdW5jdGlvbiBsbyhlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IEVwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e3VpLmluaXQoZSx0KX0pLE9wPXAoIiRab2RSZWFkb25seSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKGF1KTphdShyKX19KTtmdW5jdGlvbiBhdShlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIG5nKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1hLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IGw9Yy5taW5pbXVtPz9jLmxlbmd0aCxkPWMubWF4aW11bT8/Yy5sZW5ndGg7bCE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fGw+cikmJihyPWwpLGQhPT12b2lkIDAmJihzPT09dm9pZCAwfHxkPHMpJiYocz1kKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIGpsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1Lbz9xbDppKT8uc291cmNlfWZ1bmN0aW9uIHZzKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz12cyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKHFlKHIpLCgpPT5xZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcCh2cyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PnFlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBuZyhlKX1jb25zdCBBcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPXZzKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKHFlKHIpKX1lbHNlIGlmKG89PT1udWxsfHxVdS5oYXModHlwZW9mIG8pKW4ucHVzaChPZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLFJwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9Pih4LmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9mcyhlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2ZzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBtcyhlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IG1zKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IGFpKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksWnA9cCgiJFpvZFByb21pc2UiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLGRpPXAoIiRab2RMYXp5IiwoZSx0KT0+e3guaW5pdChlLHQpLE51KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEEoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEEoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxBKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLE5wPXAoIiRab2RDdXN0b20iLChlLHQpPT57Si5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PmN1KHMsbixvLGUpKTtjdShyLG4sbyxlKX19KTtmdW5jdGlvbiBjdShlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChodChyKSl9fWNsYXNzIGpwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgeXM9In5tZW1vIix1dT1bXTtmdW5jdGlvbiBNcChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBhcyhlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgcXA9bmV3IFdlYWtNYXAsYXQ9MCxnbz0xLFV0PTI7ZnVuY3Rpb24gRnQoZSx0LG4pe2NvbnN0IG89cXAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/VXQ6YXQ7aWYodC5oYXMoZSkpcmV0dXJuIFV0O3QuYWRkKGUpO2xldCByPWF0O2NvbnN0IHM9ZD0+e2lmKHIhPT1VdCYmZD8uX3pvZCl7Y29uc3QgbT1GdChkLHQsbik7bT5yJiYocj1tKX19LGk9KGQsbSk9PntsZXQgYj1hdDtmb3IoY29uc3QgdiBvZiBSZWZsZWN0Lm93bktleXMoZCkpe2NvbnN0IF89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLHYpO2lmKCFfLmVudW1lcmFibGUpY29udGludWU7Y29uc3Qgaz1fLmdldD9nbzpfLnZhbHVlPy5fem9kP0Z0KF8udmFsdWUsdCxuKTphdDtrPmImJihiPWspfXJldHVybiBifSxhPWQ9PntkPnImJihyPWQpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBkPVpvKGMpO2EoZD9pKGQpOmdvKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgZCBvZiBjLml0ZW1zKXMoZCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgZCBvZiBjLm9wdGlvbnMpcyhkKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgZD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EoZD9GdChkLHQsITEpOmdvKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgZCBpbiBjKXtjb25zdCBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxkKTtpZighbXx8bS5nZXQpY29udGludWU7Y29uc3QgYj1tLnZhbHVlO2lmKCEoIWJ8fHR5cGVvZiBiIT0ib2JqZWN0Iikpe2lmKGIuX3pvZClzKGIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShiKSlmb3IoY29uc3QgdiBvZiBiKXModil9fX1yZXR1cm4gdC5kZWxldGUoZSksb2coZSxyKX1mdW5jdGlvbiBvZyhlLHQpe3JldHVybiB0IT09Z28mJnFwLnNldChlLHQ9PT1VdCksdH1mdW5jdGlvbiByZyhlKXtyZXR1cm4gRnQoZSxuZXcgU2V0LCEwKSE9PWF0fWZ1bmN0aW9uIHNnKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBwbztjb25zdCBobz1bXSxpZz17YWxsb2MoZSx0LG4pe2NvbnN0IG89cG87aWYoIW8pcmV0dXJuIG47cG89dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLGhvLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmRHAocyxyLnZhbHVlKSl0aHJvdyBuZXcganA7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShjLGwpPT57aWYobj09PXZvaWQgMCl7Y29uc3QgWj1GdChlLG5ldyBTZXQsITEpO2lmKFo9PT1hdClyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkoYyxsKTtaPT09VXR8fG8/bj0hMDpvPSEwfWNvbnN0IGQ9Yy52YWx1ZTtpZighTXAoZCkpcmV0dXJuIGkoYyxsKTtsZXQgbT1sW3lzXTttfHwobT17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSxsW3lzXT1tKTtsZXQgYjtyPT09bD9iPXM6KGI9c2cobSxlKSxyPWwscz1iKTtjb25zdCB2PWIuZ2V0KGQpO2lmKHYpcmV0dXJuIGMudmFsdWU9di52YWx1ZSx2Lmlzc3Vlcz92Lmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uYXModi5pc3N1ZXMpKTooYy5tZW1vPSEwLG0uYmFja0VkZ2VzPz8obS5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLG0uYmFja0VkZ2VzLmFkZCh2LnZhbHVlKSksYztwbz1iO2NvbnN0IF89aG8ubGVuZ3RoLGs9aShjLGwpO3BvPXZvaWQgMDtjb25zdCAkPWhvLmxlbmd0aD5fP2hvLnBvcCgpOnZvaWQgMDtyZXR1cm4gayBpbnN0YW5jZW9mIFByb21pc2U/ay50aGVuKFo9PigkJiYoJC5pc3N1ZXM9Wi5pc3N1ZXMubGVuZ3RoP2FzKFouaXNzdWVzKTp1dSksWikpOigkJiYoJC5pc3N1ZXM9ay5pc3N1ZXMubGVuZ3RoP2FzKGsuaXNzdWVzKTp1dSksayl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gUW8oKXtyZXR1cm4gaWd9ZnVuY3Rpb24gRHAoZSx0KXtjb25zdCBuPWVbeXNdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJk1wKHQpJiZuLmhhcyh0KX1jb25zdCBhZz0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9ZWwocy5pbnB1dCksYz1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7eHMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtkcyhzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtkcyhzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIExwKCl7cmV0dXJue2xvY2FsZUVycm9yOmFnKCl9fWNvbnN0IHBpPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpMcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbHU7Y29uc3QgaGk9U3ltYm9sKCJab2RPdXRwdXQiKSxmaT1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgVXB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gWW8oKXtyZXR1cm4gbmV3IFVwfShsdT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KGx1Ll9fem9kX2dsb2JhbFJlZ2lzdHJ5PVlvKCkpO2NvbnN0IGtlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksbWk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIGdpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIGJpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIHZpIGV4dGVuZHMgRXJyb3J7fWNvbnN0IHlpPW1pLF9pPW1pLGNnPW1pO2Z1bmN0aW9uIFhvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gRnAoZSx0KXtyZXR1cm4gbmV3IGUoWG8oe3R5cGU6InN0cmluZyIsLi4ueSh0KX0pKX1mdW5jdGlvbiBIcChlLHQpe3JldHVybiBuZXcgZShYbyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4ueSh0KX0pKX1mdW5jdGlvbiBraShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiAkaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gU2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLnkodCl9KX1mdW5jdGlvbiB6aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4ueSh0KX0pfWZ1bmN0aW9uIFRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi55KHQpfSl9ZnVuY3Rpb24gZXIoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gSWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBQaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB4aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gQ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBFaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gQWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBSaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gWmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE5pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBWcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBMaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1jb25zdCBVaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gRmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gSGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBWaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEtwKGUsdCl7cmV0dXJuIG5ldyBlKFhvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIFdwKGUsdCl7cmV0dXJuIG5ldyBlKFhvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBHcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24gUXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIFlwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBYcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIHRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gbmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gb2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHJoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gc2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBhaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi55KHQpfSl9ZnVuY3Rpb24gY2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi55KHQpfSl9ZnVuY3Rpb24gbGgoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gZGgoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIHBoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4ueSh0KX0pfWZ1bmN0aW9uIGhoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi55KHQpfSl9ZnVuY3Rpb24gZmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLnkodCl9KX1mdW5jdGlvbiBtaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBnaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gUmUoZSx0KXtyZXR1cm4gbmV3IFdzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gZ2UoZSx0KXtyZXR1cm4gbmV3IFdzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gWmUoZSx0KXtyZXR1cm4gbmV3IEdzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gYmUoZSx0KXtyZXR1cm4gbmV3IEdzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIFplKDAsZSl9ZnVuY3Rpb24gbnIoZSl7cmV0dXJuIFJlKDAsZSl9ZnVuY3Rpb24gb3IoZSl7cmV0dXJuIGdlKDAsZSl9ZnVuY3Rpb24gcnIoZSl7cmV0dXJuIGJlKDAsZSl9ZnVuY3Rpb24gWWUoZSx0KXtyZXR1cm4gbmV3IFZsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLnkodCksdmFsdWU6ZX0pfWZ1bmN0aW9uIG90KGUsdCl7cmV0dXJuIG5ldyBXbCh7Y2hlY2s6Im1heF9zaXplIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIE5lKGUsdCl7cmV0dXJuIG5ldyBHbCh7Y2hlY2s6Im1pbl9zaXplIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIF90KGUsdCl7cmV0dXJuIG5ldyBRbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi55KHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGt0KGUsdCl7cmV0dXJuIG5ldyBZbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gVWUoZSx0KXtyZXR1cm4gbmV3IFhsKHtjaGVjazoibWluX2xlbmd0aCIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBuZXcgZWQoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi55KHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gcG4oZSx0KXtyZXR1cm4gbmV3IHRkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4ueSh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBobihlKXtyZXR1cm4gbmV3IG5kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBmbihlKXtyZXR1cm4gbmV3IG9kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBtbihlLHQpe3JldHVybiBuZXcgcmQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi55KHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBnbihlLHQpe3JldHVybiBuZXcgc2Qoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi55KHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gYm4oZSx0KXtyZXR1cm4gbmV3IGlkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLnkodCksc3VmZml4OmV9KX1mdW5jdGlvbiBzcihlLHQsbil7cmV0dXJuIG5ldyBhZCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLnkobil9KX1mdW5jdGlvbiB2bihlLHQpe3JldHVybiBuZXcgY2Qoe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLnkodCl9KX1mdW5jdGlvbiB5bihlLHQpe3JldHVybiBuZXcgdWQoe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIG5ldyBsZCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIF9uKGUpe3JldHVybiBDZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24ga24oKXtyZXR1cm4gQ2UoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIHduKCl7cmV0dXJuIENlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gJG4oKXtyZXR1cm4gQ2UoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBTbigpe3JldHVybiBDZShlPT5EdShlKSl9ZnVuY3Rpb24gYmgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi55KG4pfSl9ZnVuY3Rpb24gdWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gbGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4ueShuKX0pfWZ1bmN0aW9uIGRnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4ueShvKX0pfWZ1bmN0aW9uIHBnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBoZyhlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiB4LHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi55KHMpfSl9ZnVuY3Rpb24gZmcoZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gbWcoZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gZ2coZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gYmcoZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLnkobil9KX1mdW5jdGlvbiB2ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHlnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLnkobil9KX1mdW5jdGlvbiB2aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIF9nKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24ga2coZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHdnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiAkZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTpObyhuKX19KX1mdW5jdGlvbiBTZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHpnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFRnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246Q3Mobil9KX1mdW5jdGlvbiBJZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gUGcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHhnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIENnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIEVnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHloKGUsdCxuKXtjb25zdCBvPXkobik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBfaChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGtoKGUsdCl7Y29uc3Qgbj13aChvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2goaHQocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKGh0KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gd2goZSx0KXtjb25zdCBuPW5ldyBKKHtjaGVjazoiY3VzdG9tIiwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gJGgoZSl7Y29uc3QgdD1uZXcgSih7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWtlLmdldChuKT8/e307a2UuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIFNoKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWtlLmdldChuKT8/e307a2UuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIHpoKGUsdCl7Y29uc3Qgbj15KHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcCh2PT50eXBlb2Ygdj09InN0cmluZyI/di50b0xvd2VyQ2FzZSgpOnYpLHI9ci5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P2xpLGM9ZS5Cb29sZWFuPz9yaSxsPWUuU3RyaW5nPz9kbixkPW5ldyBsKHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxtPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksYj1uZXcgYSh7dHlwZToicGlwZSIsaW46ZCxvdXQ6bSx0cmFuc2Zvcm06KCh2LF8pPT57bGV0IGs9djtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJihrPWsudG9Mb3dlckNhc2UoKSkscy5oYXMoayk/ITA6aS5oYXMoayk/ITE6KF8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6Xy52YWx1ZSxpbnN0OmIsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigodixfKT0+dj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIGIuX3pvZC5iYWcudHJ1dGh5PW8sYi5fem9kLmJhZy5mYWxzeT1yLGIuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsYn1mdW5jdGlvbiAkdChlLHQsbixvPXt9KXtjb25zdCByPXkobykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgT2c9KCk9Pih7fSksQWc9KCk9Pih7fSksUmc9KCk9Pih7fSksWmc9KCk9Pih7fSksTmc9KCk9Pih7fSksVGg9KCk9PigpPT4oe30pLF9zPSgpPT4oKT0+KHt9KSxqZz0oKT0+KHt9KSx3ZT0oKT0+KHt9KSxNZz0oKT0+KHt9KSxxZz0oKT0+KHt9KSxEZz0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxHZz0oKT0+KHt9KSxRZz0oKT0+KHt9KSxZZz0oKT0+KHt9KSxYZz0oKT0+KHt9KSxlYj0oKT0+KHt9KSx0Yj0oKT0+KHt9KSxuYj0oKT0+KHt9KSxvYj0oKT0+KHt9KSxyYj0oKT0+KHt9KSxzYj0oKT0+KHt9KSxpYj0oKT0+KHt9KSxhYj0oKT0+KHt9KSxjYj0oKT0+KHt9KSxJaD0oKT0+KHt9KSx1Yj0oKT0+KHt9KSxsYj0oKT0+KHt9KSxkYj0oKT0+KHt9KSxwYj0oKT0+KHt9KSxoYj0oKT0+KHt9KSxmYj0oKT0+KHt9KSxtYj0oKT0+KHt9KSxnYj0oKT0+KHt9KSxiYj0oKT0+KHt9KSx2Yj0oKT0+KHt9KSx5Yj0oKT0+KHt9KSxQaD0oKT0+KHt9KSxfYj0oKT0+KHt9KSxKaT0oKT0+KHt9KTtjbGFzcyBrYnt9Y29uc3Qgd2I9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHhoPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55Om5wLCRab2RBcnJheTphcCwkWm9kQXN5bmNFcnJvcjpEZSwkWm9kQmFzZTY0OkRkLCRab2RCYXNlNjRVUkw6VWQsJFpvZEJpZ0ludDpzaSwkWm9kQmlnSW50Rm9ybWF0OllkLCRab2RCb29sZWFuOnJpLCRab2RDSURSdjQ6TmQsJFpvZENJRFJ2NjpNZCwkWm9kQ1VJRDpTZCwkWm9kQ1VJRDI6emQsJFpvZENhdGNoOnhwLCRab2RDaGVjazpKLCRab2RDaGVja0JpZ0ludEZvcm1hdDpLbCwkWm9kQ2hlY2tFbmRzV2l0aDppZCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpHcywkWm9kQ2hlY2tJbmNsdWRlczpyZCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6ZWQsJFpvZENoZWNrTGVzc1RoYW46V3MsJFpvZENoZWNrTG93ZXJDYXNlOm5kLCRab2RDaGVja01heExlbmd0aDpZbCwkWm9kQ2hlY2tNYXhTaXplOldsLCRab2RDaGVja01pbWVUeXBlOnVkLCRab2RDaGVja01pbkxlbmd0aDpYbCwkWm9kQ2hlY2tNaW5TaXplOkdsLCRab2RDaGVja011bHRpcGxlT2Y6VmwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OkpsLCRab2RDaGVja092ZXJ3cml0ZTpsZCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOmNkLCRab2RDaGVja1Byb3BlcnR5OmFkLCRab2RDaGVja1JlZ2V4OnRkLCRab2RDaGVja1NpemVFcXVhbHM6UWwsJFpvZENoZWNrU3RhcnRzV2l0aDpzZCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6bG4sJFpvZENoZWNrVXBwZXJDYXNlOm9kLCRab2RDb2RlYzpsaSwkWm9kQ3JlZGl0Q2FyZDpCZCwkWm9kQ3VzdG9tOk5wLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6R2QsJFpvZEN5Y2xpY0Vycm9yOmpwLCRab2REYXRlOmlwLCRab2REZWZhdWx0OnpwLCRab2REaXNjcmltaW5hdGVkVW5pb246ZnAsJFpvZEUxNjQ6RmQsJFpvZEVtYWlsOmdkLCRab2RFbW9qaTp3ZCwkWm9kRW5jb2RlRXJyb3I6VW8sJFpvZEVudW06eXAsJFpvZEVycm9yOmFsLCRab2RFeGFjdE9wdGlvbmFsOiRwLCRab2RGaWxlOmtwLCRab2RGdW5jdGlvbjpScCwkWm9kR1VJRDpmZCwkWm9kSUJBTjpKZCwkWm9kSVB2NDpBZCwkWm9kSVB2NjpSZCwkWm9kSVNPRGF0ZTpDZCwkWm9kSVNPRGF0ZVRpbWU6eGQsJFpvZElTT0R1cmF0aW9uOk9kLCRab2RJU09UaW1lOkVkLCRab2RJbnRlcnNlY3Rpb246bXAsJFpvZEpXVDpXZCwkWm9kS1NVSUQ6UGQsJFpvZExhenk6ZGksJFpvZExpdGVyYWw6X3AsJFpvZE1BQzpaZCwkWm9kTWFwOmJwLCRab2ROYU46Q3AsJFpvZE5hbm9JRDokZCwkWm9kTmV2ZXI6cnAsJFpvZE5vbk9wdGlvbmFsOklwLCRab2ROdWxsOnRwLCRab2ROdWxsYWJsZTpTcCwkWm9kTnVtYmVyOm9pLCRab2ROdW1iZXJGb3JtYXQ6UWQsJFpvZE9iamVjdDpscCwkWm9kT2JqZWN0SklUOmRwLCRab2RPcHRpb25hbDpjaSwkWm9kUGlwZTp1aSwkWm9kUHJlZmF1bHQ6VHAsJFpvZFByZXByb2Nlc3M6RXAsJFpvZFByb21pc2U6WnAsJFpvZFJlYWRvbmx5Ok9wLCRab2RSZWFsRXJyb3I6dmUsJFpvZFJlY29yZDpncCwkWm9kUmVnaXN0cnk6VXAsJFpvZFNldDp2cCwkWm9kU3RyaW5nOmRuLCRab2RTdHJpbmdGb3JtYXQ6RiwkWm9kU3VjY2VzczpQcCwkWm9kU3ltYm9sOlhkLCRab2RUZW1wbGF0ZUxpdGVyYWw6QXAsJFpvZFRyYW5zZm9ybTp3cCwkWm9kVHVwbGU6YWksJFpvZFR5cGU6eCwkWm9kVUxJRDpUZCwkWm9kVVJMOmtkLCRab2RVVUlEOm1kLCRab2RVbmRlZmluZWQ6ZXAsJFpvZFVuaW9uOkdvLCRab2RVbmtub3duOm9wLCRab2RWb2lkOnNwLCRab2RYSUQ6SWQsJFpvZFhvcjpwcCwkYnJhbmQ6QXMsJGNvbnN0cnVjdG9yOnAsJGlucHV0OmZpLCRvdXRwdXQ6aGksRG9jOmRkLElOVkFMSUQ6Z2ksSlNPTlNjaGVtYTp3YixKU09OU2NoZW1hR2VuZXJhdG9yOmtiLE5FVkVSOk9zLFRpbWVQcmVjaXNpb246VWksVVJMX0JBRF9GT1JNQVQ6WXMsVVJMX1VOUEFSU0VBQkxFOkt0LFpvZENvbXBpbGVBc3luY0Vycm9yOmJpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnZpLF9hbnk6bGgsX2FycmF5OmJoLF9iYXNlNjQ6TWksX2Jhc2U2NHVybDpxaSxfYmlnaW50Om9oLF9ib29sZWFuOnRoLF9jYXRjaDpUZyxfY2hlY2s6d2gsX2NpZHJ2NDpOaSxfY2lkcnY2OmppLF9jb2VyY2VkQmlnaW50OnJoLF9jb2VyY2VkQm9vbGVhbjpuaCxfY29lcmNlZERhdGU6bWgsX2NvZXJjZWROdW1iZXI6V3AsX2NvZXJjZWRTdHJpbmc6SHAsX2NyZWRpdENhcmQ6VnAsX2N1aWQ6eGksX2N1aWQyOkNpLF9jdXN0b206eWgsX2RhdGU6ZmgsX2RlY29kZTpqcyxfZGVjb2RlQXN5bmM6cXMsX2RlZmF1bHQ6JGcsX2Rpc2NyaW1pbmF0ZWRVbmlvbjpkZyxfZTE2NDpEaSxfZW1haWw6a2ksX2Vtb2ppOklpLF9lbmNvZGU6TnMsX2VuY29kZUFzeW5jOk1zLF9lbmRzV2l0aDpibixfZW51bTpiZyxfZmlsZTp2aCxfZmxvYXQzMjpRcCxfZmxvYXQ2NDpZcCxfZ3Q6WmUsX2d0ZTpiZSxfZ3VpZDp3aSxfaWJhbjpKcCxfaW5jbHVkZXM6bW4sX2ludDpHcCxfaW50MzI6WHAsX2ludDY0OnNoLF9pbnRlcnNlY3Rpb246cGcsX2lwdjQ6UmksX2lwdjY6WmksX2lzb0RhdGU6SGksX2lzb0RhdGVUaW1lOkZpLF9pc29EdXJhdGlvbjpWaSxfaXNvVGltZTpCaSxfand0OkxpLF9rc3VpZDpBaSxfbGF6eTpDZyxfbGVuZ3RoOnd0LF9saXRlcmFsOnlnLF9sb3dlcmNhc2U6aG4sX2x0OlJlLF9sdGU6Z2UsX21hYzpCcCxfbWFwOm1nLF9tYXg6Z2UsX21heExlbmd0aDprdCxfbWF4U2l6ZTpvdCxfbWltZTp5bixfbWluOmJlLF9taW5MZW5ndGg6VWUsX21pblNpemU6TmUsX211bHRpcGxlT2Y6WWUsX25hbjpnaCxfbmFub2lkOlBpLF9uYXRpdmVFbnVtOnZnLF9uZWdhdGl2ZTpucixfbmV2ZXI6cGgsX25vbm5lZ2F0aXZlOnJyLF9ub25vcHRpb25hbDpTZyxfbm9ucG9zaXRpdmU6b3IsX25vcm1hbGl6ZTpfbixfbnVsbDp1aCxfbnVsbGFibGU6d2csX251bWJlcjpLcCxfb3B0aW9uYWw6a2csX292ZXJ3cml0ZTpDZSxfcGFyc2U6b24sX3BhcnNlQXN5bmM6cm4sX3BpcGU6SWcsX3Bvc2l0aXZlOnRyLF9wcm9taXNlOkVnLF9wcm9wZXJ0aWVzOnZuLF9wcm9wZXJ0eTpzcixfcmVhZG9ubHk6UGcsX3JlY29yZDpmZyxfcmVmaW5lOl9oLF9yZWdleDpwbixfc2FmZURlY29kZTpMcyxfc2FmZURlY29kZUFzeW5jOkZzLF9zYWZlRW5jb2RlOkRzLF9zYWZlRW5jb2RlQXN5bmM6VXMsX3NhZmVQYXJzZTpzbixfc2FmZVBhcnNlQXN5bmM6YW4sX3NldDpnZyxfc2l6ZTpfdCxfc2x1Z2lmeTpTbixfc3RhcnRzV2l0aDpnbixfc3RyaW5nOkZwLF9zdHJpbmdGb3JtYXQ6JHQsX3N0cmluZ2Jvb2w6emgsX3N1Y2Nlc3M6emcsX3N1cGVyUmVmaW5lOmtoLF9zeW1ib2w6YWgsX3RlbXBsYXRlTGl0ZXJhbDp4ZyxfdG9Mb3dlckNhc2U6d24sX3RvVXBwZXJDYXNlOiRuLF90cmFuc2Zvcm06X2csX3RyaW06a24sX3R1cGxlOmhnLF91aW50MzI6ZWgsX3VpbnQ2NDppaCxfdWxpZDpFaSxfdW5kZWZpbmVkOmNoLF91bmlvbjp1ZyxfdW5rbm93bjpkaCxfdXBwZXJjYXNlOmZuLF91cmw6ZXIsX3V1aWQ6JGksX3V1aWR2NDpTaSxfdXVpZHY2OnppLF91dWlkdjc6VGksX3ZvaWQ6aGgsX3hpZDpPaSxfeG9yOmxnLGJhc2U2NENoYXJzZXQ6cWQsYmFzZTY0dXJsQ2hhcnNldDpuaSxjYW5QYXJzZVVSTDpYcyxjbG9uZTpHLGNvbXBpbGU6eWksY29tcGlsZUZuOmNnLGNvbmZpZzplZSxjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Q6X3MsY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kOlRoLGRlY29kZTptbSxkZWNvZGVBc3luYzpibSxkZXNjcmliZTokaCxlbmNvZGU6Zm0sZW5jb2RlQXN5bmM6Z20sZXh0cmFjdERlZnM6WmcsZmluYWxpemU6TmcsZmxhdHRlbkVycm9yOkZvLGZvcm1hdEVycm9yOkhvLGdldERpc2NyaW1pbmF0ZWRPcHRpb246aWksZ2xvYmFsQ29uZmlnOmRlLGdsb2JhbFJlZ2lzdHJ5OmtlLGhhbmRsZVVucmVwcmVzZW50YWJsZTpBZyxpbml0aWFsaXplQ29udGV4dDpPZyxpc0JhY2tFZGdlOkRwLGlzUmVjdXJzaXZlU2NoZW1hOnJnLGlzVmFsaWRCYXNlNjQ6dGksaXNWYWxpZEJhc2U2NFVSTDpMZCxpc1ZhbGlkQ0lEUnY2OmpkLGlzVmFsaWRDcmVkaXRDYXJkOkhkLGlzVmFsaWRJQkFOOlZkLGlzVmFsaWRJUHY2OmVpLGlzVmFsaWRKV1Q6S2QsbG9jYWxlczpwaSxtZW1vaXplcjpRbyxtZXJnZVZhbHVlczp6byxtZXRhOlNoLHBhcnNlOmZzLHBhcnNlQXN5bmM6bXMscGFyc2VVUkxPYmplY3Q6dmQscHJldHRpZnlFcnJvcjpacyxwcm9jZXNzOmpnLHByb2Nlc3NTY2hlbWE6UmcscmVnZXhlczpXbyxyZWdpc3RyeTpZbyxzYWZlRGVjb2RlOnltLHNhZmVEZWNvZGVBc3luYzprbSxzYWZlRW5jb2RlOnZtLHNhZmVFbmNvZGVBc3luYzpfbSxzYWZlUGFyc2U6dWwsc2FmZVBhcnNlQXN5bmM6bG0sc3RhbmRhcmRQcm9wczpRcyxzdHJpcFRhYkFuZE5ld2xpbmU6YnMsdG9Eb3RQYXRoOmNsLHRvSlNPTlNjaGVtYTpKaSx0b1pvZDpSbyx0cmVlaWZ5RXJyb3I6UnMsdXJsSG9zdG5hbWVPazp5ZCx1cmxQcm90b2NvbE9rOl9kLHV0aWw6RXMsdmFsaWRhdGU6Vm8sdmFsaWRhdGVBc3luYzpKbyx2YWxpZGF0ZVVSTDpiZCx2ZXJzaW9uOnBkLHdpdGhQYXJzZXI6X2l9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksZHU9U3ltYm9sKCJ6LnZpc2l0L3Jlc29sdmluZyIpO2Z1bmN0aW9uIEtpKGUsdCl7Y29uc3Qgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OihpLGEpPT57Y29uc3QgYz10W2kuX3pvZC5kZWYudHlwZV07cmV0dXJuIGM/YyhpLGEpOml9LG89bmV3IE1hcDtmdW5jdGlvbiByKGkpe2NvbnN0IGE9by5nZXQoaSk7aWYoYT09PWR1KXJldHVybiBuZXcgZGkoe3R5cGU6ImxhenkiLGdldHRlcjooKT0+by5nZXQoaSl9KTtpZihhIT09dm9pZCAwKXJldHVybiBhO28uc2V0KGksZHUpO2NvbnN0IGM9cyhpKSxsPW4oYyxjIT09aSk7cmV0dXJuIG8uc2V0KGksbCksbH1mdW5jdGlvbiBzKGkpe2NvbnN0IGE9aS5fem9kLmRlZjtzd2l0Y2goYS50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9YS5zaGFwZSxkPU9iamVjdC5rZXlzKGwpO2xldCBtPSExO2NvbnN0IGI9e307Zm9yKGNvbnN0IF8gb2YgZCl7Y29uc3Qgaz1yKGxbX10pO2shPT1sW19dJiYobT0hMCksYltfXT1rfWxldCB2PWEuY2F0Y2hhbGw7cmV0dXJuIGEuY2F0Y2hhbGwmJih2PXIoYS5jYXRjaGFsbCksdiE9PWEuY2F0Y2hhbGwmJihtPSEwKSksbT9HKGksey4uLmEsc2hhcGU6YixjYXRjaGFsbDp2fSk6aX1jYXNlImFycmF5Ijp7Y29uc3QgbD1yKGEuZWxlbWVudCk7cmV0dXJuIGw9PT1hLmVsZW1lbnQ/aTpHKGksey4uLmEsZWxlbWVudDpsfSl9Y2FzZSJ0dXBsZSI6e2NvbnN0IGw9YS5pdGVtcztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCB2IG9mIGwpe2NvbnN0IF89cih2KTtfIT09diYmKGQ9ITApLG0ucHVzaChfKX1sZXQgYj1hLnJlc3Q7cmV0dXJuIGEucmVzdCYmKGI9cihhLnJlc3QpLGIhPT1hLnJlc3QmJihkPSEwKSksZD9HKGksey4uLmEsaXRlbXM6bSxyZXN0OmJ9KTppfWNhc2UicmVjb3JkIjpjYXNlIm1hcCI6e2NvbnN0IGw9cihhLmtleVR5cGUpLGQ9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLmtleVR5cGUmJmQ9PT1hLnZhbHVlVHlwZT9pOkcoaSx7Li4uYSxrZXlUeXBlOmwsdmFsdWVUeXBlOmR9KX1jYXNlInNldCI6e2NvbnN0IGw9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLnZhbHVlVHlwZT9pOkcoaSx7Li4uYSx2YWx1ZVR5cGU6bH0pfWNhc2UidW5pb24iOntjb25zdCBsPWEub3B0aW9ucztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCBiIG9mIGwpe2NvbnN0IHY9cihiKTt2IT09YiYmKGQ9ITApLG0ucHVzaCh2KX1yZXR1cm4gZD9HKGksey4uLmEsb3B0aW9uczptfSk6aX1jYXNlImludGVyc2VjdGlvbiI6e2NvbnN0IGw9cihhLmxlZnQpLGQ9cihhLnJpZ2h0KTtyZXR1cm4gbD09PWEubGVmdCYmZD09PWEucmlnaHQ/aTpHKGksey4uLmEsbGVmdDpsLHJpZ2h0OmR9KX1jYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjp7Y29uc3QgbD1yKGEuaW5uZXJUeXBlKTtyZXR1cm4gbD09PWEuaW5uZXJUeXBlP2k6RyhpLHsuLi5hLGlubmVyVHlwZTpsfSl9Y2FzZSJwaXBlIjp7Y29uc3QgbD1yKGEuaW4pLGQ9cihhLm91dCk7cmV0dXJuIGw9PT1hLmluJiZkPT09YS5vdXQ/aTpHKGksey4uLmEsaW46bCxvdXQ6ZH0pfWNhc2UiZnVuY3Rpb24iOntjb25zdCBsPXIoYS5pbnB1dCksZD1yKGEub3V0cHV0KTtyZXR1cm4gbD09PWEuaW5wdXQmJmQ9PT1hLm91dHB1dD9pOkcoaSx7Li4uYSxpbnB1dDpsLG91dHB1dDpkfSl9Y2FzZSJsYXp5Ijp7Y29uc3QgbD1hLmdldHRlcix7X2NhY2hlZElubmVyOmQsLi4ubX09YTtyZXR1cm4gRyhpLHsuLi5tLGdldHRlcjooKT0+cihsKCkpfSl9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOnJldHVybiBpO2RlZmF1bHQ6cmV0dXJuIGl9fXJldHVybiByKGUpfWZ1bmN0aW9uIFdpKGUpe3JldHVybiEhZS5fem9kfWZ1bmN0aW9uIENoKGUsdCl7cmV0dXJuIFdpKGUpP3VsKGUsdCk6ZS5zYWZlUGFyc2UodCl9ZnVuY3Rpb24gJGIoZSl7aWYoIWUpcmV0dXJuO2xldCB0O2lmKFdpKGUpP3Q9ZS5fem9kPy5kZWY/LnNoYXBlOnQ9ZS5zaGFwZSwhIXQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXRyeXtyZXR1cm4gdCgpfWNhdGNoe3JldHVybn1yZXR1cm4gdH19ZnVuY3Rpb24gU2IoZSl7aWYoV2koZSkpe2NvbnN0IHM9ZS5fem9kPy5kZWY7aWYocyl7aWYocy52YWx1ZSE9PXZvaWQgMClyZXR1cm4gcy52YWx1ZTtpZihBcnJheS5pc0FycmF5KHMudmFsdWVzKSYmcy52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIHMudmFsdWVzWzBdfX1jb25zdCBuPWUuX2RlZjtpZihuKXtpZihuLnZhbHVlIT09dm9pZCAwKXJldHVybiBuLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkobi52YWx1ZXMpJiZuLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gbi52YWx1ZXNbMF19Y29uc3Qgbz1lLnZhbHVlO2lmKG8hPT12b2lkIDApcmV0dXJuIG99Y29uc3QgemI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuZHNXaXRoOmJuLGd0OlplLGd0ZTpiZSxpbmNsdWRlczptbixsZW5ndGg6d3QsbG93ZXJjYXNlOmhuLGx0OlJlLGx0ZTpnZSxtYXhMZW5ndGg6a3QsbWF4U2l6ZTpvdCxtaW1lOnluLG1pbkxlbmd0aDpVZSxtaW5TaXplOk5lLG11bHRpcGxlT2Y6WWUsbmVnYXRpdmU6bnIsbm9ubmVnYXRpdmU6cnIsbm9ucG9zaXRpdmU6b3Isbm9ybWFsaXplOl9uLG92ZXJ3cml0ZTpDZSxwb3NpdGl2ZTp0cixwcm9wZXJ0aWVzOnZuLHByb3BlcnR5OnNyLHJlZ2V4OnBuLHNpemU6X3Qsc2x1Z2lmeTpTbixzdGFydHNXaXRoOmduLHRvTG93ZXJDYXNlOnduLHRvVXBwZXJDYXNlOiRuLHRyaW06a24sdXBwZXJjYXNlOmZufSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHB1PW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pO2Z1bmN0aW9uIGZvKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPW4odGhpcyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSl9Y29uc3QgRWg9KGUsdCk9PnthbC5pbml0KGUsdCksZS5uYW1lPSJab2RFcnJvciI7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cHUuaGFzKG4pfHwocHUuYWRkKG4pLGZvKG4sImZvcm1hdCIsbz0+cj0+SG8obyxyKSksZm8obiwiZmxhdHRlbiIsbz0+cj0+Rm8obyxyKSksZm8obiwiYWRkSXNzdWUiLG89PnI9PntvLmlzc3Vlcy5wdXNoKHIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxfbywyKX0pLGZvKG4sImFkZElzc3VlcyIsbz0+cj0+e28uaXNzdWVzLnB1c2goLi4uciksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLF9vLDIpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImlzRW1wdHkiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH19KSl9LE9oPXAoIlpvZEVycm9yIixFaCksZmU9cCgiWm9kRXJyb3IiLEVoLHZvaWQgMCx7UGFyZW50OkVycm9yfSksR2k9b24oZmUpLFFpPXJuKGZlKSxZaT1zbihmZSksWGk9YW4oZmUpLGVhPU5zKGZlKSx0YT1qcyhmZSksbmE9TXMoZmUpLG9hPXFzKGZlKSxyYT1EcyhmZSksc2E9THMoZmUpLGlhPVVzKGZlKSxhYT1GcyhmZSk7ZnVuY3Rpb24gVGIoKXtkZS5sb2NhbGVFcnJvcnx8ZWUoTHAoKSl9ZnVuY3Rpb24gcnQoKXtkZS5tZW1vaXplcnx8ZWUoe21lbW9pemVyOlFvKCl9KX1jb25zdCBFPXAoIlpvZFR5cGUiLChlLHQpPT4oVGIoKSx4LmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUodWUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEcodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKEpyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKEtyKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soQ2UoZSkpfSxvcHRpb25hbCgpe3JldHVybiBCKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIElyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBndCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBCKGd0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIEFyKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIFAodGhpcyl9LG9yKGUpe3JldHVybiBPKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiBadCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIEd0KHRoaXMsS24oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBDcih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gT3IodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIE5yKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIEd0KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIERyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4ga2UuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4ga2UuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBrZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIExvKHRoaXMsIn5zdGFuZGFyZCIsey4uLlFzKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0Ol9zKCksb3V0cHV0Ol9zKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe0FlKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gR2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBRaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIFlpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gWGkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe0FlKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIFZvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBKbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGVhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiB0YSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBuYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBvYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiByYSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gc2EodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gaWEodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gYWEodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIFRoKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBrZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHpuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57ZG4uaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5NZygpfSxubih7Zm9ybWF0OmU9PndlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT53ZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PndlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHBuKC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sobW4oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGduKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soYm4oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soVWUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soa3QoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sod3QoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhVZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGhuKGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGZuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKGtuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soX24oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKHduKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKCRuKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soU24oKSl9fSkpLFN0PXAoIlpvZFN0cmluZyIsKGUsdCk9Pntkbi5pbml0KGUsdCksem4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soa2koVG4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soZXIoeHQsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soTGkoVW4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhJaShQbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2koSW4sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKCRpKEllLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKFNpKEllLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHppKEllLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKFRpKEllLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKFBpKHhuLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh4aShDbixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKENpKEVuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhFaShPbixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShxbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhxaShEbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhPaShBbixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKEFpKFJuLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhSaShabixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soWmkoTm4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTmkoam4sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soamkoTW4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKERpKExuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soRmkoenQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEhpKFR0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhCaShJdCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKFZpKFB0LGUpKX19KTtmdW5jdGlvbiBoKGUpe3JldHVybiBGcChTdCxlKX1jb25zdCBMPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntGLmluaXQoZSx0KSx6bi5pbml0KGUsdCl9KSx6dD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt4ZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KSxUdD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e0NkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLEl0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57RWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksUHQ9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57T2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksVG49cCgiWm9kRW1haWwiLChlLHQpPT57Z2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gY2EoZSl7cmV0dXJuIGtpKFRuLGUpfWNvbnN0IEluPXAoIlpvZEdVSUQiLChlLHQpPT57ZmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIHdpKEluLGUpfWNvbnN0IEllPXAoIlpvZFVVSUQiLChlLHQpPT57bWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gbGEoZSl7cmV0dXJuICRpKEllLGUpfWZ1bmN0aW9uIGRhKGUpe3JldHVybiBTaShJZSxlKX1mdW5jdGlvbiBwYShlKXtyZXR1cm4gemkoSWUsZSl9ZnVuY3Rpb24gaGEoZSl7cmV0dXJuIFRpKEllLGUpfWNvbnN0IHh0PXAoIlpvZFVSTCIsKGUsdCk9PntrZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBmYShlKXtyZXR1cm4gZXIoeHQsZSl9ZnVuY3Rpb24gbWEoZSl7cmV0dXJuIGVyKHh0LHtwcm90b2NvbDpIcyxob3N0bmFtZTp4bCwuLi55KGUpfSl9Y29uc3QgUG49cCgiWm9kRW1vamkiLChlLHQpPT57d2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZ2EoZSl7cmV0dXJuIElpKFBuLGUpfWNvbnN0IHhuPXAoIlpvZE5hbm9JRCIsKGUsdCk9PnskZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBiYShlKXtyZXR1cm4gUGkoeG4sZSl9Y29uc3QgQ249cCgiWm9kQ1VJRCIsKGUsdCk9PntTZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB2YShlKXtyZXR1cm4geGkoQ24sZSl9Y29uc3QgRW49cCgiWm9kQ1VJRDIiLChlLHQpPT57emQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24geWEoZSl7cmV0dXJuIENpKEVuLGUpfWNvbnN0IE9uPXAoIlpvZFVMSUQiLChlLHQpPT57VGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gX2EoZSl7cmV0dXJuIEVpKE9uLGUpfWNvbnN0IEFuPXAoIlpvZFhJRCIsKGUsdCk9PntJZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBrYShlKXtyZXR1cm4gT2koQW4sZSl9Y29uc3QgUm49cCgiWm9kS1NVSUQiLChlLHQpPT57UGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIEFpKFJuLGUpfWNvbnN0IFpuPXAoIlpvZElQdjQiLChlLHQpPT57QWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIFJpKFpuLGUpfWNvbnN0IGlyPXAoIlpvZE1BQyIsKGUsdCk9PntaZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBTYShlKXtyZXR1cm4gQnAoaXIsZSl9Y29uc3QgTm49cCgiWm9kSVB2NiIsKGUsdCk9PntSZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB6YShlKXtyZXR1cm4gWmkoTm4sZSl9Y29uc3Qgam49cCgiWm9kQ0lEUnY0IiwoZSx0KT0+e05kLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFRhKGUpe3JldHVybiBOaShqbixlKX1jb25zdCBNbj1wKCJab2RDSURSdjYiLChlLHQpPT57TWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIGppKE1uLGUpfWNvbnN0IHFuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntEZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBQYShlKXtyZXR1cm4gTWkocW4sZSl9Y29uc3QgRG49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e1VkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBxaShEbixlKX1jb25zdCBMbj1wKCJab2RFMTY0IiwoZSx0KT0+e0ZkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBEaShMbixlKX1jb25zdCBhcj1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e0JkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBWcChhcixlKX1jb25zdCBjcj1wKCJab2RJQkFOIiwoZSx0KT0+e0pkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE9hKGUpe3JldHVybiBKcChjcixlKX1jb25zdCBVbj1wKCJab2RKV1QiLChlLHQpPT57V2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gQWEoZSl7cmV0dXJuIExpKFVuLGUpfWNvbnN0IEhlPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntHZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBSYShlLHQsbj17fSl7cmV0dXJuICR0KEhlLGUsdCxuKX1mdW5jdGlvbiBaYShlKXtyZXR1cm4gJHQoSGUsImhvc3RuYW1lIixQbCxlKX1mdW5jdGlvbiBOYShlKXtyZXR1cm4gJHQoSGUsImhleCIsQmwsZSl9ZnVuY3Rpb24gamEoZSl7cmV0dXJuICR0KEhlLCJjdXJyZW5jeV9jb2RlIixFbCxlKX1mdW5jdGlvbiBNYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9V29bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gJHQoSGUsbyxyLHQpfWNvbnN0IEN0PXAoIlpvZE51bWJlciIsKGUsdCk9PntvaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnFnKCksZS5pc0Zpbml0ZT0hMH0sbm4oe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT13ZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PXdlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PXdlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+d2UoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFplKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUmUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGdlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhnZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKFd0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhXdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKFplKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGdlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWWUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhZZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIEtwKEN0LGUpfWNvbnN0IEJlPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntRZC5pbml0KGUsdCksQ3QuaW5pdChlLHQpfSk7ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIEdwKEJlLGUpfWZ1bmN0aW9uIHFhKGUpe3JldHVybiBRcChCZSxlKX1mdW5jdGlvbiBEYShlKXtyZXR1cm4gWXAoQmUsZSl9ZnVuY3Rpb24gTGEoZSl7cmV0dXJuIFhwKEJlLGUpfWZ1bmN0aW9uIFVhKGUpe3JldHVybiBlaChCZSxlKX1jb25zdCBFdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e3JpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RGcoKX0pO2Z1bmN0aW9uIEQoZSl7cmV0dXJuIHRoKEV0LGUpfWNvbnN0IE90PXAoIlpvZEJpZ0ludCIsKGUsdCk9PntzaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkxnKCl9LG5uKHttaW5WYWx1ZTplPT53ZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+d2UoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT53ZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhaZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhSZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZ2UoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGdlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhaZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhSZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhnZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWWUoZSx0KSl9fSkpO2Z1bmN0aW9uIEZhKGUpe3JldHVybiBvaChPdCxlKX1jb25zdCBGbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57WWQuaW5pdChlLHQpLE90LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEhhKGUpe3JldHVybiBzaChGbixlKX1mdW5jdGlvbiBCYShlKXtyZXR1cm4gaWgoRm4sZSl9Y29uc3QgdXI9cCgiWm9kU3ltYm9sIiwoZSx0KT0+e1hkLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWcoKX0pO2Z1bmN0aW9uIFZhKGUpe3JldHVybiBhaCh1cixlKX1jb25zdCBscj1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57ZXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IZygpfSk7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIGNoKGxyLGUpfWNvbnN0IGRyPXAoIlpvZE51bGwiLChlLHQpPT57dHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5GZygpfSk7ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHVoKGRyLGUpfWNvbnN0IHByPXAoIlpvZEFueSIsKGUsdCk9PntucC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkpnKCl9KTtmdW5jdGlvbiBCbigpe3JldHVybiBsaChwcil9Y29uc3QgaHI9cCgiWm9kVW5rbm93biIsKGUsdCk9PntvcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PktnKCl9KTtmdW5jdGlvbiBNKCl7cmV0dXJuIGRoKGhyKX1jb25zdCBmcj1wKCJab2ROZXZlciIsKGUsdCk9PntycC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlZnKCl9KTtmdW5jdGlvbiBYZShlKXtyZXR1cm4gcGgoZnIsZSl9Y29uc3QgbXI9cCgiWm9kVm9pZCIsKGUsdCk9PntzcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkJnKCl9KTtmdW5jdGlvbiBKYShlKXtyZXR1cm4gaGgobXIsZSl9Y29uc3QgVm49cCgiWm9kRGF0ZSIsKGUsdCk9PntpcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PldnKCksZS5taW49KG4sbyk9PmUuY2hlY2soYmUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2soZ2UobixvKSl9LG5uKHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PXdlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT13ZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIEthKGUpe3JldHVybiBmaChWbixlKX1jb25zdCBncj1wKCJab2RBcnJheSIsKGUsdCk9PntydCgpLGFwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YWIoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soVWUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKFVlKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhrdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sod3QoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24gUChlLHQpe3JldHVybiBiaChncixlLHQpfWZ1bmN0aW9uIFdhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gcmUoT2JqZWN0LmtleXModCkpfWNvbnN0IEF0PXAoIlpvZE9iamVjdCIsKGUsdCk9PntydCgpLGRwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Y2IoKSxybChlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiByZShPYmplY3Qua2V5cyh0aGlzLl96b2QuZGVmLnNoYXBlKSl9LGNhdGNoYWxsKGUpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOmV9KSl9LHBhc3N0aHJvdWdoKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6TSgpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOk0oKX0pKX0sc3RyaWN0KCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WGUoKX0pKX0sc3RyaXAoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gS3UodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4gR3UodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIFF1KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIFZ1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIEp1KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIHBzKE50LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gcHMoV24sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIFl1KEduLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gZyhlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4ueSh0KX07cmV0dXJuIG5ldyBBdChuKX1mdW5jdGlvbiBHYShlLHQpe3JldHVybiBuZXcgQXQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpYZSgpLC4uLnkodCl9KX1mdW5jdGlvbiBvZShlLHQpe3JldHVybiBuZXcgQXQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpNKCksLi4ueSh0KX0pfWNvbnN0IFJ0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e0dvLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gTyhlLHQpe3JldHVybiBuZXcgUnQoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4ueSh0KX0pfWNvbnN0IGJyPXAoIlpvZFhvciIsKGUsdCk9PntSdC5pbml0KGUsdCkscHAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5JaCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBRYShlLHQpe3JldHVybiBuZXcgYnIoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLnkodCl9KX1jb25zdCB2cj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57UnQuaW5pdChlLHQpLGZwLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEpuKGUsdCxuKXtyZXR1cm4gbmV3IHZyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi55KG4pfSl9Y29uc3QgeXI9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e21wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dWIoKX0pO2Z1bmN0aW9uIFp0KGUsdCl7cmV0dXJuIG5ldyB5cih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IF9yPXAoIlpvZFR1cGxlIiwoZSx0KT0+e3J0KCksYWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5sYigpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgTnQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIGtyKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiB4LHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IF9yKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4ueShyKX0pfWNvbnN0IGV0PXAoIlpvZFJlY29yZCIsKGUsdCk9PntydCgpLGdwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZGIoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gUihlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IGV0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6aCgpLHZhbHVlVHlwZTplLC4uLnkodCl9KTpuZXcgZXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBZYShlLHQsbil7cmV0dXJuIG5ldyBldCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gWGEoZSx0LG4pe3JldHVybiBuZXcgZXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi55KG4pfSl9Y29uc3Qgd3I9cCgiWm9kTWFwIiwoZSx0KT0+e3J0KCksYnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5zYigpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKE5lKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soTmUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKG90KC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKF90KC4uLm4pKX0pO2Z1bmN0aW9uIGVjKGUsdCxuKXtyZXR1cm4gbmV3IHdyKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9Y29uc3QgJHI9cCgiWm9kU2V0IiwoZSx0KT0+e3J0KCksdnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pYigpLGUubWluPSguLi5uKT0+ZS5jaGVjayhOZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKE5lKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhvdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhfdCguLi5uKSl9KTtmdW5jdGlvbiB0YyhlLHQpe3JldHVybiBuZXcgJHIoe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IHR0PXAoIlpvZEVudW0iLChlLHQpPT57eXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5HZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgdHQoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IHR0KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIHJlKGUsdCl7Y29uc3Qgbj1BcnJheS5pc0FycmF5KGUpP09iamVjdC5mcm9tRW50cmllcyhlLm1hcChvPT5bbyxvXSkpOmU7cmV0dXJuIG5ldyB0dCh7dHlwZToiZW51bSIsZW50cmllczpuLC4uLnkodCl9KX1mdW5jdGlvbiBuYyhlLHQpe3JldHVybiBuZXcgdHQoe3R5cGU6ImVudW0iLGVudHJpZXM6ZSwuLi55KHQpfSl9Y29uc3QgU3I9cCgiWm9kTGl0ZXJhbCIsKGUsdCk9PntfcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlFnKCksZS52YWx1ZXM9bmV3IFNldCh0LnZhbHVlcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInZhbHVlIix7Z2V0KCl7aWYodC52YWx1ZXMubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHNjaGVtYSBjb250YWlucyBtdWx0aXBsZSB2YWxpZCBsaXRlcmFsIHZhbHVlcy4gVXNlIGAudmFsdWVzYCBpbnN0ZWFkLiIpO3JldHVybiB0LnZhbHVlc1swXX19KX0pO2Z1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbmV3IFNyKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheShlKT9lOltlXSwuLi55KHQpfSl9Y29uc3QgenI9cCgiWm9kRmlsZSIsKGUsdCk9PntrcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmViKCksZS5taW49KG4sbyk9PmUuY2hlY2soTmUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2sob3QobixvKSksZS5taW1lPShuLG8pPT5lLmNoZWNrKHluKEFycmF5LmlzQXJyYXkobik/bjpbbl0sbykpfSk7ZnVuY3Rpb24gb2MoZSl7cmV0dXJuIHZoKHpyLGUpfWNvbnN0IFRyPXAoIlpvZFRyYW5zZm9ybSIsKGUsdCk9PntydCgpLHdwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cmIoKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFVvKGUuY29uc3RydWN0b3IubmFtZSk7bi5hZGRJc3N1ZT1zPT57aWYodHlwZW9mIHM9PSJzdHJpbmciKW4uaXNzdWVzLnB1c2goaHQocyxuLnZhbHVlLHQpKTtlbHNle2NvbnN0IGk9cztpLmZhdGFsJiYoaS5jb250aW51ZT0hMSksaS5jb2RlPz8oaS5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gaXx8KGkuaW5wdXQ9bi52YWx1ZSksaS5pbnN0Pz8oaS5pbnN0PWUpLG4uaXNzdWVzLnB1c2goaHQoaSkpfX07Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cyxuKSk6KG4udmFsdWU9cixuKX19KTtmdW5jdGlvbiBLbihlKXtyZXR1cm4gbmV3IFRyKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTplfSl9Y29uc3QgTnQ9cCgiWm9kT3B0aW9uYWwiLChlLHQpPT57Y2kuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEIoZSl7cmV0dXJuIG5ldyBOdCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3QgV249cCgiWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9PnskcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlBoKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gSXIoZSl7cmV0dXJuIG5ldyBXbih7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3QgUHI9cCgiWm9kTnVsbGFibGUiLChlLHQpPT57U3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5wYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIGd0KGUpe3JldHVybiBuZXcgUHIoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6ZX0pfWZ1bmN0aW9uIHJjKGUpe3JldHVybiBCKGd0KGUpKX1jb25zdCB4cj1wKCJab2REZWZhdWx0IiwoZSx0KT0+e3pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVEZWZhdWx0PWUudW53cmFwfSk7ZnVuY3Rpb24gQ3IoZSx0KXtyZXR1cm4gbmV3IHhyKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpObyh0KX19KX1jb25zdCBFcj1wKCJab2RQcmVmYXVsdCIsKGUsdCk9PntUcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gT3IoZSx0KXtyZXR1cm4gbmV3IEVyKHt0eXBlOiJwcmVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6Tm8odCl9fSl9Y29uc3QgR249cCgiWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57SXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEFyKGUsdCl7cmV0dXJuIG5ldyBHbih7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTplLC4uLnkodCl9KX1jb25zdCBScj1wKCJab2RTdWNjZXNzIiwoZSx0KT0+e1BwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBzYyhlKXtyZXR1cm4gbmV3IFJyKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6ZX0pfWNvbnN0IFpyPXAoIlpvZENhdGNoIiwoZSx0KT0+e3hwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2IoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVDYXRjaD1lLnVud3JhcH0pO2Z1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIG5ldyBacih7dHlwZToiY2F0Y2giLGlubmVyVHlwZTplLGNhdGNoVmFsdWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpDcyh0KX0pfWNvbnN0IGpyPXAoIlpvZE5hTiIsKGUsdCk9PntDcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PllnKCl9KTtmdW5jdGlvbiBpYyhlKXtyZXR1cm4gZ2goanIsZSl9Y29uc3QganQ9cCgiWm9kUGlwZSIsKGUsdCk9Pnt1aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmJiKCksZS5pbj10LmluLGUub3V0PXQub3V0fSk7ZnVuY3Rpb24gR3QoZSx0KXtyZXR1cm4gbmV3IGp0KHt0eXBlOiJwaXBlIixpbjplLG91dDp0fSl9Y29uc3QgTXQ9cCgiWm9kQ29kZWMiLChlLHQpPT57anQuaW5pdChlLHQpLGxpLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGFjKGUsdCxuKXtyZXR1cm4gbmV3IE10KHt0eXBlOiJwaXBlIixpbjplLG91dDp0LHRyYW5zZm9ybTpuLmRlY29kZSxyZXZlcnNlVHJhbnNmb3JtOm4uZW5jb2RlfSl9ZnVuY3Rpb24gY2MoZSl7Y29uc3QgdD1lLl96b2QuZGVmO3JldHVybiBuZXcgTXQoe3R5cGU6InBpcGUiLGluOnQub3V0LG91dDp0LmluLHRyYW5zZm9ybTp0LnJldmVyc2VUcmFuc2Zvcm0scmV2ZXJzZVRyYW5zZm9ybTp0LnRyYW5zZm9ybX0pfWNvbnN0IE1yPXAoIlpvZFByZXByb2Nlc3MiLChlLHQpPT57anQuaW5pdChlLHQpLEVwLmluaXQoZSx0KX0pLHFyPXAoIlpvZFJlYWRvbmx5IiwoZSx0KT0+e09wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBEcihlKXtyZXR1cm4gbmV3IHFyKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOmV9KX1jb25zdCBMcj1wKCJab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57QXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5YZygpfSk7ZnVuY3Rpb24gdWMoZSx0KXtyZXR1cm4gbmV3IExyKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czplLC4uLnkodCl9KX1jb25zdCBVcj1wKCJab2RMYXp5IiwoZSx0KT0+e2RpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+X2IoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5nZXR0ZXIoKX0pO2Z1bmN0aW9uIEZyKGUpe3JldHVybiBuZXcgVXIoe3R5cGU6ImxhenkiLGdldHRlcjplfSl9Y29uc3QgSHI9cCgiWm9kUHJvbWlzZSIsKGUsdCk9PntacC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnliKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbGMoZSl7cmV0dXJuIG5ldyBIcih7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOmV9KX1jb25zdCBCcj1wKCJab2RGdW5jdGlvbiIsKGUsdCk9PntScC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm9iKCl9KTtmdW5jdGlvbiBidChlKXtyZXR1cm4gbmV3IEJyKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6QXJyYXkuaXNBcnJheShlPy5pbnB1dCk/a3IoZT8uaW5wdXQpOmU/LmlucHV0Pz9QKE0oKSksb3V0cHV0OmU/Lm91dHB1dD8/TSgpfSl9Y29uc3QgcXQ9cCgiWm9kQ3VzdG9tIiwoZSx0KT0+e05wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bmIoKX0pO2Z1bmN0aW9uIGRjKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJjdXN0b20ifSk7cmV0dXJuIHQuX3pvZC5jaGVjaz1lLHR9ZnVuY3Rpb24gVnIoZSx0KXtyZXR1cm4geWgocXQsZT8/KCgpPT4hMCksdCl9ZnVuY3Rpb24gSnIoZSx0PXt9KXtyZXR1cm4gX2gocXQsZSx0KX1mdW5jdGlvbiBLcihlLHQpe3JldHVybiBraChlLHQpfWNvbnN0IHBjPSRoLGhjPVNoLFdyPXAoIlpvZEluc3RhbmNlT2YiLChlLHQpPT57cXQuaW5pdChlLHQpfSx7cHJvcGVydGllcyhlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZuKGUsdCkpfX0pO2Z1bmN0aW9uIGZjKGUsdD17fSl7Y29uc3Qgbj1uZXcgV3Ioe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46bz0+byBpbnN0YW5jZW9mIGUsYWJvcnQ6ITAsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuYmFnLkNsYXNzPWUsbi5fem9kLmNoZWNrPW89PntvLnZhbHVlIGluc3RhbmNlb2YgZXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDplLm5hbWUsaW5wdXQ6by52YWx1ZSxpbnN0Om4scGF0aDpbLi4ubi5fem9kLmRlZi5wYXRoPz9bXV19KX0sbn1jb25zdCBtYz0oLi4uZSk9PnpoKHtDb2RlYzpNdCxCb29sZWFuOkV0LFN0cmluZzpTdH0sLi4uZSk7ZnVuY3Rpb24gZ2MoZSl7Y29uc3QgdD1GcigoKT0+TyhbaChlKSxDKCksRCgpLEhuKCksUCh0KSxSKGgoKSx0KV0pKTtyZXR1cm4gdH1mdW5jdGlvbiBRbihlLHQpe3JldHVybiBuZXcgTXIoe3R5cGU6InBpcGUiLGluOktuKGUpLG91dDp0fSl9Y29uc3QgSWI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZEFueTpwcixab2RBcnJheTpncixab2RCYXNlNjQ6cW4sWm9kQmFzZTY0VVJMOkRuLFpvZEJpZ0ludDpPdCxab2RCaWdJbnRGb3JtYXQ6Rm4sWm9kQm9vbGVhbjpFdCxab2RDSURSdjQ6am4sWm9kQ0lEUnY2Ok1uLFpvZENVSUQ6Q24sWm9kQ1VJRDI6RW4sWm9kQ2F0Y2g6WnIsWm9kQ29kZWM6TXQsWm9kQ3JlZGl0Q2FyZDphcixab2RDdXN0b206cXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkhlLFpvZERhdGU6Vm4sWm9kRGVmYXVsdDp4cixab2REaXNjcmltaW5hdGVkVW5pb246dnIsWm9kRTE2NDpMbixab2RFbWFpbDpUbixab2RFbW9qaTpQbixab2RFbnVtOnR0LFpvZEV4YWN0T3B0aW9uYWw6V24sWm9kRmlsZTp6cixab2RGdW5jdGlvbjpCcixab2RHVUlEOkluLFpvZElCQU46Y3IsWm9kSVB2NDpabixab2RJUHY2Ok5uLFpvZElTT0RhdGU6VHQsWm9kSVNPRGF0ZVRpbWU6enQsWm9kSVNPRHVyYXRpb246UHQsWm9kSVNPVGltZTpJdCxab2RJbnN0YW5jZU9mOldyLFpvZEludGVyc2VjdGlvbjp5cixab2RKV1Q6VW4sWm9kS1NVSUQ6Um4sWm9kTGF6eTpVcixab2RMaXRlcmFsOlNyLFpvZE1BQzppcixab2RNYXA6d3IsWm9kTmFOOmpyLFpvZE5hbm9JRDp4bixab2ROZXZlcjpmcixab2ROb25PcHRpb25hbDpHbixab2ROdWxsOmRyLFpvZE51bGxhYmxlOlByLFpvZE51bWJlcjpDdCxab2ROdW1iZXJGb3JtYXQ6QmUsWm9kT2JqZWN0OkF0LFpvZE9wdGlvbmFsOk50LFpvZFBpcGU6anQsWm9kUHJlZmF1bHQ6RXIsWm9kUHJlcHJvY2VzczpNcixab2RQcm9taXNlOkhyLFpvZFJlYWRvbmx5OnFyLFpvZFJlY29yZDpldCxab2RTZXQ6JHIsWm9kU3RyaW5nOlN0LFpvZFN0cmluZ0Zvcm1hdDpMLFpvZFN1Y2Nlc3M6UnIsWm9kU3ltYm9sOnVyLFpvZFRlbXBsYXRlTGl0ZXJhbDpMcixab2RUcmFuc2Zvcm06VHIsWm9kVHVwbGU6X3IsWm9kVHlwZTpFLFpvZFVMSUQ6T24sWm9kVVJMOnh0LFpvZFVVSUQ6SWUsWm9kVW5kZWZpbmVkOmxyLFpvZFVuaW9uOlJ0LFpvZFVua25vd246aHIsWm9kVm9pZDptcixab2RYSUQ6QW4sWm9kWG9yOmJyLF9ab2RTdHJpbmc6em4sX2RlZmF1bHQ6Q3IsX2Z1bmN0aW9uOmJ0LGFueTpCbixhcnJheTpQLGJhc2U2NDpQYSxiYXNlNjR1cmw6eGEsYmlnaW50OkZhLGJvb2xlYW46RCxjYXRjaDpOcixjaGVjazpkYyxjaWRydjQ6VGEsY2lkcnY2OklhLGNvZGVjOmFjLGNyZWRpdENhcmQ6RWEsY3VpZDp2YSxjdWlkMjp5YSxjdXJyZW5jeUNvZGU6amEsY3VzdG9tOlZyLGRhdGU6S2EsZGVzY3JpYmU6cGMsZGlzY3JpbWluYXRlZFVuaW9uOkpuLGUxNjQ6Q2EsZW1haWw6Y2EsZW1vamk6Z2EsZW51bTpyZSxleGFjdE9wdGlvbmFsOklyLGZpbGU6b2MsZmxvYXQzMjpxYSxmbG9hdDY0OkRhLGZ1bmN0aW9uOmJ0LGd1aWQ6dWEsaGFzaDpNYSxoZXg6TmEsaG9zdG5hbWU6WmEsaHR0cFVybDptYSxpYmFuOk9hLGluc3RhbmNlb2Y6ZmMsaW50Old0LGludDMyOkxhLGludDY0OkhhLGludGVyc2VjdGlvbjpadCxpbnZlcnRDb2RlYzpjYyxpcHY0OiRhLGlwdjY6emEsanNvbjpnYyxqd3Q6QWEsa2V5b2Y6V2Esa3N1aWQ6d2EsbGF6eTpGcixsaXRlcmFsOmYsbG9vc2VPYmplY3Q6b2UsbG9vc2VSZWNvcmQ6WGEsbWFjOlNhLG1hcDplYyxtZXRhOmhjLG5hbjppYyxuYW5vaWQ6YmEsbmF0aXZlRW51bTpuYyxuZXZlcjpYZSxub25vcHRpb25hbDpBcixudWxsOkhuLG51bGxhYmxlOmd0LG51bGxpc2g6cmMsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6QixwYXJ0aWFsUmVjb3JkOllhLHBpcGU6R3QscHJlZmF1bHQ6T3IscHJlcHJvY2VzczpRbixwcm9taXNlOmxjLHJlYWRvbmx5OkRyLHJlY29yZDpSLHJlZmluZTpKcixzZXQ6dGMsc3RyaWN0T2JqZWN0OkdhLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpSYSxzdHJpbmdib29sOm1jLHN1Y2Nlc3M6c2Msc3VwZXJSZWZpbmU6S3Isc3ltYm9sOlZhLHRlbXBsYXRlTGl0ZXJhbDp1Yyx0cmFuc2Zvcm06S24sdHVwbGU6a3IsdWludDMyOlVhLHVpbnQ2NDpCYSx1bGlkOl9hLHVuZGVmaW5lZDptdCx1bmlvbjpPLHVua25vd246TSx1cmw6ZmEsdXVpZDpsYSx1dWlkdjQ6ZGEsdXVpZHY2OnBhLHV1aWR2NzpoYSx2b2lkOkphLHhpZDprYSx4b3I6UWF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQWg9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIFJoKGUpe2VlKHtjdXN0b21FcnJvcjplfSl9ZnVuY3Rpb24gWmgoKXtyZXR1cm4gZWUoKS5jdXN0b21FcnJvcn12YXIgVG87VG98fChUbz17fSk7ZnVuY3Rpb24gTmgoZSl7cmV0dXJuIEZpKHp0LGUpfWZ1bmN0aW9uIFBiKGUpe3JldHVybiBIaShUdCxlKX1mdW5jdGlvbiB4YihlKXtyZXR1cm4gQmkoSXQsZSl9ZnVuY3Rpb24gQ2IoZSl7cmV0dXJuIFZpKFB0LGUpfWNvbnN0IGJjPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RJU09EYXRlOlR0LFpvZElTT0RhdGVUaW1lOnp0LFpvZElTT0R1cmF0aW9uOlB0LFpvZElTT1RpbWU6SXQsZGF0ZTpQYixkYXRldGltZTpOaCxkdXJhdGlvbjpDYix0aW1lOnhifSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFM9ey4uLkliLC4uLnpiLGlzbzpiY30sRWI9bmV3IFNldChbIiRzY2hlbWEiLCIkcmVmIiwiJGRlZnMiLCJkZWZpbml0aW9ucyIsIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIiwidHlwZSIsImVudW0iLCJjb25zdCIsImFueU9mIiwib25lT2YiLCJhbGxPZiIsIm5vdCIsInByb3BlcnRpZXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVzIiwibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiLCJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwibWluSXRlbXMiLCJtYXhJdGVtcyIsInVuaXF1ZUl0ZW1zIiwiY29udGFpbnMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIiwibWluTGVuZ3RoIiwibWF4TGVuZ3RoIiwicGF0dGVybiIsImZvcm1hdCIsIm1pbmltdW0iLCJtYXhpbXVtIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtdWx0aXBsZU9mIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiaWYiLCJ0aGVuIiwiZWxzZSIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbnRSZXF1aXJlZCIsIm51bGxhYmxlIiwicmVhZE9ubHkiXSk7ZnVuY3Rpb24gT2IoZSx0KXtjb25zdCBuPWUuJHNjaGVtYTtyZXR1cm4gbj09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI/ImRyYWZ0LTIwMjAtMTIiOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIj8iZHJhZnQtNyI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiPyJkcmFmdC00Ijp0Pz8iZHJhZnQtMjAyMC0xMiJ9ZnVuY3Rpb24gaHUoZSx0KXtyZXR1cm4gZS5tYXAoKG4sbyk9Pm88dD9uOm4ub3B0aW9uYWwoKSl9ZnVuY3Rpb24gQWIoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBSYihlLHQpe2lmKCFlLnN0YXJ0c1dpdGgoIiMiKSl0aHJvdyBuZXcgRXJyb3IoIkV4dGVybmFsICRyZWYgaXMgbm90IHN1cHBvcnRlZCwgb25seSBsb2NhbCByZWZzICgjLy4uLikgYXJlIGFsbG93ZWQiKTtjb25zdCBuPWUuc2xpY2UoMSkuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0LnJvb3RTY2hlbWE7Y29uc3Qgbz10LnZlcnNpb249PT0iZHJhZnQtMjAyMC0xMiI/IiRkZWZzIjoiZGVmaW5pdGlvbnMiO2lmKG5bMF09PT1vKXtjb25zdCByPW5bMV09PT12b2lkIDA/dm9pZCAwOkFiKG5bMV0pO2lmKCFyfHwhdC5kZWZzW3JdKXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiB0LmRlZnNbcl19dGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCl9ZnVuY3Rpb24gWmIoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZih0eXBlb2YgciE9Im9iamVjdCJ8fHI9PT1udWxsfHxBcnJheS5pc0FycmF5KHIpKXJldHVybjtjb25zdCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpO2lmKHQubWluUHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluUHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIHNtYWxsOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA+PSR7dC5taW5Qcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQubWF4UHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heFByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBiaWc6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlIDw9JHt0Lm1heFByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5rZXlTY2hlbWEpZm9yKGNvbnN0IGkgb2Ygcyl7Y29uc3QgYT10LmtleVNjaGVtYS5zYWZlUGFyc2UoaSk7YS5zdWNjZXNzfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczphLmVycm9yLmlzc3VlcyxpbnB1dDppLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fSkucGlwZShlKX1mdW5jdGlvbiBrcyhlLHQpe2lmKGU9PT1udWxsKXJldHVybiJ6Ijtjb25zdCBuPXR5cGVvZiBlO2lmKG4hPT0ib2JqZWN0Iil7aWYobj09PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1TdHJpbmcoZSk7cmV0dXJuYCR7blswXX0ke28ubGVuZ3RofToke299YH1pZih0LmhhcyhlKSlyZXR1cm4gbnVsbDt0LmFkZChlKTt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcz1bXTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBhPWtzKGksdCk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7cy5wdXNoKGEpfXJldHVybmBhJHtzLmxlbmd0aH06WyR7cy5qb2luKCIsIil9XWB9Y29uc3Qgbz1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1bXTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBpPWtzKGVbc10sdCk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7ci5wdXNoKGAke3MubGVuZ3RofToke3N9PSR7aX1gKX1yZXR1cm5gbyR7ci5sZW5ndGh9Onske3Iuam9pbigiLCIpfX1gfWZpbmFsbHl7dC5kZWxldGUoZSl9fWNvbnN0IE5iPW5ldyBTZXQoWyJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb250YWlucyIsInByb3BlcnR5TmFtZXMiLCJub3QiLCJpZiIsInRoZW4iLCJlbHNlIiwiYWxsT2YiLCJhbnlPZiIsIm9uZU9mIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImNvbnRlbnRTY2hlbWEiXSksamI9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbmNpZXMiLCIkZGVmcyIsImRlZmluaXRpb25zIl0pO2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKEh0KTp0eXBlb2YgZS4kcmVmPT0ic3RyaW5nIj8hMDpPYmplY3QuZW50cmllcyhlKS5zb21lKChbdCxuXSk9Pk5iLmhhcyh0KT9IdChuKTohamIuaGFzKHQpfHx0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsPyExOk9iamVjdC52YWx1ZXMobikuc29tZShIdCkpfWZ1bmN0aW9uIGZ1KGUpe3JldHVybiBlPT09MT8iZWxlbWVudCI6ImVsZW1lbnRzIn1mdW5jdGlvbiBNYihlLHQpe3JldHVybiBTLnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHQudW5pcXVlSXRlbXM9PT0hMCl7Y29uc3Qgcz1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPWtzKHJbaV0sbmV3IFNldCk7aWYoYT09PW51bGwpY29udGludWU7Y29uc3QgYz1zLmdldChhKTtpZihjPT09dm9pZCAwKXtzLnNldChhLGkpO2NvbnRpbnVlfW8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgaXRlbXMgbXVzdCBiZSB1bmlxdWU6IGVsZW1lbnQgYXQgaW5kZXggJHtpfSBkdXBsaWNhdGVzIHRoZSBvbmUgYXQgaW5kZXggJHtjfWAsaW5wdXQ6cixwYXRoOltpXSxjb250aW51ZTohMH0pfX1pZih0LmNvbnRhaW5zU2NoZW1hKXtjb25zdCBzPXQubWluQ29udGFpbnM/PzEsaT10Lm1heENvbnRhaW5zIT09dm9pZCAwP3QubWF4Q29udGFpbnMrMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGE9MDtmb3IoY29uc3QgYyBvZiByKWlmKHQuY29udGFpbnNTY2hlbWEuc2FmZVBhcnNlKGMpLnN1Y2Nlc3MmJisrYT49aSlicmVhazthPHMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7c30gbWF0Y2hpbmcgJHtmdShzKX07IGZvdW5kICR7YX1gLGlucHV0OnIsY29udGludWU6ITB9KSx0Lm1heENvbnRhaW5zIT09dm9pZCAwJiZhPnQubWF4Q29udGFpbnMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IG1vc3QgJHt0Lm1heENvbnRhaW5zfSBtYXRjaGluZyAke2Z1KHQubWF4Q29udGFpbnMpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pfX19KS5waXBlKGUpfWZ1bmN0aW9uIG11KGUsdCl7aWYoZSE9PSExKXJldHVybiBlPT09dm9pZCAwfHxlPT09ITA/Uy5hbnkoKTpsZShlLHQpfWNvbnN0IHFiPS9eKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZDpbMC01XVxkKD86XC5cZCspPyg/Olp8WystXSg/OlswMV1cZHwyWzAtM10pOlswLTVdXGQpJC87ZnVuY3Rpb24gamgoZSx0KXtpZihlLm5vdCE9PXZvaWQgMCl7aWYodHlwZW9mIGUubm90PT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZS5ub3QpLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpcyBub3Qgc3VwcG9ydGVkIGluIFpvZCAoZXhjZXB0IHsgbm90OiB7fSB9IGZvciBuZXZlcikiKX1pZihlLnVuZXZhbHVhdGVkSXRlbXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLnVuZXZhbHVhdGVkUHJvcGVydGllcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkUHJvcGVydGllcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5pZiE9PXZvaWQgMHx8ZS50aGVuIT09dm9pZCAwfHxlLmVsc2UhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb25kaXRpb25hbCBzY2hlbWFzIChpZi90aGVuL2Vsc2UpIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS5kZXBlbmRlbnRTY2hlbWFzIT09dm9pZCAwfHxlLmRlcGVuZGVudFJlcXVpcmVkIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLiRyZWYpe2NvbnN0IHI9ZS4kcmVmO2lmKHQucmVmcy5oYXMocikpcmV0dXJuIHQucmVmcy5nZXQocik7aWYodC5wcm9jZXNzaW5nLmhhcyhyKSlyZXR1cm4gUy5sYXp5KCgpPT57aWYoIXQucmVmcy5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3J9YCk7cmV0dXJuIHQucmVmcy5nZXQocil9KTt0LnByb2Nlc3NpbmcuYWRkKHIpO2NvbnN0IHM9UmIocix0KSxpPWxlKHMsdCk7cmV0dXJuIHQucmVmcy5zZXQocixpKSx0LnByb2Nlc3NpbmcuZGVsZXRlKHIpLGl9aWYoZS5lbnVtIT09dm9pZCAwKXtjb25zdCByPWUuZW51bTtpZih0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiZlLm51bGxhYmxlPT09ITAmJnIubGVuZ3RoPT09MSYmclswXT09PW51bGwpcmV0dXJuIFMubnVsbCgpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gUy5uZXZlcigpO2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gUy5saXRlcmFsKHJbMF0pO2lmKHIuZXZlcnkoaT0+dHlwZW9mIGk9PSJzdHJpbmciKSlyZXR1cm4gUy5lbnVtKHIpO2NvbnN0IHM9ci5tYXAoaT0+Uy5saXRlcmFsKGkpKTtyZXR1cm4gcy5sZW5ndGg8Mj9zWzBdOlMudW5pb24oW3NbMF0sc1sxXSwuLi5zLnNsaWNlKDIpXSl9aWYoZS5jb25zdCE9PXZvaWQgMClyZXR1cm4gUy5saXRlcmFsKGUuY29uc3QpO2NvbnN0IG49ZS50eXBlO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IHI9bi5tYXAocz0+e2NvbnN0IGk9ey4uLmUsdHlwZTpzfTtyZXR1cm4gamgoaSx0KX0pO3JldHVybiByLmxlbmd0aD09PTA/Uy5uZXZlcigpOnIubGVuZ3RoPT09MT9yWzBdOlMudW5pb24ocil9aWYoIW4pcmV0dXJuIFMuYW55KCk7bGV0IG87c3dpdGNoKG4pe2Nhc2Uic3RyaW5nIjp7bGV0IHI9Uy5zdHJpbmcoKTtpZihlLmZvcm1hdCl7Y29uc3Qgcz1lLmZvcm1hdDtzPT09ImVtYWlsIj9yPXIuY2hlY2soUy5lbWFpbCgpKTpzPT09InVyaSJ8fHM9PT0idXJpLXJlZmVyZW5jZSI/cj1yLmNoZWNrKFMudXJsKCkpOnM9PT0idXVpZCJ8fHM9PT0iZ3VpZCI/cj1yLmNoZWNrKFMudXVpZCgpKTpzPT09ImRhdGUtdGltZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGV0aW1lKHtvZmZzZXQ6ITB9KSk6cz09PSJkYXRlIj9yPXIuY2hlY2soUy5pc28uZGF0ZSgpKTpzPT09InRpbWUiP3I9ci5jaGVjayhTLnJlZ2V4KHFiKSk6cz09PSJkdXJhdGlvbiI/cj1yLmNoZWNrKFMuaXNvLmR1cmF0aW9uKCkpOnM9PT0iaG9zdG5hbWUiP3I9ci5jaGVjayhTLmhvc3RuYW1lKCkpOnM9PT0iaXB2NCI/cj1yLmNoZWNrKFMuaXB2NCgpKTpzPT09ImlwdjYiP3I9ci5jaGVjayhTLmlwdjYoKSk6cz09PSJtYWMiP3I9ci5jaGVjayhTLm1hYygpKTpzPT09ImNpZHIiP3I9ci5jaGVjayhTLmNpZHJ2NCgpKTpzPT09ImNpZHItdjYiP3I9ci5jaGVjayhTLmNpZHJ2NigpKTpzPT09ImJhc2U2NCI/cj1yLmNoZWNrKFMuYmFzZTY0KCkpOnM9PT0iYmFzZTY0dXJsIj9yPXIuY2hlY2soUy5iYXNlNjR1cmwoKSk6cz09PSJlMTY0Ij9yPXIuY2hlY2soUy5lMTY0KCkpOnM9PT0iY3JlZGl0X2NhcmQiP3I9ci5jaGVjayhTLmNyZWRpdENhcmQoKSk6cz09PSJpYmFuIj9yPXIuY2hlY2soUy5pYmFuKCkpOnM9PT0iand0Ij9yPXIuY2hlY2soUy5qd3QoKSk6cz09PSJlbW9qaSI/cj1yLmNoZWNrKFMuZW1vamkoKSk6cz09PSJuYW5vaWQiP3I9ci5jaGVjayhTLm5hbm9pZCgpKTpzPT09ImN1aWQiP3I9ci5jaGVjayhTLmN1aWQoKSk6cz09PSJjdWlkMiI/cj1yLmNoZWNrKFMuY3VpZDIoKSk6cz09PSJ1bGlkIj9yPXIuY2hlY2soUy51bGlkKCkpOnM9PT0ieGlkIj9yPXIuY2hlY2soUy54aWQoKSk6cz09PSJrc3VpZCImJihyPXIuY2hlY2soUy5rc3VpZCgpKSl9dHlwZW9mIGUubWluTGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5taW4oZS5taW5MZW5ndGgpKSx0eXBlb2YgZS5tYXhMZW5ndGg9PSJudW1iZXIiJiYocj1yLm1heChlLm1heExlbmd0aCkpLGUucGF0dGVybiYmKHI9ci5yZWdleChuZXcgUmVnRXhwKGUucGF0dGVybikpKSxvPXI7YnJlYWt9Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6e2xldCByPW49PT0iaW50ZWdlciI/Uy5udW1iZXIoKS5pbnQoKTpTLm51bWJlcigpO3R5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1pbmltdW0hPT0hMCYmKHI9ci5taW4oZS5taW5pbXVtKSksdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWF4aW11bSE9PSEwJiYocj1yLm1heChlLm1heGltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNaW5pbXVtPT0ibnVtYmVyIj9yPXIuZ3QoZS5leGNsdXNpdmVNaW5pbXVtKTplLmV4Y2x1c2l2ZU1pbmltdW09PT0hMCYmdHlwZW9mIGUubWluaW11bT09Im51bWJlciImJihyPXIuZ3QoZS5taW5pbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWF4aW11bT09Im51bWJlciI/cj1yLmx0KGUuZXhjbHVzaXZlTWF4aW11bSk6ZS5leGNsdXNpdmVNYXhpbXVtPT09ITAmJnR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiYocj1yLmx0KGUubWF4aW11bSkpLHR5cGVvZiBlLm11bHRpcGxlT2Y9PSJudW1iZXIiJiYocj1yLm11bHRpcGxlT2YoZS5tdWx0aXBsZU9mKSksbz1yO2JyZWFrfWNhc2UiYm9vbGVhbiI6e289Uy5ib29sZWFuKCk7YnJlYWt9Y2FzZSJudWxsIjp7bz1TLm51bGwoKTticmVha31jYXNlIm9iamVjdCI6e2NvbnN0IHI9e30scz1lLnByb3BlcnRpZXN8fHt9LGk9bmV3IFNldChlLnJlcXVpcmVkfHxbXSksYT10eXBlb2YgZS5hZGRpdGlvbmFsUHJvcGVydGllcz09Im9iamVjdCI/bGUoZS5hZGRpdGlvbmFsUHJvcGVydGllcyx0KTp2b2lkIDA7Zm9yKGNvbnN0W20sYl1vZiBPYmplY3QuZW50cmllcyhzKSl7Y29uc3Qgdj1sZShiLHQpO250KHIsbSxpLmhhcyhtKT92OnYub3B0aW9uYWwoKSl9aWYoZS5wYXR0ZXJuUHJvcGVydGllcyl7Y29uc3QgbT1lLnBhdHRlcm5Qcm9wZXJ0aWVzLGI9T2JqZWN0LmtleXMobSksdj1bXTtmb3IoY29uc3QgayBvZiBiKXtjb25zdCAkPWxlKG1ba10sdCksWj1TLnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAoaykpO3YucHVzaChTLmxvb3NlUmVjb3JkKFosJCkpfWNvbnN0IF89W107aWYoT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJl8ucHVzaChTLm9iamVjdChyKS5wYXNzdGhyb3VnaCgpKSxfLnB1c2goLi4udiksXy5sZW5ndGg9PT0wKW89Uy5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCk7ZWxzZSBpZihfLmxlbmd0aD09PTEpbz1fWzBdO2Vsc2V7bGV0IGs9Uy5pbnRlcnNlY3Rpb24oX1swXSxfWzFdKTtmb3IobGV0ICQ9MjskPF8ubGVuZ3RoOyQrKylrPVMuaW50ZXJzZWN0aW9uKGssX1skXSk7bz1rfWlmKGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSl7Y29uc3Qgaz1PYmplY3Qua2V5cyhyKSwkPWIubWFwKFQ9Pm5ldyBSZWdFeHAoVCkpLFo9bztvPW8uY2hlY2soVD0+e2lmKCFMZShULnZhbHVlKSlyZXR1cm47Y29uc3QgSz1bXTtmb3IoY29uc3QgbmUgb2YgT2JqZWN0LmtleXMoVC52YWx1ZSkpay5pbmNsdWRlcyhuZSl8fCQuc29tZShXPT5XLnRlc3QobmUpKXx8Sy5wdXNoKG5lKTtLLmxlbmd0aCYmVC5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6SyxpbnB1dDpULnZhbHVlLGluc3Q6Wn0pfSl9fWVsc2V7Y29uc3QgbT1TLm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1tLnN0cmljdCgpOmE/bz1tLmNhdGNoYWxsKGEpOm89bS5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCxsPXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsZD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fGwhPT12b2lkIDB8fGQhPT12b2lkIDApe2xldCBtO2lmKGMpe2NvbnN0IGI9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO209bGUoYix0KX1vPVpiKG8se2tleVNjaGVtYTptLG1pblByb3BlcnRpZXM6bCxtYXhQcm9wZXJ0aWVzOmR9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChtPT5sZShtLHQpKSxjPWh1KGEsaSksbD1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDptdShzLHQpLGQ9Uy50dXBsZShjKTtvPWw/ZC5yZXN0KGwpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChtPT5sZShtLHQpKSxjPWh1KGEsaSksbD1tdShlLmFkZGl0aW9uYWxJdGVtcyx0KSxkPVMudHVwbGUoYyk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT1sZShzLHQpO2xldCBhPVMuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz1TLmFycmF5KFMuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1NYihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9sZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gbGUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuPWpoKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKGw9PmxlKGwsdCkpLGM9Uy51bmlvbihhKTtuPW8/Uy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAobD0+bGUobCx0KSksYz1TLnhvcihhKTtuPW8/Uy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOlMuYW55KCk7ZWxzZXtsZXQgYT1vP246bGUoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgbD1jO2w8ZS5hbGxPZi5sZW5ndGg7bCsrKWE9Uy5pbnRlcnNlY3Rpb24oYSxsZShlLmFsbE9mW2xdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj1TLm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPVMucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFIdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhSHQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSlFYi5oYXMoYSl8fG50KHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBNaChlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/Uy5hbnkoKTpTLm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1PYihuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/a2V9O3JldHVybiBsZShuLHMpfWZ1bmN0aW9uIHFoKGUpe3JldHVybiBLaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6TyhuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIERiKGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEcoZSx1ZShuLHtjaGVja3M6Wy4uLm4uY2hlY2tzPz9bXSwuLi50XX0pLHtwYXJlbnQ6ITB9KX1mdW5jdGlvbiBEaChlKXtyZXR1cm4gRGIoZS5vdXQsZS5jaGVja3MpfWZ1bmN0aW9uIExiKGUpe3JldHVybiBlLmluLl96b2QudHJhaXRzLmhhcygiJFpvZFRyYW5zZm9ybSIpP0RoKGUpOmUuaW59ZnVuY3Rpb24gTGgoZSl7cmV0dXJuIEtpKGUse3BpcGU6dD0+TGIodC5fem9kLmRlZiksZGVmYXVsdDoodCxuKT0+bj9CKHQuX3pvZC5kZWYuaW5uZXJUeXBlKTp0LGNhdGNoOih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBVaChlKXtyZXR1cm4gS2koZSx7cGlwZTp0PT5EaCh0Ll96b2QuZGVmKSxwcmVmYXVsdDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gVWIoZSl7cmV0dXJuIEhwKFN0LGUpfWZ1bmN0aW9uIEZiKGUpe3JldHVybiBXcChDdCxlKX1mdW5jdGlvbiBIYihlKXtyZXR1cm4gbmgoRXQsZSl9ZnVuY3Rpb24gQmIoZSl7cmV0dXJuIHJoKE90LGUpfWZ1bmN0aW9uIFZiKGUpe3JldHVybiBtaChWbixlKX1jb25zdCBGaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmlnaW50OkJiLGJvb2xlYW46SGIsZGF0ZTpWYixudW1iZXI6RmIsc3RyaW5nOlVifSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGd1PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6QXMsJGlucHV0OmZpLCRvdXRwdXQ6aGksSU5WQUxJRDpnaSxORVZFUjpPcyxUaW1lUHJlY2lzaW9uOlVpLFpvZEFueTpwcixab2RBcnJheTpncixab2RCYXNlNjQ6cW4sWm9kQmFzZTY0VVJMOkRuLFpvZEJpZ0ludDpPdCxab2RCaWdJbnRGb3JtYXQ6Rm4sWm9kQm9vbGVhbjpFdCxab2RDSURSdjQ6am4sWm9kQ0lEUnY2Ok1uLFpvZENVSUQ6Q24sWm9kQ1VJRDI6RW4sWm9kQ2F0Y2g6WnIsWm9kQ29kZWM6TXQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6YmksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6dmksWm9kQ3JlZGl0Q2FyZDphcixab2RDdXN0b206cXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkhlLFpvZERhdGU6Vm4sWm9kRGVmYXVsdDp4cixab2REaXNjcmltaW5hdGVkVW5pb246dnIsWm9kRTE2NDpMbixab2RFbWFpbDpUbixab2RFbW9qaTpQbixab2RFbnVtOnR0LFpvZEVycm9yOk9oLFpvZEV4YWN0T3B0aW9uYWw6V24sWm9kRmlsZTp6cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIFRvfSxab2RGdW5jdGlvbjpCcixab2RHVUlEOkluLFpvZElCQU46Y3IsWm9kSVB2NDpabixab2RJUHY2Ok5uLFpvZElTT0RhdGU6VHQsWm9kSVNPRGF0ZVRpbWU6enQsWm9kSVNPRHVyYXRpb246UHQsWm9kSVNPVGltZTpJdCxab2RJbnN0YW5jZU9mOldyLFpvZEludGVyc2VjdGlvbjp5cixab2RJc3N1ZUNvZGU6QWgsWm9kSldUOlVuLFpvZEtTVUlEOlJuLFpvZExhenk6VXIsWm9kTGl0ZXJhbDpTcixab2RNQUM6aXIsWm9kTWFwOndyLFpvZE5hTjpqcixab2ROYW5vSUQ6eG4sWm9kTmV2ZXI6ZnIsWm9kTm9uT3B0aW9uYWw6R24sWm9kTnVsbDpkcixab2ROdWxsYWJsZTpQcixab2ROdW1iZXI6Q3QsWm9kTnVtYmVyRm9ybWF0OkJlLFpvZE9iamVjdDpBdCxab2RPcHRpb25hbDpOdCxab2RQaXBlOmp0LFpvZFByZWZhdWx0OkVyLFpvZFByZXByb2Nlc3M6TXIsWm9kUHJvbWlzZTpIcixab2RSZWFkb25seTpxcixab2RSZWFsRXJyb3I6ZmUsWm9kUmVjb3JkOmV0LFpvZFNldDokcixab2RTdHJpbmc6U3QsWm9kU3RyaW5nRm9ybWF0OkwsWm9kU3VjY2VzczpScixab2RTeW1ib2w6dXIsWm9kVGVtcGxhdGVMaXRlcmFsOkxyLFpvZFRyYW5zZm9ybTpUcixab2RUdXBsZTpfcixab2RUeXBlOkUsWm9kVUxJRDpPbixab2RVUkw6eHQsWm9kVVVJRDpJZSxab2RVbmRlZmluZWQ6bHIsWm9kVW5pb246UnQsWm9kVW5rbm93bjpocixab2RWb2lkOm1yLFpvZFhJRDpBbixab2RYb3I6YnIsX1pvZFN0cmluZzp6bixfZGVmYXVsdDpDcixfZnVuY3Rpb246YnQsYW55OkJuLGFycmF5OlAsYmFzZTY0OlBhLGJhc2U2NHVybDp4YSxiaWdpbnQ6RmEsYm9vbGVhbjpELGNhdGNoOk5yLGNoZWNrOmRjLGNpZHJ2NDpUYSxjaWRydjY6SWEsY2xvbmU6Ryxjb2RlYzphYyxjb2VyY2U6RmgsY29tcGlsZTp5aSxjb25maWc6ZWUsY29yZTp4aCxjcmVkaXRDYXJkOkVhLGN1aWQ6dmEsY3VpZDI6eWEsY3VycmVuY3lDb2RlOmphLGN1c3RvbTpWcixkYXRlOkthLGRlY29kZTp0YSxkZWNvZGVBc3luYzpvYSxkZWVwUGFydGlhbDpxaCxkZXNjcmliZTpwYyxkaXNjcmltaW5hdGVkVW5pb246Sm4sZTE2NDpDYSxlbWFpbDpjYSxlbW9qaTpnYSxlbmNvZGU6ZWEsZW5jb2RlQXN5bmM6bmEsZW5kc1dpdGg6Ym4sZW51bTpyZSxleGFjdE9wdGlvbmFsOklyLGZpbGU6b2MsZmxhdHRlbkVycm9yOkZvLGZsb2F0MzI6cWEsZmxvYXQ2NDpEYSxmb3JtYXRFcnJvcjpIbyxmcm9tSlNPTlNjaGVtYTpNaCxmdW5jdGlvbjpidCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmlpLGdldEVycm9yTWFwOlpoLGdsb2JhbFJlZ2lzdHJ5OmtlLGd0OlplLGd0ZTpiZSxndWlkOnVhLGhhc2g6TWEsaGV4Ok5hLGhvc3RuYW1lOlphLGh0dHBVcmw6bWEsaWJhbjpPYSxpbmNsdWRlczptbixpbnB1dDpMaCxpbnN0YW5jZW9mOmZjLGludDpXdCxpbnQzMjpMYSxpbnQ2NDpIYSxpbnRlcnNlY3Rpb246WnQsaW52ZXJ0Q29kZWM6Y2MsaXB2NDokYSxpcHY2OnphLGlzbzpiYyxqc29uOmdjLGp3dDpBYSxrZXlvZjpXYSxrc3VpZDp3YSxsYXp5OkZyLGxlbmd0aDp3dCxsaXRlcmFsOmYsbG9jYWxlczpwaSxsb29zZU9iamVjdDpvZSxsb29zZVJlY29yZDpYYSxsb3dlcmNhc2U6aG4sbHQ6UmUsbHRlOmdlLG1hYzpTYSxtYXA6ZWMsbWF4TGVuZ3RoOmt0LG1heFNpemU6b3QsbWVtb2l6ZXI6UW8sbWV0YTpoYyxtaW1lOnluLG1pbkxlbmd0aDpVZSxtaW5TaXplOk5lLG11bHRpcGxlT2Y6WWUsbmFuOmljLG5hbm9pZDpiYSxuYXRpdmVFbnVtOm5jLG5lZ2F0aXZlOm5yLG5ldmVyOlhlLG5vbm5lZ2F0aXZlOnJyLG5vbm9wdGlvbmFsOkFyLG5vbnBvc2l0aXZlOm9yLG5vcm1hbGl6ZTpfbixudWxsOkhuLG51bGxhYmxlOmd0LG51bGxpc2g6cmMsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6QixvdXRwdXQ6VWgsb3ZlcndyaXRlOkNlLHBhcnNlOkdpLHBhcnNlQXN5bmM6UWkscGFydGlhbFJlY29yZDpZYSxwaXBlOkd0LHBvc2l0aXZlOnRyLHByZWZhdWx0Ok9yLHByZXByb2Nlc3M6UW4scHJldHRpZnlFcnJvcjpacyxwcm9taXNlOmxjLHByb3BlcnRpZXM6dm4scHJvcGVydHk6c3IscmVhZG9ubHk6RHIscmVjb3JkOlIscmVmaW5lOkpyLHJlZ2V4OnBuLHJlZ2V4ZXM6V28scmVnaXN0cnk6WW8sc2FmZURlY29kZTpzYSxzYWZlRGVjb2RlQXN5bmM6YWEsc2FmZUVuY29kZTpyYSxzYWZlRW5jb2RlQXN5bmM6aWEsc2FmZVBhcnNlOllpLHNhZmVQYXJzZUFzeW5jOlhpLHNldDp0YyxzZXRFcnJvck1hcDpSaCxzaXplOl90LHNsdWdpZnk6U24sc3RhcnRzV2l0aDpnbixzdHJpY3RPYmplY3Q6R2Esc3RyaW5nOmgsc3RyaW5nRm9ybWF0OlJhLHN0cmluZ2Jvb2w6bWMsc3VjY2VzczpzYyxzdXBlclJlZmluZTpLcixzeW1ib2w6VmEsdGVtcGxhdGVMaXRlcmFsOnVjLHRvSlNPTlNjaGVtYTpKaSx0b0xvd2VyQ2FzZTp3bix0b1VwcGVyQ2FzZTokbix0b1pvZDpSbyx0cmFuc2Zvcm06S24sdHJlZWlmeUVycm9yOlJzLHRyaW06a24sdHVwbGU6a3IsdWludDMyOlVhLHVpbnQ2NDpCYSx1bGlkOl9hLHVuZGVmaW5lZDptdCx1bmlvbjpPLHVua25vd246TSx1cHBlcmNhc2U6Zm4sdXJsOmZhLHV0aWw6RXMsdXVpZDpsYSx1dWlkdjQ6ZGEsdXVpZHY2OnBhLHV1aWR2NzpoYSx2YWxpZGF0ZTpWbyx2YWxpZGF0ZUFzeW5jOkpvLHZvaWQ6SmEsd2l0aFBhcnNlcjpfaSx4aWQ6a2EseG9yOlFhfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEpiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6QXMsJGlucHV0OmZpLCRvdXRwdXQ6aGksSU5WQUxJRDpnaSxORVZFUjpPcyxUaW1lUHJlY2lzaW9uOlVpLFpvZEFueTpwcixab2RBcnJheTpncixab2RCYXNlNjQ6cW4sWm9kQmFzZTY0VVJMOkRuLFpvZEJpZ0ludDpPdCxab2RCaWdJbnRGb3JtYXQ6Rm4sWm9kQm9vbGVhbjpFdCxab2RDSURSdjQ6am4sWm9kQ0lEUnY2Ok1uLFpvZENVSUQ6Q24sWm9kQ1VJRDI6RW4sWm9kQ2F0Y2g6WnIsWm9kQ29kZWM6TXQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6YmksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6dmksWm9kQ3JlZGl0Q2FyZDphcixab2RDdXN0b206cXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkhlLFpvZERhdGU6Vm4sWm9kRGVmYXVsdDp4cixab2REaXNjcmltaW5hdGVkVW5pb246dnIsWm9kRTE2NDpMbixab2RFbWFpbDpUbixab2RFbW9qaTpQbixab2RFbnVtOnR0LFpvZEVycm9yOk9oLFpvZEV4YWN0T3B0aW9uYWw6V24sWm9kRmlsZTp6cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIFRvfSxab2RGdW5jdGlvbjpCcixab2RHVUlEOkluLFpvZElCQU46Y3IsWm9kSVB2NDpabixab2RJUHY2Ok5uLFpvZElTT0RhdGU6VHQsWm9kSVNPRGF0ZVRpbWU6enQsWm9kSVNPRHVyYXRpb246UHQsWm9kSVNPVGltZTpJdCxab2RJbnN0YW5jZU9mOldyLFpvZEludGVyc2VjdGlvbjp5cixab2RJc3N1ZUNvZGU6QWgsWm9kSldUOlVuLFpvZEtTVUlEOlJuLFpvZExhenk6VXIsWm9kTGl0ZXJhbDpTcixab2RNQUM6aXIsWm9kTWFwOndyLFpvZE5hTjpqcixab2ROYW5vSUQ6eG4sWm9kTmV2ZXI6ZnIsWm9kTm9uT3B0aW9uYWw6R24sWm9kTnVsbDpkcixab2ROdWxsYWJsZTpQcixab2ROdW1iZXI6Q3QsWm9kTnVtYmVyRm9ybWF0OkJlLFpvZE9iamVjdDpBdCxab2RPcHRpb25hbDpOdCxab2RQaXBlOmp0LFpvZFByZWZhdWx0OkVyLFpvZFByZXByb2Nlc3M6TXIsWm9kUHJvbWlzZTpIcixab2RSZWFkb25seTpxcixab2RSZWFsRXJyb3I6ZmUsWm9kUmVjb3JkOmV0LFpvZFNldDokcixab2RTdHJpbmc6U3QsWm9kU3RyaW5nRm9ybWF0OkwsWm9kU3VjY2VzczpScixab2RTeW1ib2w6dXIsWm9kVGVtcGxhdGVMaXRlcmFsOkxyLFpvZFRyYW5zZm9ybTpUcixab2RUdXBsZTpfcixab2RUeXBlOkUsWm9kVUxJRDpPbixab2RVUkw6eHQsWm9kVVVJRDpJZSxab2RVbmRlZmluZWQ6bHIsWm9kVW5pb246UnQsWm9kVW5rbm93bjpocixab2RWb2lkOm1yLFpvZFhJRDpBbixab2RYb3I6YnIsX1pvZFN0cmluZzp6bixfZGVmYXVsdDpDcixfZnVuY3Rpb246YnQsYW55OkJuLGFycmF5OlAsYmFzZTY0OlBhLGJhc2U2NHVybDp4YSxiaWdpbnQ6RmEsYm9vbGVhbjpELGNhdGNoOk5yLGNoZWNrOmRjLGNpZHJ2NDpUYSxjaWRydjY6SWEsY2xvbmU6Ryxjb2RlYzphYyxjb2VyY2U6RmgsY29tcGlsZTp5aSxjb25maWc6ZWUsY29yZTp4aCxjcmVkaXRDYXJkOkVhLGN1aWQ6dmEsY3VpZDI6eWEsY3VycmVuY3lDb2RlOmphLGN1c3RvbTpWcixkYXRlOkthLGRlY29kZTp0YSxkZWNvZGVBc3luYzpvYSxkZWVwUGFydGlhbDpxaCxkZWZhdWx0Omd1LGRlc2NyaWJlOnBjLGRpc2NyaW1pbmF0ZWRVbmlvbjpKbixlMTY0OkNhLGVtYWlsOmNhLGVtb2ppOmdhLGVuY29kZTplYSxlbmNvZGVBc3luYzpuYSxlbmRzV2l0aDpibixlbnVtOnJlLGV4YWN0T3B0aW9uYWw6SXIsZmlsZTpvYyxmbGF0dGVuRXJyb3I6Rm8sZmxvYXQzMjpxYSxmbG9hdDY0OkRhLGZvcm1hdEVycm9yOkhvLGZyb21KU09OU2NoZW1hOk1oLGZ1bmN0aW9uOmJ0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246aWksZ2V0RXJyb3JNYXA6WmgsZ2xvYmFsUmVnaXN0cnk6a2UsZ3Q6WmUsZ3RlOmJlLGd1aWQ6dWEsaGFzaDpNYSxoZXg6TmEsaG9zdG5hbWU6WmEsaHR0cFVybDptYSxpYmFuOk9hLGluY2x1ZGVzOm1uLGlucHV0OkxoLGluc3RhbmNlb2Y6ZmMsaW50Old0LGludDMyOkxhLGludDY0OkhhLGludGVyc2VjdGlvbjpadCxpbnZlcnRDb2RlYzpjYyxpcHY0OiRhLGlwdjY6emEsaXNvOmJjLGpzb246Z2Msand0OkFhLGtleW9mOldhLGtzdWlkOndhLGxhenk6RnIsbGVuZ3RoOnd0LGxpdGVyYWw6Zixsb2NhbGVzOnBpLGxvb3NlT2JqZWN0Om9lLGxvb3NlUmVjb3JkOlhhLGxvd2VyY2FzZTpobixsdDpSZSxsdGU6Z2UsbWFjOlNhLG1hcDplYyxtYXhMZW5ndGg6a3QsbWF4U2l6ZTpvdCxtZW1vaXplcjpRbyxtZXRhOmhjLG1pbWU6eW4sbWluTGVuZ3RoOlVlLG1pblNpemU6TmUsbXVsdGlwbGVPZjpZZSxuYW46aWMsbmFub2lkOmJhLG5hdGl2ZUVudW06bmMsbmVnYXRpdmU6bnIsbmV2ZXI6WGUsbm9ubmVnYXRpdmU6cnIsbm9ub3B0aW9uYWw6QXIsbm9ucG9zaXRpdmU6b3Isbm9ybWFsaXplOl9uLG51bGw6SG4sbnVsbGFibGU6Z3QsbnVsbGlzaDpyYyxudW1iZXI6QyxvYmplY3Q6ZyxvcHRpb25hbDpCLG91dHB1dDpVaCxvdmVyd3JpdGU6Q2UscGFyc2U6R2kscGFyc2VBc3luYzpRaSxwYXJ0aWFsUmVjb3JkOllhLHBpcGU6R3QscG9zaXRpdmU6dHIscHJlZmF1bHQ6T3IscHJlcHJvY2VzczpRbixwcmV0dGlmeUVycm9yOlpzLHByb21pc2U6bGMscHJvcGVydGllczp2bixwcm9wZXJ0eTpzcixyZWFkb25seTpEcixyZWNvcmQ6UixyZWZpbmU6SnIscmVnZXg6cG4scmVnZXhlczpXbyxyZWdpc3RyeTpZbyxzYWZlRGVjb2RlOnNhLHNhZmVEZWNvZGVBc3luYzphYSxzYWZlRW5jb2RlOnJhLHNhZmVFbmNvZGVBc3luYzppYSxzYWZlUGFyc2U6WWksc2FmZVBhcnNlQXN5bmM6WGksc2V0OnRjLHNldEVycm9yTWFwOlJoLHNpemU6X3Qsc2x1Z2lmeTpTbixzdGFydHNXaXRoOmduLHN0cmljdE9iamVjdDpHYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6UmEsc3RyaW5nYm9vbDptYyxzdWNjZXNzOnNjLHN1cGVyUmVmaW5lOktyLHN5bWJvbDpWYSx0ZW1wbGF0ZUxpdGVyYWw6dWMsdG9KU09OU2NoZW1hOkppLHRvTG93ZXJDYXNlOnduLHRvVXBwZXJDYXNlOiRuLHRvWm9kOlJvLHRyYW5zZm9ybTpLbix0cmVlaWZ5RXJyb3I6UnMsdHJpbTprbix0dXBsZTprcix1aW50MzI6VWEsdWludDY0OkJhLHVsaWQ6X2EsdW5kZWZpbmVkOm10LHVuaW9uOk8sdW5rbm93bjpNLHVwcGVyY2FzZTpmbix1cmw6ZmEsdXRpbDpFcyx1dWlkOmxhLHV1aWR2NDpkYSx1dWlkdjY6cGEsdXVpZHY3OmhhLHZhbGlkYXRlOlZvLHZhbGlkYXRlQXN5bmM6Sm8sdm9pZDpKYSx3aXRoUGFyc2VyOl9pLHhpZDprYSx4b3I6UWEsejpndX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxLZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixHcj0iMi4wIixYPVZyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLEhoPU8oW2goKSxDKCkuaW50KCldKSxCaD1oKCk7b2Uoe3R0bDpDKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6QygpLm9wdGlvbmFsKCl9KTtjb25zdCBLYj1nKHt0dGw6QygpLm9wdGlvbmFsKCl9KSxXYj1nKHt0YXNrSWQ6aCgpfSksdmM9b2Uoe3Byb2dyZXNzVG9rZW46SGgub3B0aW9uYWwoKSxbS2VdOldiLm9wdGlvbmFsKCl9KSx5ZT1nKHtfbWV0YTp2Yy5vcHRpb25hbCgpfSksWW49eWUuZXh0ZW5kKHt0YXNrOktiLm9wdGlvbmFsKCl9KSxHYj1lPT5Zbi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxzZT1nKHttZXRob2Q6aCgpLHBhcmFtczp5ZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxTZT1nKHtfbWV0YTp2Yy5vcHRpb25hbCgpfSksemU9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6U2UubG9vc2UoKS5vcHRpb25hbCgpfSksaWU9b2Uoe19tZXRhOnZjLm9wdGlvbmFsKCl9KSxYbj1PKFtoKCksQygpLmludCgpXSksVmg9Zyh7anNvbnJwYzpmKEdyKSxpZDpYbiwuLi5zZS5zaGFwZX0pLnN0cmljdCgpLGJ1PWU9PlZoLnNhZmVQYXJzZShlKS5zdWNjZXNzLEpoPWcoe2pzb25ycGM6ZihHciksLi4uemUuc2hhcGV9KS5zdHJpY3QoKSxRYj1lPT5KaC5zYWZlUGFyc2UoZSkuc3VjY2Vzcyx5Yz1nKHtqc29ucnBjOmYoR3IpLGlkOlhuLHJlc3VsdDppZX0pLnN0cmljdCgpLG1vPWU9PnljLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBVOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoVXx8KFU9e30pKTtjb25zdCBfYz1nKHtqc29ucnBjOmYoR3IpLGlkOlhuLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpDKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpNKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksWWI9ZT0+X2Muc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsWGI9TyhbVmgsSmgseWMsX2NdKTtPKFt5YyxfY10pO2NvbnN0IGtjPWllLnN0cmljdCgpLGV2PVNlLmV4dGVuZCh7cmVxdWVzdElkOlhuLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSksd2M9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6ZXZ9KSx0dj1nKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOlAoaCgpKS5vcHRpb25hbCgpLHRoZW1lOnJlKFsibGlnaHQiLCJkYXJrIl0pLm9wdGlvbmFsKCl9KSxlbz1nKHtpY29uczpQKHR2KS5vcHRpb25hbCgpfSksdnQ9Zyh7bmFtZTpoKCksdGl0bGU6aCgpLm9wdGlvbmFsKCl9KSxRcj12dC5leHRlbmQoey4uLnZ0LnNoYXBlLC4uLmVvLnNoYXBlLHZlcnNpb246aCgpLHdlYnNpdGVVcmw6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCl9KSxudj1adChnKHthcHBseURlZmF1bHRzOkQoKS5vcHRpb25hbCgpfSksUihoKCksTSgpKSksb3Y9UW4oZT0+ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MD97Zm9ybTp7fX06ZSxadChnKHtmb3JtOm52Lm9wdGlvbmFsKCksdXJsOlgub3B0aW9uYWwoKX0pLFIoaCgpLE0oKSkub3B0aW9uYWwoKSkpLHJ2PW9lKHtsaXN0Olgub3B0aW9uYWwoKSxjYW5jZWw6WC5vcHRpb25hbCgpLHJlcXVlc3RzOm9lKHtzYW1wbGluZzpvZSh7Y3JlYXRlTWVzc2FnZTpYLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOm9lKHtjcmVhdGU6WC5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxzdj1vZSh7bGlzdDpYLm9wdGlvbmFsKCksY2FuY2VsOlgub3B0aW9uYWwoKSxyZXF1ZXN0czpvZSh7dG9vbHM6b2Uoe2NhbGw6WC5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxpdj1nKHtleHBlcmltZW50YWw6UihoKCksWCkub3B0aW9uYWwoKSxzYW1wbGluZzpnKHtjb250ZXh0Olgub3B0aW9uYWwoKSx0b29sczpYLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOm92Lm9wdGlvbmFsKCkscm9vdHM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOnJ2Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpSKGgoKSxYKS5vcHRpb25hbCgpfSksYXY9eWUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczppdixjbGllbnRJbmZvOlFyfSksY3Y9c2UuZXh0ZW5kKHttZXRob2Q6ZigiaW5pdGlhbGl6ZSIpLHBhcmFtczphdn0pLHV2PWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxYKS5vcHRpb25hbCgpLGxvZ2dpbmc6WC5vcHRpb25hbCgpLGNvbXBsZXRpb25zOlgub3B0aW9uYWwoKSxwcm9tcHRzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6Zyh7c3Vic2NyaWJlOkQoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6c3Yub3B0aW9uYWwoKSxleHRlbnNpb25zOlIoaCgpLFgpLm9wdGlvbmFsKCl9KSxsdj1pZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOnV2LHNlcnZlckluZm86UXIsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksZHY9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczpTZS5vcHRpb25hbCgpfSksWXI9c2UuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczp5ZS5vcHRpb25hbCgpfSkscHY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOkIoQygpKSxtZXNzYWdlOkIoaCgpKX0pLGh2PWcoey4uLlNlLnNoYXBlLC4uLnB2LnNoYXBlLHByb2dyZXNzVG9rZW46SGh9KSwkYz16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOmh2fSksZnY9eWUuZXh0ZW5kKHtjdXJzb3I6Qmgub3B0aW9uYWwoKX0pLHRvPXNlLmV4dGVuZCh7cGFyYW1zOmZ2Lm9wdGlvbmFsKCl9KSxubz1pZS5leHRlbmQoe25leHRDdXJzb3I6Qmgub3B0aW9uYWwoKX0pLG12PXJlKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLG9vPWcoe3Rhc2tJZDpoKCksc3RhdHVzOm12LHR0bDpPKFtDKCksSG4oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOkIoQygpKSxzdGF0dXNNZXNzYWdlOkIoaCgpKX0pLFNjPWllLmV4dGVuZCh7dGFzazpvb30pLGd2PVNlLm1lcmdlKG9vKSxJbz16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpndn0pLHpjPXNlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczp5ZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLFRjPWllLm1lcmdlKG9vKSxJYz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6eWUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtpZS5sb29zZSgpO2NvbnN0IFBjPXRvLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLHhjPW5vLmV4dGVuZCh7dGFza3M6UChvbyl9KSxDYz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6eWUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxidj1pZS5tZXJnZShvbyksS2g9Zyh7dXJpOmgoKSxtaW1lVHlwZTpCKGgoKSksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksV2g9S2guZXh0ZW5kKHt0ZXh0OmgoKX0pLEVjPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksR2g9S2guZXh0ZW5kKHtibG9iOkVjfSkscm89cmUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLER0PWcoe2F1ZGllbmNlOlAocm8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6Tmgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxRaD1nKHsuLi52dC5zaGFwZSwuLi5lby5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxtaW1lVHlwZTpCKGgoKSksc2l6ZTpCKEMoKSksYW5ub3RhdGlvbnM6RHQub3B0aW9uYWwoKSxfbWV0YTpCKG9lKHt9KSl9KSx2dj1nKHsuLi52dC5zaGFwZSwuLi5lby5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246QihoKCkpLG1pbWVUeXBlOkIoaCgpKSxhbm5vdGF0aW9uczpEdC5vcHRpb25hbCgpLF9tZXRhOkIob2Uoe30pKX0pLHl2PXRvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxZaD1uby5leHRlbmQoe3Jlc291cmNlczpQKFFoKX0pLF92PXRvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksa3Y9bm8uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKHZ2KX0pLE9jPXllLmV4dGVuZCh7dXJpOmgoKX0pLHd2PU9jLCR2PXNlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOnd2fSksWGg9aWUuZXh0ZW5kKHtjb250ZW50czpQKE8oW1doLEdoXSkpfSksU3Y9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlNlLm9wdGlvbmFsKCl9KSx6dj1PYyxUdj1zZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOnp2fSksSXY9T2MsUHY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOkl2fSkseHY9U2UuZXh0ZW5kKHt1cmk6aCgpfSksQ3Y9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczp4dn0pLEV2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxyZXF1aXJlZDpCKEQoKSl9KSxPdj1nKHsuLi52dC5zaGFwZSwuLi5lby5zaGFwZSxkZXNjcmlwdGlvbjpCKGgoKSksYXJndW1lbnRzOkIoUChFdikpLF9tZXRhOkIob2Uoe30pKX0pLEF2PXRvLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksUnY9bm8uZXh0ZW5kKHtwcm9tcHRzOlAoT3YpfSksWnY9eWUuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6UihoKCksaCgpKS5vcHRpb25hbCgpfSksTnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6WnZ9KSxBYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpEdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLFJjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOkVjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpEdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLFpjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOkVjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpEdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLGp2PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6UihoKCksTSgpKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxlZj1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6TyhbV2gsR2hdKSxhbm5vdGF0aW9uczpEdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLHRmPVFoLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxzbz1PKFtBYyxSYyxaYyx0ZixlZl0pLE12PWcoe3JvbGU6cm8sY29udGVudDpzb30pLHF2PWllLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChNdil9KSxEdj16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlNlLm9wdGlvbmFsKCl9KSxMdj1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6RCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkQoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkQoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6RCgpLm9wdGlvbmFsKCl9KSxVdj1nKHt0YXNrU3VwcG9ydDpyZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLE5jPWcoey4uLnZ0LnNoYXBlLC4uLmVvLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpSKGgoKSxYKS5vcHRpb25hbCgpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoTSgpKSxvdXRwdXRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLFgpLm9wdGlvbmFsKCkscmVxdWlyZWQ6UChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChNKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6THYub3B0aW9uYWwoKSxleGVjdXRpb246VXYub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxuZj10by5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9saXN0Iil9KSxGdj1uby5leHRlbmQoe3Rvb2xzOlAoTmMpfSksWHI9aWUuZXh0ZW5kKHtjb250ZW50OlAoc28pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OlIoaCgpLE0oKSkub3B0aW9uYWwoKSxpc0Vycm9yOkQoKS5vcHRpb25hbCgpfSk7WHIub3IoaWUuZXh0ZW5kKHt0b29sUmVzdWx0Ok0oKX0pKTtjb25zdCBIdj1Zbi5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxvZj1zZS5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9jYWxsIikscGFyYW1zOkh2fSksQnY9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6U2Uub3B0aW9uYWwoKX0pO2coe2F1dG9SZWZyZXNoOkQoKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOkMoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IHJmPXJlKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxWdj15ZS5leHRlbmQoe2xldmVsOnJmfSksSnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczpWdn0pLEt2PVNlLmV4dGVuZCh7bGV2ZWw6cmYsbG9nZ2VyOmgoKS5vcHRpb25hbCgpLGRhdGE6TSgpfSksV3Y9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOkt2fSksR3Y9Zyh7bmFtZTpoKCkub3B0aW9uYWwoKX0pLFF2PWcoe2hpbnRzOlAoR3YpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSxZdj1nKHttb2RlOnJlKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksWHY9Zyh7dHlwZTpmKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpoKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6UChzbykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6RCgpLm9wdGlvbmFsKCksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksZXk9Sm4oInR5cGUiLFtBYyxSYyxaY10pLFBvPUpuKCJ0eXBlIixbQWMsUmMsWmMsanYsWHZdKSx0eT1nKHtyb2xlOnJvLGNvbnRlbnQ6TyhbUG8sUChQbyldKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxueT1Zbi5leHRlbmQoe21lc3NhZ2VzOlAodHkpLG1vZGVsUHJlZmVyZW5jZXM6UXYub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6aCgpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6cmUoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpDKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6QygpLmludCgpLHN0b3BTZXF1ZW5jZXM6UChoKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6WC5vcHRpb25hbCgpLHRvb2xzOlAoTmMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpZdi5vcHRpb25hbCgpfSksb3k9c2UuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpueX0pLHNmPWllLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246QihyZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTpybyxjb250ZW50OmV5fSksYWY9aWUuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpCKHJlKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTpybyxjb250ZW50Ok8oW1BvLFAoUG8pXSl9KSxyeT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkQoKS5vcHRpb25hbCgpfSksc3k9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDpyZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxpeT1nKHt0eXBlOnJlKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLGF5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLGN5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSx1eT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksbHk9TyhbYXksY3ldKSxkeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSxweT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLGh5PU8oW2R5LHB5XSksZnk9TyhbdXksbHksaHldKSxteT1PKFtmeSxyeSxzeSxpeV0pLGd5PVluLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLG15KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksYnk9WW4uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSx2eT1PKFtneSxieV0pLHl5PXNlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczp2eX0pLF95PVNlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxreT16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOl95fSksd3k9aWUuZXh0ZW5kKHthY3Rpb246cmUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6UW4oZT0+ZT09PW51bGw/dm9pZCAwOmUsUihoKCksTyhbaCgpLEMoKSxEKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSksJHk9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksU3k9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSx6eT15ZS5leHRlbmQoe3JlZjpPKFtTeSwkeV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlIoaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxUeT1zZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOnp5fSksSXk9aWUuZXh0ZW5kKHtjb21wbGV0aW9uOm9lKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOkIoQygpLmludCgpKSxoYXNNb3JlOkIoRCgpKX0pfSksUHk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSx4eT1zZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOnllLm9wdGlvbmFsKCl9KSxDeT1pZS5leHRlbmQoe3Jvb3RzOlAoUHkpfSksRXk9emUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6U2Uub3B0aW9uYWwoKX0pO08oW1lyLGN2LFR5LEp2LE52LEF2LHl2LF92LCR2LFR2LFB2LG9mLG5mLHpjLEljLFBjLENjXSk7Tyhbd2MsJGMsZHYsRXksSW9dKTtPKFtrYyxzZixhZix3eSxDeSxUYyx4YyxTY10pO08oW1lyLG95LHl5LHh5LHpjLEljLFBjLENjXSk7Tyhbd2MsJGMsV3YsQ3YsU3YsQnYsRHYsSW8sa3ldKTtPKFtrYyxsdixJeSxxdixSdixZaCxrdixYaCxYcixGdixUYyx4YyxTY10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PVUuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgT3koci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgT3kgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihVLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gSmUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gdnUoZSl7Y29uc3Qgbj0kYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89U2Iobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiB5dShlLHQpe2NvbnN0IG49Q2goZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBBeT02ZTQ7Y2xhc3MgUnl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIod2Msbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKCRjLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihZcixuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHpjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEljLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgYTtmb3IoO2E9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoYS50eXBlPT09InJlc3BvbnNlInx8YS50eXBlPT09ImVycm9yIil7Y29uc3QgYz1hLm1lc3NhZ2UsbD1jLmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxhLnR5cGU9PT0icmVzcG9uc2UiKWQoYyk7ZWxzZXtjb25zdCBtPWMsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09YS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGEubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFpKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighSmUoaS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoSmUoaS5zdGF0dXMpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uYSxfbWV0YTp7Li4uYS5fbWV0YSxbS2VdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihQYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKENjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKEplKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihVLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKFUuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGkpPT57cj8uKHMsaSksbW8ocyl8fFliKHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6YnUocyk/dGhpcy5fb25yZXF1ZXN0KHMsaSk6UWIocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoVS5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bS2VdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOlUuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGkpO2NvbnN0IGE9R2IodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLGM9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDppLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooVS5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IF89di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBfJiZjJiZhd2FpdCBjLnVwZGF0ZVRhc2tTdGF0dXMoXywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6Yyx0YXNrUmVxdWVzdGVkVHRsOmE/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57YSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpVLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWkmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgaT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxhPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihhJiZpJiZhLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaChjKXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxpKGMpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksbW8odCkpbyh0KTtlbHNle2NvbnN0IGk9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oaSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKG1vKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgaT10LnJlc3VsdDtpZihpLnRhc2smJnR5cGVvZiBpLnRhc2s9PSJvYmplY3QiKXtjb25zdCBhPWkudGFzazt0eXBlb2YgYS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGEudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksbW8odCkpcih0KTtlbHNle2NvbnN0IGk9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoaSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIGo/aTpuZXcgaihVLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBpPWF3YWl0IHRoaXMucmVxdWVzdCh0LFNjLG8pO2lmKGkudGFzaylzPWkudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6aS50YXNrfTtlbHNlIHRocm93IG5ldyBqKFUuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGE9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazphfSxKZShhLnN0YXR1cykpe2Euc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06YS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9OmEuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGEuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IGM9YS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLGMpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2Ygaj9pOm5ldyBqKFUuSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmksdGFzazphLHJlbGF0ZWRUYXNrOmN9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09VD0+e2QoVCl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksYSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goVCl7bShUKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksYSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOmF9KSxjJiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtLZV06Y319KTtjb25zdCBfPVQ9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKFQpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2gobmU9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7bmV9YCkpKTtjb25zdCBLPVQgaW5zdGFuY2VvZiBqP1Q6bmV3IGooVS5SZXF1ZXN0VGltZW91dCxTdHJpbmcoVCkpO2QoSyl9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsVD0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKFQgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChUKTt0cnl7Y29uc3QgSz1DaChuLFQucmVzdWx0KTtLLnN1Y2Nlc3M/bChLLmRhdGEpOmQoSy5lcnJvcil9Y2F0Y2goSyl7ZChLKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntfKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IGs9bz8udGltZW91dD8/QXksJD0oKT0+XyhqLmZyb21FcnJvcihVLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6a30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYixrLG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBaPWM/LnRhc2tJZDtpZihaKXtjb25zdCBUPUs9Pntjb25zdCBuZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTtuZT9uZShLKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsVCksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKFose3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEs9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEspfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKFQ9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKFQpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxUYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0seGMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sYnYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBhPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTphLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW0tlXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYSxuKS5jYXRjaChjPT50aGlzLl9vbmVycm9yKGMpKX0pO3JldHVybn1sZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPXZ1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGk9eXUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oaSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPXZ1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPXl1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZidShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxpPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2k/KGkobmV3IGooVS5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgaT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoaSkscyhuZXcgaihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxpKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxpLG4pO2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoYSl7Y29uc3QgYz1Jby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmF9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihjKSxKZShhLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxpKT0+e2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWEpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihKZShhLnN0YXR1cykpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2Euc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGksbik7Y29uc3QgYz1hd2FpdCBvLmdldFRhc2socixuKTtpZihjKXtjb25zdCBsPUlvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6Y30pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLEplKGMuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIF91KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBaeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBpPW5bcl07X3UoaSkmJl91KHMpP25bcl09ey4uLmksLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIE55IGV4dGVuZHMgUnl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8saT0+e2xldCBhPWkucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsYSkscy5vbkhhbmRsZXI/LihhKTtmb3IobGV0IGMgb2ZbLi4ucy5saXN0ZW5lcnNdKWMoYSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIGp5PSIyMDI2LTAxLTI2IixNeT0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIHF5e2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1YYi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PU15JiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgRHk9TyhbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksUXQ9TyhbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLEx5PU8oW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLFV5PVIoTHkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksTyhbaCgpLG10KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIEZ5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLEh5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxCeT1nKHtpc0Vycm9yOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIGpjPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLE1jPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBWeT1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksSnk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLEt5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxXeT1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLEd5PWcoe3ZhcmlhYmxlczpVeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOld5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxReT1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtSKGgoKSxNKCkpO3ZhciBrdT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIFl5PWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxSKGgoKSxCbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOk1jLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpqYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDprdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6a3Uub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxYeT1nKHtleHBlcmltZW50YWw6UihoKCksUihoKCksQm4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAoUXQpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6amMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOk1jLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTpRdC5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBlXz1nKHttb2RlOlF0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSx0Xz1PKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UCh0Xykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpYZSgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6WGUoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChPKFtlZix0Zl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAoc28pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpqYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOk1jLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIG5fPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOlhyLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksY2Y9Zyh7dG9vbEluZm86Zyh7aWQ6WG4ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOk5jLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOkR5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6R3kub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOlF0Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChRdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOk8oW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0Ok8oW0MoKSxtdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKE8oW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOk8oW0MoKSxtdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06TyhbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLG9fPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOmNmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAoc28pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpSKGgoKSxNKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86UXIuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOlh5LmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciByXz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOlFyLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6WXkuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6Y2YuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksc189e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIHd1KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oc18pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IEFmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KYiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiAkdShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGk9cy5wYXRoPy5tYXAoYT0+dHlwZW9mIGE9PSJvYmplY3QiP2Eua2V5OmEpLmpvaW4oIi4iKTtyZXR1cm4gaT9gJHtpfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gaV8oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gYV8oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIGNfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgcWMgZXh0ZW5kcyBOeXtfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6VnksdG9vbGlucHV0cGFydGlhbDpKeSx0b29scmVzdWx0Om5fLHRvb2xjYW5jZWxsZWQ6S3ksaG9zdGNvbnRleHRjaGFuZ2VkOm9ffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFxYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8ZWUoe2ppdGxlc3M6ITB9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFlyLHI9Pihjb25zb2xlLmxvZygiUmVjZWl2ZWQgcGluZzoiLHIucGFyYW1zKSx7fSkpLHRoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHZvaWQgMCl9cmVnaXN0ZXJDYXBhYmlsaXRpZXModCl7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBjYXBhYmlsaXRpZXMgYWZ0ZXIgdHJhbnNwb3J0IGlzIGVzdGFibGlzaGVkIik7dGhpcy5fY2FwYWJpbGl0aWVzPVp5KHRoaXMuX2NhcGFiaWxpdGllcyx0KX1yZWdpc3RlclRvb2wodCxuLG8pe2lmKHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XSl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGApO2xldCByPXRoaXMscz0oKT0+e3IuX2luaXRpYWxpemVkU2VudCYmci5fY2FwYWJpbGl0aWVzLnRvb2xzPy5saXN0Q2hhbmdlZCYmci5zZW5kVG9vbExpc3RDaGFuZ2VkKCl9LGk9bi5pbnB1dFNjaGVtYSE9PXZvaWQgMCxhPXt0aXRsZTpuLnRpdGxlLGRlc2NyaXB0aW9uOm4uZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6bi5pbnB1dFNjaGVtYSxvdXRwdXRTY2hlbWE6bi5vdXRwdXRTY2hlbWEsYW5ub3RhdGlvbnM6bi5hbm5vdGF0aW9ucyxfbWV0YTpuLl9tZXRhLGVuYWJsZWQ6ITAsZW5hYmxlKCl7dGhpcy5lbmFibGVkPSEwLHMoKX0sZGlzYWJsZSgpe3RoaXMuZW5hYmxlZD0hMSxzKCl9LHVwZGF0ZShjKXtPYmplY3QuYXNzaWduKHRoaXMsYykscygpfSxyZW1vdmUoKXtyLl9yZWdpc3RlcmVkVG9vbHNbdF09PT1hJiYoZGVsZXRlIHIuX3JlZ2lzdGVyZWRUb29sc1t0XSxzKCkpfSxoYW5kbGVyOmFzeW5jKGMsbCk9PntpZighYS5lbmFibGVkKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgZGlzYWJsZWRgKTtsZXQgZDtpZihpKXtsZXQgbT1hLmlucHV0U2NoZW1hLGI9bT9hd2FpdCAkdShtLGM/P3t9LGBJbnZhbGlkIGlucHV0IGZvciB0b29sICR7dH06IGApOmM/P3t9O2Q9YXdhaXQgbyhiLGwpfWVsc2UgZD1hd2FpdCBvKGwpO3JldHVybiBhLm91dHB1dFNjaGVtYSYmIWQuaXNFcnJvciYmKGQuc3RydWN0dXJlZENvbnRlbnQ9YXdhaXQgJHUoYS5vdXRwdXRTY2hlbWEsZC5zdHJ1Y3R1cmVkQ29udGVudCxgSW52YWxpZCBvdXRwdXQgZm9yIHRvb2wgJHt0fTogYCkpLGR9fTtyZXR1cm4gdGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdPWEsIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyYmIXRoaXMudHJhbnNwb3J0JiZ0aGlzLnJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHt0b29sczp7bGlzdENoYW5nZWQ6ITB9fSksdGhpcy5lbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpLHMoKSxhfV90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMTtlbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpe3RoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkfHwodGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vbmNhbGx0b29sPWFzeW5jKHQsbik9PntsZXQgbz10aGlzLl9yZWdpc3RlcmVkVG9vbHNbdC5uYW1lXTtpZighbyl0aHJvdyBFcnJvcihgVG9vbCAke3QubmFtZX0gbm90IGZvdW5kYCk7cmV0dXJuIG8uaGFuZGxlcih0LmFyZ3VtZW50cyxuKX0sdGhpcy5vbmxpc3R0b29scz1hc3luYyh0LG4pPT4oe3Rvb2xzOmF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHRoaXMuX3JlZ2lzdGVyZWRUb29scykuZmlsdGVyKChbbyxyXSk9PnIuZW5hYmxlZCkubWFwKGFzeW5jKFtvLHJdKT0+e2xldCBzPXtuYW1lOm8sdGl0bGU6ci50aXRsZSxkZXNjcmlwdGlvbjpyLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOnIuaW5wdXRTY2hlbWE/YXdhaXQgd3Uoci5pbnB1dFNjaGVtYSwiaW5wdXQiKTp7dHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnt9fX07cmV0dXJuIHIub3V0cHV0U2NoZW1hJiYocy5vdXRwdXRTY2hlbWE9YXdhaXQgd3Uoci5vdXRwdXRTY2hlbWEsIm91dHB1dCIpKSxyLmFubm90YXRpb25zJiYocy5hbm5vdGF0aW9ucz1yLmFubm90YXRpb25zKSxyLl9tZXRhJiYocy5fbWV0YT1yLl9tZXRhKSxzfSkpfSkpfWFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQodD17fSl7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRUb29sTGlzdENoYW5nZWQiKSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIscGFyYW1zOnR9KX1nZXRIb3N0Q2FwYWJpbGl0aWVzKCl7cmV0dXJuIHRoaXMuX2hvc3RDYXBhYmlsaXRpZXN9Z2V0SG9zdFZlcnNpb24oKXtyZXR1cm4gdGhpcy5faG9zdEluZm99Z2V0SG9zdENvbnRleHQoKXtyZXR1cm4gdGhpcy5faG9zdENvbnRleHR9Z2V0IG9udG9vbGlucHV0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiKX1zZXQgb250b29saW5wdXQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIsdCl9Z2V0IG9udG9vbGlucHV0cGFydGlhbCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIpfXNldCBvbnRvb2xpbnB1dHBhcnRpYWwodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiLHQpfWdldCBvbnRvb2xyZXN1bHQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiKX1zZXQgb250b29scmVzdWx0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iix0KX1nZXQgb250b29sY2FuY2VsbGVkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIil9c2V0IG9udG9vbGNhbmNlbGxlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIsdCl9Z2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiKX1zZXQgb25ob3N0Y29udGV4dGNoYW5nZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdCl9X29udGVhcmRvd247Z2V0IG9udGVhcmRvd24oKXtyZXR1cm4gdGhpcy5fb250ZWFyZG93bn1zZXQgb250ZWFyZG93bih0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9udGVhcmRvd24iLHRoaXMuX29udGVhcmRvd24sdCksdGhpcy5fb250ZWFyZG93bj10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKFF5LChuLG8pPT57aWYoIXRoaXMuX29udGVhcmRvd24pdGhyb3cgRXJyb3IoIk5vIG9udGVhcmRvd24gaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb250ZWFyZG93bihuLnBhcmFtcyxvKX0pfV9vbmNhbGx0b29sO2dldCBvbmNhbGx0b29sKCl7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2x9c2V0IG9uY2FsbHRvb2wodCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmNhbGx0b29sIix0aGlzLl9vbmNhbGx0b29sLHQpLHRoaXMuX29uY2FsbHRvb2w9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihvZiwobixvKT0+e2lmKCF0aGlzLl9vbmNhbGx0b29sKXRocm93IEVycm9yKCJObyBvbmNhbGx0b29sIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2wobi5wYXJhbXMsbyl9KX1fb25saXN0dG9vbHM7Z2V0IG9ubGlzdHRvb2xzKCl7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzfXNldCBvbmxpc3R0b29scyh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9ubGlzdHRvb2xzIix0aGlzLl9vbmxpc3R0b29scyx0KSx0aGlzLl9vbmxpc3R0b29scz10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKG5mLChuLG8pPT57aWYoIXRoaXMuX29ubGlzdHRvb2xzKXRocm93IEVycm9yKCJObyBvbmxpc3R0b29scyBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmxpc3R0b29scyhuLnBhcmFtcyxvKX0pfWFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodCl7c3dpdGNoKHQpe2Nhc2Uic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSI6aWYoIXRoaXMuX2hvc3RDYXBhYmlsaXRpZXM/LnNhbXBsaW5nKXRocm93IEVycm9yKGBIb3N0IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke3R9KWApO2JyZWFrfX1hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkodCl7c3dpdGNoKHQpe2Nhc2UidG9vbHMvY2FsbCI6Y2FzZSJ0b29scy9saXN0IjppZighdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKXRocm93IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhcGFiaWxpdHkgKHJlcXVpcmVkIGZvciAke3R9KWApO3JldHVybjtjYXNlInBpbmciOmNhc2UidWkvcmVzb3VyY2UtdGVhcmRvd24iOnJldHVybjtkZWZhdWx0OnRocm93IEVycm9yKGBObyBoYW5kbGVyIGZvciBtZXRob2QgJHt0fSByZWdpc3RlcmVkYCl9fWFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodCl7fWFzc2VydFRhc2tDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFzayBoYW5kbGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzeW5jIGNhbGxTZXJ2ZXJUb29sKHQsbil7aWYodGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNhbGxTZXJ2ZXJUb29sIiksdHlwZW9mIHQ9PSJzdHJpbmciKXRocm93IEVycm9yKGBjYWxsU2VydmVyVG9vbCgpIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgYnV0IHJlY2VpdmVkIGEgc3RyaW5nICgiJHt0fSIpLiBEaWQgeW91IG1lYW46IGNhbGxTZXJ2ZXJUb29sKHsgbmFtZTogIiR7dH0iLCBhcmd1bWVudHM6IHsgLi4uIH0gfSk/YCk7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0b29scy9jYWxsIixwYXJhbXM6dH0sWHIse29ucHJvZ3Jlc3M6KCk9Pnt9LHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6ITAsLi4ubn0pfWFzeW5jIHJlYWRTZXJ2ZXJSZXNvdXJjZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVhZFNlcnZlclJlc291cmNlIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9yZWFkIixwYXJhbXM6dH0sWGgsbil9YXN5bmMgbGlzdFNlcnZlclJlc291cmNlcyh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgibGlzdFNlcnZlclJlc291cmNlcyIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvbGlzdCIscGFyYW1zOnR9LFloLG4pfWFzeW5jIGNyZWF0ZVNhbXBsaW5nTWVzc2FnZSh0LG4pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjcmVhdGVTYW1wbGluZ01lc3NhZ2UiKTtsZXQgbz10LnRvb2xzP2FmOnNmO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIscGFyYW1zOnR9LG8sbil9c2VuZE1lc3NhZ2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRNZXNzYWdlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL21lc3NhZ2UiLHBhcmFtczp0fSxCeSxuKX1zZW5kTG9nKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL21lc3NhZ2UiLHBhcmFtczp0fSl9dXBkYXRlTW9kZWxDb250ZXh0KHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJ1cGRhdGVNb2RlbENvbnRleHQiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiLHBhcmFtczp0fSxrYyxuKX1vcGVuTGluayh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgib3BlbkxpbmsiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvb3Blbi1saW5rIixwYXJhbXM6dH0sRnksbil9c2VuZE9wZW5MaW5rPXRoaXMub3Blbkxpbms7ZG93bmxvYWRGaWxlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJkb3dubG9hZEZpbGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvZG93bmxvYWQtZmlsZSIscGFyYW1zOnR9LEh5LG4pfXJlcXVlc3RUZWFyZG93bih0PXt9KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIixwYXJhbXM6dH0pfXJlcXVlc3REaXNwbGF5TW9kZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVxdWVzdERpc3BsYXlNb2RlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIixwYXJhbXM6dH0sZV8sbil9c2VuZFNpemVDaGFuZ2VkKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIscGFyYW1zOnR9KX1zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpe2xldCB0PSExLG49MCxvPTAscj0oKT0+e3R8fCh0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3Q9ITE7bGV0IGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9aS5zdHlsZS5oZWlnaHQ7aS5zdHlsZS5oZWlnaHQ9Im1heC1jb250ZW50IjtsZXQgYz1NYXRoLmNlaWwoaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO2kuc3R5bGUuaGVpZ2h0PWE7bGV0IGw9TWF0aC5jZWlsKHdpbmRvdy5pbm5lcldpZHRoKTsobCE9PW58fGMhPT1vKSYmKG49bCxvPWMsdGhpcy5zZW5kU2l6ZUNoYW5nZWQoe3dpZHRoOmwsaGVpZ2h0OmN9KSl9KSl9O3IoKTtsZXQgcz1uZXcgUmVzaXplT2JzZXJ2ZXIocik7cmV0dXJuIHMub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHMub2JzZXJ2ZShkb2N1bWVudC5ib2R5KSwoKT0+cy5kaXNjb25uZWN0KCl9YXN5bmMgY29ubmVjdCh0PW5ldyBxeSh3aW5kb3cucGFyZW50LHdpbmRvdy5wYXJlbnQpLG4pe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJBcHAgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyBhZ2Fpbi4iKTt0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITEsYXdhaXQgc3VwZXIuY29ubmVjdCh0KTt0cnl7bGV0IG89YXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2luaXRpYWxpemUiLHBhcmFtczp7YXBwQ2FwYWJpbGl0aWVzOnRoaXMuX2NhcGFiaWxpdGllcyxhcHBJbmZvOnRoaXMuX2FwcEluZm8scHJvdG9jb2xWZXJzaW9uOmp5fX0scl8sbik7aWYobz09PXZvaWQgMCl0aHJvdyBFcnJvcihgU2VydmVyIHNlbnQgaW52YWxpZCBpbml0aWFsaXplIHJlc3VsdDogJHtvfWApO3RoaXMuX2hvc3RDYXBhYmlsaXRpZXM9by5ob3N0Q2FwYWJpbGl0aWVzLHRoaXMuX2hvc3RJbmZvPW8uaG9zdEluZm8sdGhpcy5faG9zdENvbnRleHQ9by5ob3N0Q29udGV4dCxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIn0pLHRoaXMuX2luaXRpYWxpemVkU2VudD0hMCx0aGlzLm9wdGlvbnM/LmF1dG9SZXNpemUmJnRoaXMuc2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsb3NlKCksb319fWxldCBTdT0iIjtjb25zdCB1Zj0oZSx0LG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT0+e2lmKCFlKXJldHVybjsoZS50aGVtZT09PSJsaWdodCJ8fGUudGhlbWU9PT0iZGFyayIpJiZ0LmFwcGx5RG9jdW1lbnRUaGVtZShlLnRoZW1lKTtjb25zdCBvPWUuc3R5bGVzPy52YXJpYWJsZXM7byYmdHlwZW9mIG89PSJvYmplY3QiJiZ0LmFwcGx5SG9zdFN0eWxlVmFyaWFibGVzKG8pO2NvbnN0IHI9ZS5zdHlsZXM/LmNzcz8uZm9udHM7dHlwZW9mIHI9PSJzdHJpbmciJiZyJiZyIT09U3UmJih0LmFwcGx5SG9zdEZvbnRzKHIpLFN1PXIpO2NvbnN0IHM9ZS5zYWZlQXJlYUluc2V0cztpZihzKWZvcihjb25zdCBpIG9mWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSl7Y29uc3QgYT1OdW1iZXIoc1tpXT8/MCk7bi5zdHlsZS5zZXRQcm9wZXJ0eShgLS1pbnNldC0ke2l9YCxgJHtOdW1iZXIuaXNGaW5pdGUoYSkmJmE+MD9hOjB9cHhgKX19LGplPW5ldyBxYyh7bmFtZToiaG90ZWwtc3RvcmVmcm9udCIsdmVyc2lvbjoiMS4wLjAifSx7b3BlbkxpbmtzOnt9fSksbGY9e2FwcGx5RG9jdW1lbnRUaGVtZTppXyxhcHBseUhvc3RTdHlsZVZhcmlhYmxlczphXyxhcHBseUhvc3RGb250czpjX30sbWU9ZT0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksdT1lPT5TdHJpbmcoZT8/IiIpLnJlcGxhY2UoL1smPD4iJ10vZyx0PT50PT09IiYiPyImYW1wOyI6dD09PSI8Ij8iJmx0OyI6dD09PSI+Ij8iJmd0OyI6dD09PSciJz8iJnF1b3Q7IjoiJiMzOTsiKTtsZXQgY3Q9IiIsY3M9IiIsZGY9e30scGY9ITEsaGY9IiIsej17Y2hlY2tJbjoiIixjaGVja091dDoiIixndWVzdHM6Mn0sUT0xO2NvbnN0IHp1PTU7bGV0IFk9bnVsbCx5dD1bXSxXZT0iIixwZT1bXSxWPW51bGwseG89MDtjb25zdCB1Xz1uZXcgU2V0KFsiZm9yZ2V0UHJlZmVyZW5jZXMiLCJhZGRUb1RyaXAiLCJjbGVhclRyaXAiLCJyZXF1ZXN0Qm9va2luZyIsImNhbmNlbEJvb2tpbmciLCJjaGFuZ2VCb29raW5nIiwic2lnbkluIiwic2lnbk91dCJdKSxZdD1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO3JldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP2Bob3RlbDoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGV4dHJhczpib29raW5nOiR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgZXh0cmFzOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzInx8dD09PSJwb2xpY3ktbWlzc2luZyI/YHBvbGljeToke2UuaG90ZWw/LmlkPz8iIn06JHtlLnRvcGljPz8iIn1gOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciP2BjYW5jZWw6JHtlLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJjaGFuZ2UtcHJldmlldyI/YGNoYW5nZToke2UuY29uZmlybWF0aW9uQ29kZT8/ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iZGVzdGluYXRpb25zIj9gZGVzdGluYXRpb25zOiR7ZS5zY29wZT8ubmFtZT8/IiJ9YDp0PT09ImhvdGVscyJ8fHQ9PT0ibm8taG90ZWxzIj9gaG90ZWxzOiR7ZS5hc2s/LmNpdHk/PyIifToke2UuYXNrPy5xdWVyeT8/ZS5xdWVyeT8/IiJ9YDp0fSxibz1lPT57IVZ8fGRfLmhhcyhTdHJpbmcoVi52aWV3KSl8fFl0KGUpIT09WXQoVikmJihwZT1bLi4ucGUse3BheWxvYWQ6VixsYWJlbDpwXyhWKSx2ZXJzaW9uOnhvfV0uc2xpY2UoLTYpKX0sbF89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKSxuPWU/LnN0YXk/LmNoZWNrSW4/e2NoZWNrSW46ZS5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6ZS5zdGF5LmNoZWNrT3V0LGd1ZXN0czplLnN0YXkuZ3Vlc3RzPz8yfTp7fTtpZih0PT09InRyaXAiKXJldHVybntrZXk6InZpZXdUcmlwIixhcmdzOnt9fTtpZih0PT09ImJvb2tpbmdzIilyZXR1cm57a2V5OiJsaXN0Qm9va2luZ3MiLGFyZ3M6e319O2lmKCh0PT09ImhvdGVscyJ8fHQ9PT0iZGVzdGluYXRpb25zInx8dD09PSJuby1ob3RlbHMiJiZlLmFzaykmJmUuYXNrKXJldHVybntrZXk6Imxpc3RIb3RlbHMiLGFyZ3M6ey4uLmUuYXNrfX07aWYodD09PSJjb21wYXJpc29uIiYmQXJyYXkuaXNBcnJheShlLmNvbHVtbnMpKXJldHVybntrZXk6ImNvbXBhcmUiLGFyZ3M6ey4uLm4sLi4uZS50aXRsZT97dGl0bGU6ZS50aXRsZX06e30sLi4uZS5yZWNvbW1lbmRlZD97cmVjb21tZW5kZWQ6ZS5yZWNvbW1lbmRlZH06e30sZW50cmllczplLmNvbHVtbnMubWFwKG89Pih7aG90ZWw6by5ob3RlbD8uaWQsLi4uby5iZXN0Rm9yP3tiZXN0Rm9yOm8uYmVzdEZvcn06e30sLi4uby5wcm9zPy5sZW5ndGg/e3Byb3M6by5wcm9zfTp7fSwuLi5vLmNvbnM/Lmxlbmd0aD97Y29uczpvLmNvbnN9Ont9fSkpfX07aWYoKHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zIikmJmUuaG90ZWw/LmlkKXJldHVybntrZXk6ImdldEhvdGVsIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm4sLi4uZS5yb29tc193YW50ZWQ/e3Jvb21zOmUucm9vbXNfd2FudGVkfTp7fX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5mb3JCb29raW5nKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2Jvb2tpbmc6ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9fTtpZih0PT09ImV4dHJhcyImJmUuaG90ZWw/LmlkKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubn19O2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm57a2V5OiJpdGluZXJhcnkiLGFyZ3M6e3RpdGxlOmUudGl0bGUsLi4ubixkYXlzOihlLmRheXM/P1tdKS5tYXAobz0+KHtsYWJlbDpvLmxhYmVsLC4uLm8ubm90ZT97bm90ZTpvLm5vdGV9Ont9LGl0ZW1zOihvLml0ZW1zPz9bXSkubWFwKHI9PnIuaWQpfSkpfX19LFR1PWU9PntwZT1wZS5maWx0ZXIodD0+IWUuaW5jbHVkZXMoU3RyaW5nKHQucGF5bG9hZD8udmlldykpKX0sZF89bmV3IFNldChbImZpbmQtYm9va2luZyIsImJvb2tpbmciLCJjYW5jZWxsZWQiLCJjaGFuZ2VkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiLCJtZW1iZXItc2lnbi1pbiIsIm1lbWJlci1ub3QtZm91bmQiXSkscF89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJuby1ob3RlbHMiKXJldHVybiJ0aGUgc2VhcmNoIjtpZih0PT09ImRlc3RpbmF0aW9ucyIpcmV0dXJuIGUuc2NvcGU/Lm5hbWU/U3RyaW5nKGUuc2NvcGUubmFtZSk6ImFsbCBkZXN0aW5hdGlvbnMiO2lmKHQ9PT0iaG90ZWxzIil7aWYoZS5hc2s/LmNpdHkpcmV0dXJuIFN0cmluZyhlLmFzay5jaXR5KTtjb25zdCBuPVsuLi5uZXcgU2V0KChlLmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby5jaXR5KSkpXTtyZXR1cm4gbi5sZW5ndGg9PT0xP1N0cmluZyhuWzBdKTpgJHtlLnRvdGFsPz8wfSBob3RlbHNgfXJldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIik6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/InRoZSBjYW5jZWxsYXRpb24iOnQ9PT0iY2hhbmdlLXByZXZpZXciPyJ0aGUgY2hhbmdlIjp0PT09Im1lbWJlciI/InlvdXIgbWVtYmVyc2hpcCI6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gYWRkLW9ucyBmb3IgJHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmAke1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIil9IGFkZC1vbnNgOnQ9PT0idHJpcCI/InRoZSB0cmlwIjp0PT09ImJvb2tpbmdzIj8ieW91ciBib29raW5ncyI6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzIj8idGhlIHBvbGljaWVzIjoiYmFjayJ9LGZmPSgpPT57Y29uc3QgZT1tZSgiYmFja2J0biIpLHQ9cGUuYXQoLTEpO2UuaGlkZGVuPSF0LHQmJihlLnRleHRDb250ZW50PWDigLkgJHt0LmxhYmVsfWApfTtsZXQgQnQ9IiIsd3M9IiIsWHQ9MCxEYz0hMTtjb25zdCBtZj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKHdzPXQudHJpcElkKSxYdD1OdW1iZXIodC5jb3VudD8/MCksQXJyYXkuaXNBcnJheSh0LmxpbmVzKSYmKHl0PXQubGluZXMsRGM9ITApKX0saF89ZT0+d3M/ey4uLmUsdHJpcDp3c306ZSxmXz1lPT5kZltlXT8/IiI7bGV0IEx0PSExO2NvbnN0IEl1PWU9PntMdD1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfTtsZXQgQ289MCxnZj0iIixiZj0iIjtjb25zdCB1dD0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlYWQiKTtpZighZSlyZXR1cm47Y29uc3QgdD0oKT0+ZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KTt0KCksc2V0VGltZW91dCh0LDE4MCl9LHE9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89Zl8oZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihMdClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO0l1KCEwKTtjb25zdCByPUNvO3JldHVybiBqZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpoXyh0KX0pLmZpbmFsbHkoKCk9Pkl1KCExKSkudGhlbihzPT57bWYocz8uX21ldGEpO2NvbnN0IGk9cz8uc3RydWN0dXJlZENvbnRlbnQsYT1pJiZuLmZvbGQ/bi5mb2xkKGkpOmksYz11Xy5oYXMoZSkmJmEmJmEudmlldyE9PSJlcnJvciI7aWYocj09PUNvJiZhKXtnZj1pP0pTT04uc3RyaW5naWZ5KGkpOiIiLGJmPUpTT04uc3RyaW5naWZ5KGEpO2NvbnN0IGw9WXQoYSkhPT1ZdChWKTtuLnB1c2ghPT0hMSYmYm8oYSksYyYmKHhvKz0xKSxhLnZpZXc9PT0iYm9va2luZyImJihUdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLHhlPW51bGwpLChhLnZpZXc9PT0iY2FuY2VsbGVkInx8YS52aWV3PT09ImNoYW5nZWQiKSYmVHUoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLEdlKGEpLGwmJnV0KCl9ZWxzZSBjJiYoeG8rPTEpO3JldHVybiBtXyhzLG4ubm90ZSksc30pfSxtXz0oZSx0KT0+e2NvbnN0IG49KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG89Pm8/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyFufHwhamUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fGplLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6dD9gJHt0fSAke1N0cmluZyhuKX1gOlN0cmluZyhuKX1dfSkuY2F0Y2goKCk9Pnt9KX07bGV0IGVzPSExO2NvbnN0IGdfPSIoVGhlIGNhcmQgcHJpY2VkIGl0cyBvd24gZGVmYXVsdCBkYXRlcywgdG9uaWdodCwgdG8gc2hvdyB0aGUgcm9vbXM7IHRoZSBndWVzdCBoYXMgbm90IGNob3NlbiB0aGVtLikiLGlvPWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LGFvPWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxiXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLHZfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7Yl99JHt1KGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHt1KGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLHRlPSgpPT5wZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke3UoaGZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixlbj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sJHM9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLFZlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake2VuKGUuY2hlY2tJbil9IOKAkyAke2VuKGUuY2hlY2tPdXQpfSDCtyAkeyRzKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHskcyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIix5Xz0oZSx0LG4pPT57Y29uc3Qgbz15dC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0sX189KGUsdCk9Pntjb25zdCBuPXl0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxFbz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHt1KG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHt1KG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7dShuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCx2Zj0oZSx0KT0+e2NvbnN0IG49dHx8eWYoKTtyZXR1cm4oIXouY2hlY2tJbnx8ei5jaGVja0luPG4pJiYoei5jaGVja0luPW4pLCghei5jaGVja091dHx8ei5jaGVja091dDw9ei5jaGVja0luKSYmKHouY2hlY2tPdXQ9RmUoei5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHt1KHouY2hlY2tJbil9IiBtaW49IiR7dShuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7dSh6LmNoZWNrT3V0KX0iIG1pbj0iJHt1KEZlKHouY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7dShRKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7dSh0cygpKX08L3NwYW4+CiAgPC9kaXY+YH0sdHM9KCk9Pntjb25zdCBlPXouY2hlY2tJbiYmei5jaGVja091dD8kcyh6LmNoZWNrSW4sei5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPVE+MT9gJHtRfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sRmU9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSx5Zj0oKT0+bmV3IERhdGUoRGF0ZS5ub3coKS1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqNmU0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLF9mPWU9Pntjb25zdCB0PVsuLi5lPy50b2RheT9bZS50b2RheS5taW4sZS50b2RheS5tYXhdOltdLC4uLihlPy5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8udG9kYXlUaGVyZT8/IiIpKV0uZmlsdGVyKG89Pi9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KG8pKS5zb3J0KCksbj15ZigpO3JldHVybnttaW46W3RbMF0/P24sbl0uc29ydCgpWzBdPz9uLHN0YXJ0OnQuYXQoLTEpPz9ufX0sa189ZT0+e2NvbnN0e21pbjp0LHN0YXJ0Om59PV9mKGUpOyghei5jaGVja0lufHx6LmNoZWNrSW48dCkmJih6LmNoZWNrSW49biksKCF6LmNoZWNrT3V0fHx6LmNoZWNrT3V0PD16LmNoZWNrSW4pJiYoei5jaGVja091dD1GZSh6LmNoZWNrSW4sMSkpO2NvbnN0IG89YDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHt1KHouY2hlY2tJbil9IiBtaW49IiR7dSh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHt1KHouY2hlY2tPdXQpfSIgbWluPSIke3UoRmUoei5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7dShRKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke2Uuc2NvcGU/IiI6JzxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kIj5TZWFyY2g8L2J1dHRvbj4nfQogICAgICA8L2Rpdj5gLHI9YDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgIDxsYWJlbCBjbGFzcz0id2hlcmUiPldoZXJlIHRvPGlucHV0IGlkPSJ3aGVyZSIgdHlwZT0ic2VhcmNoIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwiIGFyaWEtbGFiZWw9IldoZXJlIHRvIj48L2xhYmVsPgogICAgICAke299CiAgICA8L2Rpdj5gLHM9YT0+YDxkaXYgY2xhc3M9InBsYWNlcyI+JHthLm1hcCgoYyxsKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHt1KGMubmFtZSl9IiR7bD49bHQ/IiBoaWRkZW4iOiIifT4ke3UoYy5uYW1lKX0gPHNtYWxsPiR7dShjLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfSR7YS5sZW5ndGg+bHQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHthLmxlbmd0aC1sdH0gbW9yZTwvYnV0dG9uPmA6IiJ9PC9kaXY+YCxpPWUuc2NvcGU7cmV0dXJuIGk/W3RlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UoaS5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UoZS50b3RhbCl9ICR7dShlLnZvY2FiPy5ub3VuUGx1cmFsPz8iaG90ZWxzIil9IGluICR7dSgoaS5jaXRpZXM/P1tdKS5sZW5ndGgpfSBjaXRpZXM8L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzZWFyY2giPiR7b308L2Rpdj5gLHMoaS5jaXRpZXM/P1tdKSxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZS1hbGw9IiR7dShpLm5hbWUpfSI+QWxsICR7dShlLnRvdGFsKX0gaW4gJHt1KGkubmFtZSl9PC9idXR0b24+PC9kaXY+YF0uam9pbigiIik6W3RlKCksciwuLi4oZS5yZWdpb25zPz9bXSkubWFwKGE9PmAKICAgICAgPGRpdiBjbGFzcz0icmVnaW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+JHt1KGEubmFtZSl9IDxzbWFsbD4ke3UoYS5jb3VudCl9PC9zbWFsbD48L2Rpdj4KICAgICAgICAkeyhhLmNvdW50cmllcz8/W10pLm1hcChjPT57Y29uc3QgbD1jLmNpdGllcz8/W10sZD1sLmxlbmd0aD09PTE/bFswXTp2b2lkIDA7cmV0dXJuYAogICAgICAgICAgPGRpdiBjbGFzcz0iZGVzdCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3QtY291bnRyeSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke3UoYy5uYW1lKX0iPiR7dShjLm5hbWUpfSR7ZCYmZC5uYW1lIT09Yy5uYW1lP2A8c21hbGw+IMK3ICR7dShkLm5hbWUpfTwvc21hbGw+YDoiIn0gPHNtYWxsIGNsYXNzPSJuIj4ke3UoYy5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj4KICAgICAgICAgICAgJHtsLmxlbmd0aD4xP3MobCk6IiJ9CiAgICAgICAgICA8L2Rpdj5gfSkuam9pbigiIil9CiAgICAgIDwvZGl2PmApLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhbGwtaG90ZWxzIj5Ccm93c2UgYWxsICR7dShlLnRvdGFsKX08L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kLWJvb2tpbmciPkZpbmQgYSBib29raW5nPC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LGx0PTgsa2Y9ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O3JldHVybiB0P2A8c3BhbiBjbGFzcz0idC1mcm9tIj4ke3UodC50b3RhbCl9PHNtYWxsIGNsYXNzPSJ0LXN1YiI+JHtOdW1iZXIodC5yb29tcyk+MT9gJHt1KHQucm9vbXMpfSByb29tcyDDlyBgOiIifSR7dSh0Lm5pZ2h0cyl9ICR7TnVtYmVyKHQubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn0gwrcgdGF4ZXMgaW48L3NtYWxsPjwvc3Bhbj5gOmUubm9Sb29tc0ZvclN0YXk/YDxzcGFuIGNsYXNzPSJ0LWZyb20gdC1ub25lIj4key9zbGVlcHMvLnRlc3QoU3RyaW5nKGUubm9Sb29tc0ZvclN0YXkpKT9gTm8gcm9vbSBzbGVlcHMgJHt1KHouZ3Vlc3RzKX1gOiJObyByb29tIGZvciB0aGVzZSBkYXRlcyJ9PC9zcGFuPmA6YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7ZS5mcm9tTmlnaHRseT9gJHt1KGUuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+YH0sd189ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O2lmKCF0KXJldHVybiIiO2NvbnN0IG49W3QuZnJlZUNhbmNlbGxhdGlvbj8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uPC9zcGFuPic6IiIsTnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke3UodC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJdLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/YDxzcGFuIGNsYXNzPSJ0LXRhZ3MiPiR7bi5qb2luKCIiKX08L3NwYW4+YDoiIn0sVnQ9KCk9PnouY2hlY2tJbiYmei5jaGVja091dD97Y2hlY2tJbjp6LmNoZWNrSW4sY2hlY2tPdXQ6ei5jaGVja091dCxndWVzdHM6ei5ndWVzdHMsLi4uUT4xP3tyb29tczpRfTp7fX06e30sJF89ZT0+e2NvbnN0e2NoZWNrSW46dCxjaGVja091dDpuLGd1ZXN0czpvLHJvb21zOnIsLi4uc309ZT8/e307cmV0dXJuIHN9LFNfPShlLHQpPT57Y29uc3R7bWluOm4sc3RhcnQ6b309X2YodCk7cmV0dXJuKCF6LmNoZWNrSW58fHouY2hlY2tJbjxuKSYmKHouY2hlY2tJbj1vKSwoIXouY2hlY2tPdXR8fHouY2hlY2tPdXQ8PXouY2hlY2tJbikmJih6LmNoZWNrT3V0PUZlKHouY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY2kiIHZhbHVlPSIke3Uoei5jaGVja0luKX0iIG1pbj0iJHt1KG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjbyIgdmFsdWU9IiR7dSh6LmNoZWNrT3V0KX0iIG1pbj0iJHt1KEZlKHouY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0ibHJuIj4ke3UoUSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICAke2U/YDxzcGFuIGNsYXNzPSJuaWdodHMiPiR7dSh0cygpKX08L3NwYW4+YDonPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InByaWNlLWxpc3QiPlNob3cgcHJpY2VzPC9idXR0b24+J30KICA8L2Rpdj5gfTtsZXQgVGU9ImRhdGVzIjtjb25zdCB3Zj0iZGF0ZXMiLHZvPWU9Pntjb25zdCB0PWU/P3t9O3JldHVybnsuLi50LmJyYW5kP3ticmFuZDp0LmJyYW5kfTp7fSwuLi5BcnJheS5pc0FycmF5KHQuZmFjaWxpdGllcykmJnQuZmFjaWxpdGllcy5sZW5ndGg/e2ZhY2lsaXRpZXM6dC5mYWNpbGl0aWVzfTp7fSwuLi50LmZyZWVDYW5jZWxsYXRpb24/e2ZyZWVDYW5jZWxsYXRpb246ITB9Ont9LC4uLnQuYnJlYWtmYXN0P3ticmVha2Zhc3Q6ITB9Ont9fX0sUHU9ZT0+e2NvbnN0e2JyYW5kOnQsZmFjaWxpdGllczpuLGZyZWVDYW5jZWxsYXRpb246byxicmVha2Zhc3Q6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sel89ZT0+e2NvbnN0IHQ9dm8oZSk7cmV0dXJuKHQuYnJhbmQ/MTowKSsodC5mYWNpbGl0aWVzPy5sZW5ndGg/PzApKyh0LmZyZWVDYW5jZWxsYXRpb24/MTowKSsodC5icmVha2Zhc3Q/MTowKX0sVF89ZT0+e2NvbnN0IHQ9ZS5yZWZpbmU7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj0ocixzLGksYSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXI9IiR7dShyKX0iIGFyaWEtcHJlc3NlZD0iJHthPyJ0cnVlIjoiZmFsc2UifSI+JHt1KHMpfSA8c21hbGw+JHt1KGkpfTwvc21hbGw+PC9idXR0b24+YCxvPShyLHMpPT5zLmxlbmd0aD9gPGRpdiBjbGFzcz0iZmdyb3VwIj48c3BhbiBjbGFzcz0ic29ydHMtayI+JHt1KHIpfTwvc3Bhbj4ke3Muam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bbygiQnJhbmQiLCh0LmJyYW5kcz8/W10pLm1hcChyPT5uKGBicmFuZDoke3IubmFtZX1gLHIubmFtZSxyLmNvdW50LHIub24pKSksbygiSGFzIiwodC5mYWNpbGl0aWVzPz9bXSkubWFwKHI9Pm4oYGZhY2lsaXR5OiR7ci5rZXl9YCxyLmxhYmVsLHIuY291bnQsci5vbikpKSxvKCJSb29tIiwodC5yb29tPz9bXSkubWFwKHI9Pm4oci5rZXksci5sYWJlbCxyLmNvdW50LHIub24pKSldLmpvaW4oIiIpfSxJXz0oZSx0KT0+e2NvbnN0IG49cj0+TnVtYmVyKHIuc2xpY2UoOCwxMCkpLG89cj0+bmV3IERhdGUoYCR7cn1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse21vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KTtyZXR1cm4gbyhlKT09PW8odCk/YCR7bihlKX3igJMke24odCl9ICR7byh0KX1gOmAke24oZSl9ICR7byhlKX0g4oCTICR7bih0KX0gJHtvKHQpfWB9LCRmPShlLHQsbik9Pntjb25zdCBvPSEhZS5zdGF5Py5jaGVja0luLHI9el8oZS5hc2spLHM9VF8oZSksaT1TZi5maW5kKChbbF0pPT5sPT09bik/LlsxXT8/IkRlZmF1bHQiLGE9bz9gJHtJXyhlLnN0YXkuY2hlY2tJbixlLnN0YXkuY2hlY2tPdXQpfSR7UT4xP2AgwrcgJHtRfSByb29tc2A6IiJ9YDoiQWRkIGRhdGVzIixjPShsLGQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSB0b29sIiB0eXBlPSJidXR0b24iIGRhdGEtcGFuZWw9IiR7bH0iIGFyaWEtZXhwYW5kZWQ9IiR7VGU9PT1sPyJ0cnVlIjoiZmFsc2UifSI+JHtkfTwvYnV0dG9uPmA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icGxhY2VzIHRvb2xiYXIiPgogICAgICAke2MoImRhdGVzIix1KGEpKX0KICAgICAgJHt0P2MoInNvcnQiLG49PT0iZ3JvdXAiPyJTb3J0Ijp1KGkpKToiIn0KICAgICAgJHtzfHxyP2MoImZpbHRlcnMiLGBGaWx0ZXJzJHtyP2AgwrcgJHtyfWA6IiJ9YCk6IiJ9CiAgICAgICR7cj8nPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImNsZWFyLWZpbHRlcnMiPkNsZWFyPC9idXR0b24+JzoiIn0KICAgIDwvZGl2PgogICAgPGRpdiBkYXRhLXBhbmVsLWJvZHk9ImRhdGVzIiR7VGU9PT0iZGF0ZXMiPyIiOiIgaGlkZGVuIn0+JHtTXyhvLGUpfTwvZGl2PgogICAgJHt0P2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0ic29ydCIke1RlPT09InNvcnQiPyIiOiIgaGlkZGVuIn0+JHt0fTwvZGl2PmA6IiJ9CiAgICAke3M/YDxkaXYgY2xhc3M9ImZpbHRlci1wYW5lbCIgZGF0YS1wYW5lbC1ib2R5PSJmaWx0ZXJzIiR7VGU9PT0iZmlsdGVycyI/IiI6IiBoaWRkZW4ifT4ke3N9PC9kaXY+YDoiIn1gfSxTZj1bWyJncm91cCIsIkRlZmF1bHQiXSxbInByaWNlLWxvdyIsIkxvd2VzdCBwcmljZSJdLFsicHJpY2UtaGlnaCIsIkhpZ2hlc3QgcHJpY2UiXSxbInJhdGluZyIsIlJhdGluZyJdXSxQXz1lPT57Y29uc3QgdD1lLmhvdGVscz8/W10sbj1bLi4ubmV3IFNldCh0Lm1hcChrPT5TdHJpbmcoay5jaXR5KSkpXSxvPWs9Pntjb25zdCAkPXQuZmluZChaPT5aLmNpdHk9PT1rKT8uY291bnRyeTtyZXR1cm4gJCYmIVN0cmluZygkKS5zdGFydHNXaXRoKGspP1N0cmluZygkKToiIn0scj1bLi4ubmV3IFNldCh0Lm1hcChrPT5TdHJpbmcoay5jb3VudHJ5Pz8iIikpKV0scz1yLmxlbmd0aD4xLGk9az0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHt1KGspfSR7IXMmJm8oayk/YDxzbWFsbD4gwrcgJHt1KG8oaykpfTwvc21hbGw+YDoiIn08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJ0aWxlcyI+CiAgICAgICAgJHt0LmZpbHRlcigkPT4kLmNpdHk9PT1rKS5tYXAoJD0+YAogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke3UoJC5pZCl9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7aW8oU3RyaW5nKCQuaWQpKX0iPgogICAgICAgICAgICAgICR7JC5pbWFnZVVybD9gPGltZyBzcmM9IiR7dSgkLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7dShhbyhTdHJpbmcoJC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICAgICAgICAkeyQuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke3UoJC5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHt1KCQubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXdoZXJlIj4ke3Uobi5sZW5ndGg+MT8kLmFyZWE/PyQuY2l0eTpbJC5hcmVhLCQuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZvb3QiPgogICAgICAgICAgICAgICAgJHtrZigkKX0KICAgICAgICAgICAgICAgICR7dl8oJC5yYXRpbmcpfQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAke3dfKCQpfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLGE9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxjPU51bWJlcihlLm9mZnNldD8/MCksbD1hLWMtdC5sZW5ndGgsZD1lLnBsYWNlcz8/W107ZS5hc2s/LmNpdHk7Y29uc3QgbT1kLmxlbmd0aD9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iV2hlcmUiPgogICAgICAgICAgICR7ZC5tYXAoKGssJCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7dShrLnBsYWNlKX0iJHskPj1sdD8iIGhpZGRlbiI6IiJ9PiR7dShrLmxhYmVsKX0gPHNtYWxsPiR7dShrLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICAgICAgICR7ZC5sZW5ndGg+bHQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHtkLmxlbmd0aC1sdH0gbW9yZTwvYnV0dG9uPmA6IiJ9CiAgICAgICAgIDwvZGl2PmA6IiIsYj1TdHJpbmcoZS5zb3J0Pz8iZ3JvdXAiKSx2PSEoKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xKSxfPXQubGVuZ3RoPjE/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Ik9yZGVyIj4ke1NmLmZpbHRlcigoW2tdKT0+dnx8IWsuc3RhcnRzV2l0aCgicHJpY2UiKSkubWFwKChbaywkXSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zb3J0PSIke2t9IiBhcmlhLXByZXNzZWQ9IiR7az09PWI/InRydWUiOiJmYWxzZSJ9Ij4keyR9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bdGUoKSxtLCRmKGUsXyxiKSxlLndpZGVuZWQ/YDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIG1hdGNoZWQgJHt1KGUud2lkZW5lZC5mcm9tKX0uIFRoZXNlIGFyZSAke3UoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIixgPGRpdj4ke3M/ci5tYXAoaz0+YDxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj4ke3Uoayl9PC9kaXY+JHtuLmZpbHRlcigkPT50LnNvbWUoWj0+Wi5jaXR5PT09JCYmU3RyaW5nKFouY291bnRyeT8/IiIpPT09aykpLm1hcChpKS5qb2luKCIiKX1gKS5qb2luKCIiKTpuLm1hcChpKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7dShlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke3UoZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIixsPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHtjP2Ake2MrMX3igJMke2MrdC5sZW5ndGh9YDp0Lmxlbmd0aH0gb2YgJHthfS48L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMjAsbCl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKX0seF89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXSxuPWUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke3UoZS53aWRlbmVkLmZyb20pfSwgc28gdGhpcyBsb29rZWQgaW4gJHt1KGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiI7cmV0dXJuIGUuYmVmb3JlRmlsdGVycz8oVGU9ImZpbHRlcnMiLFt0ZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj4ke3UoZS53aHk/P2BOb25lIG9mIHRoZSAke2UuYmVmb3JlRmlsdGVyc30gaGVyZSBoYXMgYWxsIG9mIHRob3NlIHRvZ2V0aGVyLmApfTwvZGl2PmAsJGYoZSwiIixTdHJpbmcoZS5hc2s/LnNvcnQ/PyJncm91cCIpKV0uam9pbigiIikpOnQubGVuZ3RoP1t0ZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7dSh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobz0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KG8uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7aW8oU3RyaW5nKG8uaWQpKX0iPgogICAgICAgICAgJHtvLmltYWdlVXJsP2A8aW1nIHNyYz0iJHt1KG8uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke3UoYW8oU3RyaW5nKG8ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHt1KG8ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7dShbby5hcmVhLG8uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICR7a2Yobyl9CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YCR7bn08ZGl2IGNsYXNzPSJlbXB0eSI+JHt1KGUud2h5Pz9gTm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZS5xdWVyeX0iYDoiIn0uIFRyeSBhIGNpdHkuYCl9PC9kaXY+YH0semY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke2lvKFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7dShlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHt1KGFvKFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHt1KGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7dShlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHt1KFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke3UoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHt1KGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7dShlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHt1KHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsQ189KGUsdCxuKT0+e2NvbnN0IG89eV8oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtpbyhgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke3UodC5pbWFnZVVybCl9IiBhbHQ9IiI+YDp1KGFvKFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHt1KHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7dShTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke3UodC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7dSh0LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke3UodC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke3UodC5uaWdodGx5KX0gLyBuaWdodCR7UT4xP2AgwrcgJHtRfSByb29tc2A6IiJ9IMK3IGluY2wuIHRheDwvZGl2PgogICAgICAgICR7dC5tZW1iZXJSYXRlP2A8ZGl2IGNsYXNzPSJwLW1lbWJlciI+JHt1KHQubWVtYmVyUmF0ZS50aWVyKX0gcmF0ZTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7RW8oYGRhdGEtYWRkLXJvb209IiR7dSh0LmlkKX0iIGRhdGEtaG90ZWw9IiR7dShlLmlkKX0iYCxvLFN0cmluZyh0Lm5hbWUpLFEpfTwvZGl2PgogICAgPC9kaXY+YH0sRV89KGUsdCk9PiFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyPyIiOmAKICA8ZGl2IGNsYXNzPSJmbGV4LWRhdGVzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iTmVhcmJ5IGFycml2YWwgZGF0ZXMiPgogICAgJHt0Lm1hcChuPT5gPGJ1dHRvbiBjbGFzcz0iZmQke24uY2hvc2VuPyIgb24iOiIifSR7bi5mcm9tPyIiOiIgb3V0In0ke24uYmVzdD8iIGJlc3QiOiIifSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke3UoZSl9IiBkYXRhLWNpPSIke3Uobi5jaGVja0luKX0iIGRhdGEtY289IiR7dShuLmNoZWNrT3V0KX0iIGFyaWEtbGFiZWw9IkFycml2ZSAke3UoZW4oU3RyaW5nKG4uY2hlY2tJbikpKX0ke24uZnJvbT9gLCBmcm9tICR7dShuLmZyb20pfWA6Iiwgbm90aGluZyBsZWZ0In0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1kYXkiPiR7dShlbihTdHJpbmcobi5jaGVja0luKSkpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtcHJpY2UiPiR7bi5mcm9tP3Uobi5mcm9tKToiRnVsbCJ9PC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gLHh1PWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5yb29tcz8/W10sbz1lLnN0YXk/P3o7cmV0dXJuW3RlKCksemYodCksdmYoU3RyaW5nKHQuaWQpLHQudG9kYXlUaGVyZSksRV8oU3RyaW5nKHQuaWQpLGUuZGF0ZXMpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke3UoZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PkNfKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke3UodC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke3Uoci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke3UodC5pZCl9Ij4ke3Uoci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LE9fPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdLG89ZS5mb3JCb29raW5nO3JldHVybiBvP1t0ZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+QWRkLW9ucyBmb3IgJHt1KG8uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHt1KHQubmFtZSl9IMK3ICR7dShWZShvLnN0YXkpKX08L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7dShyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3Uoci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHt1KHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke3Uoci5wZXIpfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7RW8oYGRhdGEtYm9va2luZy1leHRyYT0iJHt1KHIuaWQpfSIgZGF0YS1ib29raW5nPSIke3Uoby5jb25maXJtYXRpb25Db2RlKX0iYCxOdW1iZXIoby5oZWxkPy5bci5pZF0/PzApLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLCc8ZGl2IGNsYXNzPSJub3RlIj5FYWNoIGNoYW5nZSBpcyBzaG93biB3aXRoIGl0cyBuZXcgdG90YWwgYmVmb3JlIGFueXRoaW5nIG1vdmVzLiBOb3RoaW5nIGlzIGNoYXJnZWQgaGVyZS48L2Rpdj4nLCc8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkJhY2sgdG8geW91ciBib29raW5nczwvYnV0dG9uPiddLmpvaW4oIiIpOlt0ZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHt1KHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3Uoci5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7dShyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke3Uoci5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke3Uoci5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtFbyhgZGF0YS1hZGQtZXh0cmE9IiR7dShyLmlkKX0iIGRhdGEtaG90ZWw9IiR7dSh0LmlkKX0iYCxfXyhTdHJpbmcodC5pZCksU3RyaW5nKHIuaWQpKSxTdHJpbmcoci5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7dSh0LmlkKX0iPkJhY2sgdG8gJHt1KHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LEFfPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHt1KGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke3UoZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7dShlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHt1KGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHt1KGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7dShlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7dShlLmhvdGVsSWQpfSIke2UuZGF5P2AgZGF0YS1kYXk9IiR7dShlLmRheSl9ImA6IiJ9YDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3UoZS50aXRsZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHt1KGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtWZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7dShlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7dShlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtFbyh0LE51bWJlcihlLmtpbmQ9PT0iZXh0cmEiP2Uub3JkZXJlZD8/ZS5xdWFudGl0eT8/MTplLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0sQ3U9KGUsdCk9PmA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7dShlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke3UoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHt1KGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHt1KGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dSh0KX08L3NwYW4+PHNwYW4+JHt1KGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIGVhcm5zPC9zcGFuPjxzcGFuPiR7dShOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgIDwvZGl2PmAsUl89ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVyblt0ZSgpLCc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlIHRyaXAgaXMgZW1wdHkuPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkJyb3dzZSAke3UoY3QpfSBob3RlbHM8L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBuPVsuLi5uZXcgU2V0KHQubWFwKG89PlN0cmluZyhvLmRheT8/IiIpKSldLnNvcnQoKTtyZXR1cm5bdGUoKSxuLm1hcChvPT5gCiAgICAgICR7bz9gPGRpdiBjbGFzcz0iZGF5Ij4ke3UoZW4obykpfTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InJvd3MiPiR7dC5maWx0ZXIocj0+U3RyaW5nKHIuZGF5Pz8iIik9PT1vKS5tYXAoQV8pLmpvaW4oIiIpfTwvZGl2PmApLmpvaW4oIiIpLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG89PmAke3Uoby50aXRsZSl9OiAke3Uoby53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLC4uLkFycmF5LmlzQXJyYXkoZS5ncm91cHMpJiZlLmdyb3Vwcy5sZW5ndGg+MT9bYDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlZCBpbiAke3UoKGUuY3VycmVuY2llcz8/W10pLmpvaW4oIiBhbmQgIikpfSwgc2VwYXJhdGVseS4gTm90aGluZyBoZXJlIGNvbnZlcnRzIG9uZSBpbnRvIHRoZSBvdGhlcjsgZWFjaCBob3RlbCBpcyBib29rZWQgYW5kIHBhaWQgaW4gaXRzIG93bi48L2Rpdj5gLC4uLmUuZ3JvdXBzLm1hcChvPT5DdShvLG8uZ29lc1dpdGhBU3RheT9gSW4gJHtvLmN1cnJlbmN5fSwgZ29lcyB3aXRoIGEgc3RheSAtIG5vdCBpbiB0aGUgdG90YWxgOmBUb3RhbCBpbiAke28uY3VycmVuY3l9YCkpXTpbQ3UoZSwiVG90YWwiKV0sLi4uQXJyYXkuaXNBcnJheShlLm5lZWRzUm9vbSkmJmUubmVlZHNSb29tLmxlbmd0aD9lLm5lZWRzUm9vbS5tYXAobz0+YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICAgIDxiPkdvZXMgd2l0aCBhIHN0YXk8L2I+CiAgICAgICAgICAgICA8c3Bhbj4ke3UoKG8uZXh0cmFzPz9bXSkuam9pbigiIGFuZCAiKSl9IGlzICR7dShvLmhvdGVsTmFtZSl9J3Mgc2VydmljZSBmb3IgaXRzIGd1ZXN0cywgc28gaXQgaXMgYm9va2VkIHdpdGggYSByb29tIHRoZXJlIC0gb3IgYWRkZWQgdG8gYSBib29raW5nIHlvdSBhbHJlYWR5IGhhdmUuPC9zcGFuPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7dShvLmhvdGVsSWQpfSI+Um9vbXMgYXQgJHt1KG8uaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPC9kaXY+YCk6Wyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siPlJlcXVlc3QgYm9va2luZzwvYnV0dG9uPjwvZGl2PicsYDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBSZXF1ZXN0aW5nIGEgYm9va2luZyBhc2tzICR7dShjdCl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLFRmKCldLFk/IiI6YDxkaXYgY2xhc3M9Im5vdGUiPkEgJHt1KGN0KX0gQ2lyY2xlIG1lbWJlcj8gPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj5TaWduIGluIGZvciB0aGUgbWVtYmVyIHJhdGU8L2J1dHRvbj4uPC9kaXY+JHtPbygpfWBdLmpvaW4oIiIpfSxMYz1be2lkOiJraW5nLWJlZCIsbGFiZWw6IktpbmcgYmVkIn0se2lkOiJ0d2luLWJlZHMiLGxhYmVsOiJUd2luIGJlZHMifSx7aWQ6ImhpZ2gtZmxvb3IiLGxhYmVsOiJIaWdoIGZsb29yIn0se2lkOiJsb3ctZmxvb3IiLGxhYmVsOiJMb3cgZmxvb3IifSx7aWQ6InF1aWV0LXJvb20iLGxhYmVsOiJRdWlldCByb29tIn0se2lkOiJjb25uZWN0aW5nLXJvb21zIixsYWJlbDoiQ29ubmVjdGluZyByb29tcyJ9LHtpZDoiZWFybHktY2hlY2staW4iLGxhYmVsOiJFYXJseSBjaGVjay1pbiJ9LHtpZDoibGF0ZS1hcnJpdmFsIixsYWJlbDoiTGF0ZSBhcnJpdmFsIn0se2lkOiJhY2Nlc3NpYmxlLXJvb20iLGxhYmVsOiJBY2Nlc3NpYmxlIHJvb20ifV0sWl89eyJraW5nLWJlZCI6InR3aW4tYmVkcyIsInR3aW4tYmVkcyI6ImtpbmctYmVkIiwiaGlnaC1mbG9vciI6Imxvdy1mbG9vciIsImxvdy1mbG9vciI6ImhpZ2gtZmxvb3IifTtsZXQgeGU9bnVsbDtjb25zdCBUZj0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0iZ3Vlc3QiJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+R3Vlc3QgbmFtZTxpbnB1dCBpZD0iZ25hbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgYm9va2luZyIgdmFsdWU9IiR7dSh4ZT8ubmFtZT8/IiIpfSI+PC9sYWJlbD4KICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJnbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBjb25maXJtYXRpb24iIHZhbHVlPSIke3UoeGU/LmVtYWlsPz8iIil9Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke0xjLm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7dSh0LmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoeGU/eGUucmVxdWVzdHM6WT8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7dSh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7dSh4ZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHt1KHhlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke3UoY3QpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7WT9gPGxhYmVsIGNsYXNzPSJyZW1lbWJlciI+PGlucHV0IGlkPSJncmVtZW1iZXIiIHR5cGU9ImNoZWNrYm94IiR7eGU/LnJlbWVtYmVyPyIgY2hlY2tlZCI6IiJ9PiBSZW1lbWJlciB0aGUgYmVkLCBmbG9vciBhbmQgcm9vbSByZXF1ZXN0cyBvbiBteSAke3UoWS5wcm9ncmFtbWU/PyJtZW1iZXJzaGlwIil9IGZvciBuZXh0IHRpbWU8L2xhYmVsPmA6IiJ9CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj5Ib2xkIHRoZXNlIHJvb21zPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4KICA8L2Rpdj5gLE5fPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke3UoKGUubWlzc2luZz8/W10pLmpvaW4oIiBhbmQgIil8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsVGYoITApLCc8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4nXS5qb2luKCIiKSxqXz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW3RlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt1KHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgICR7dC5uYW1lP2A8ZGl2IGNsYXNzPSJ3aGVyZSI+JHt1KHQubmFtZSl9PC9kaXY+YDonPGRpdiBjbGFzcz0id2hlcmUiPlNpZ25lZCBpbjwvZGl2Pid9CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7dSh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgJHt0eXBlb2YgdC5wb2ludHM9PSJudW1iZXIiP2A8ZGl2IGNsYXNzPSJ3aGVuIj4ke3UodC5wb2ludHMudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHt1KE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke3UodC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLCh0LnByZWZlcmVuY2VzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgPGI+U2F2ZWQgZm9yIHlvdXIgbmV4dCBzdGF5czwvYj4KICAgICAgICAgICA8c3Bhbj4ke3UodC5wcmVmZXJlbmNlcy5tYXAobj0+TGMuZmluZChvPT5vLmlkPT09bik/LmxhYmVsPz9uKS5qb2luKCIsICIpKX0gLSB0aWNrZWQgb24gdGhlIGJvb2tpbmcgZm9ybSwgYW5kIGFza2VkIGZvciBvbmx5IHdoZW4geW91IGJvb2sgd2l0aCB0aGVtLjwvc3Bhbj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZm9yZ2V0LXByZWZzIj5Gb3JnZXQgdGhlbTwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sTV89KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLE9vKCEwKV0uam9pbigiIiksT289KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxxXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RlZD8/W107cmV0dXJuIHQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCR7ZS5hY2Nlc3NpYmlsaXR5PyIgZmxhZyI6IiJ9Ij4KICAgIDxiPlJlcXVlc3RlZCwgbm90IGhlbGQ8L2I+CiAgICAke3QubWFwKG49PmA8c3Bhbj4ke3Uobil9PC9zcGFuPmApLmpvaW4oIiIpfQogIDwvZGl2PmA6IiJ9LEV1PWU9PlN0cmluZyhlLmhvbGRVbnRpbD8/IiIpLnNsaWNlKDAsMTYpLnJlcGxhY2UoIlQiLCIgIiksRF89ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmJvb2tpbmdzKSYmZS5ib29raW5ncy5sZW5ndGg/ZS5ib29raW5nczpbZS5ib29raW5nPz97fV0sbj10Lmxlbmd0aD4xLG89KHIscyxpKT0+W2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+Q29uZmlybWF0aW9uIGNvZGU8L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHt1KHIuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke3Uoci5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke3UoVmUoci5zdGF5KSl9IMK3ICR7dShyLmd1ZXN0Py5uYW1lPz8iIil9PC9kaXY+CiAgICAgICA8L2Rpdj5gLG4/YDxkaXYgY2xhc3M9Im5vdGUiPkhlbGQgdW50aWwgJHt1KEV1KHIpKX0gVVRDLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7dShzKX08L3NwYW4+PC9kaXY+YCxxXyhpKSxgPGRpdiBjbGFzcz0icm93cyI+JHsoci5xdW90ZT8ubGluZXM/P1tdKS5tYXAoVV8pLmpvaW4oIiIpfTwvZGl2PmAsbj9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke3Uoci5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke3Uoci5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCAke3Uoci5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpO3JldHVyblt0ZSgpLG4/YDxkaXYgY2xhc3M9Im5vdGUiPiR7dC5sZW5ndGh9IGJvb2tpbmdzLCBvbmUgZm9yIGVhY2ggc3RheS4gRWFjaCBob3RlbCBob2xkcyBpdHMgb3duIG5pZ2h0cyB1bmRlciBpdHMgb3duIGNvZGUsIGFuZCBlYWNoIGlzIGNoYW5nZWQgb3IgY2FuY2VsbGVkIG9uIGl0cyBvd24uPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCB0aGUgdGltZSB1bmRlciBlYWNoIGNvZGUuIjpgVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7dShFdSh0WzBdKSl9IFVUQy5gfSBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCwuLi50Lm1hcChyPT5uP28ocixTdHJpbmcoci50b3RhbD8/IiIpLHIpOm8ocixTdHJpbmcoZS50b3RhbD8/IiIpLGUpKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAke24/IiI6YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7dSh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHt1KHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPmB9CiAgICAgPC9kaXY+YF0uam9pbigiIil9LExfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj4ke3UoZS5kZXRhaWw/P2Uud2h5Pz8iVGhhdCBjb3VsZCBub3QgYmUgZG9uZS4iKX08L2Rpdj5gLFh0PjA/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIj5WaWV3IHRoZSB0cmlwPC9idXR0b24+PC9kaXY+JzoiIl0uam9pbigiIiksVV89ZT0+YAogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KGUudGl0bGUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3UoZS5raW5kPT09InJvb20iP1ZlKGUuc3RheSk6ZS5kZXRhaWw/PyIiKX08L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7dShlLnRvdGFsKX08L2Rpdj48L2Rpdj4KICA8L2Rpdj5gLEZfPXtyZXF1ZXN0ZWQ6Indhcm4iLGNvbmZpcm1lZDoiZ29vZCIsY2FuY2VsbGVkOiJiYWQiLGV4cGlyZWQ6ImJhZCJ9LEhfPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5MYy5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke3Uobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LEJfPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdLG49ZS5ub3RGb3VuZD9gPGRpdiBjbGFzcz0iZXJyIj4ke3UoZS50b29NYW55P2Uubm90Rm91bmRMaW5lOmBObyBib29raW5nIG1hdGNoZXMgJHtlLm5vdEZvdW5kfSB3aXRoIHRoYXQgZW1haWwuIEJvdGggaGF2ZSB0byBiZSBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLmApfTwvZGl2PmA6IiI7cmV0dXJuIGUubm90Rm91bmQmJnQubGVuZ3RoPT09MD9gJHtufQogICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5UcnkgYWdhaW48L2J1dHRvbj48L2Rpdj5gOnQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOlt0ZSgpLG4sYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KG8uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7dShvLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke3UoVmUoby5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke0hfKG8pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtGX1tTdHJpbmcoby5zdGF0dXMpXT8/IiJ9Ij4ke3Uoby5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHt1KG8ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke28uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG8uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7dShvLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHt1KG8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sT3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHt1KG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke3UoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke3UoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke3Uobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxBdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89ZS5mcm9tPz97fSxyPWUudG8scz0hIXImJihyLmNoZWNrSW4hPT1vLmNoZWNrSW58fHIuY2hlY2tPdXQhPT1vLmNoZWNrT3V0fHxOdW1iZXIoci5yb29tcykhPT1OdW1iZXIoby5yb29tcyl8fHIucm9vbU5hbWUhPT1vLnJvb21OYW1lKSxpPShhLGMsbCk9PmM/YDxkaXYgY2xhc3M9ImxlZyR7bD8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke3UoYSl9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHt1KGMuY2hlY2tJbil9IOKGkiAke3UoYy5jaGVja091dCl9IMK3ICR7dShjLm5pZ2h0cyl9ICR7TnVtYmVyKGMubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke3UoYy5yb29tTmFtZSl9JHtOdW1iZXIoYy5yb29tcyk+MT9gIMK3ICR7dShjLnJvb21zKX0gcm9vbXNgOiIifSDCtyAke3UoYy50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW3RlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDaGFuZ2VkIjoiQ2hhbmdpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHt1KG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlLmhvdGVsTmFtZT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHt1KGUuaG90ZWxOYW1lKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJsZWdzIj4ke2kodD8iV2FzIjoiTm93IixlLmZyb20scyl9JHtpKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHt1KGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7dShlLmFkZE9uLmZyb20pfSDihpIgJHt1KGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7dShlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke3UoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke3Uobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sdXM9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7dShlLnRpdGxlKX08L2g0PiR7dShlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHt1KG8udGl0bGUpfTwvaDQ+JHt1KG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHt1KHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHt1KHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KHQuaWQpfSI+QmFjayB0byAke3UodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sVl89ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7aW8oU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7dShyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7dShhbyhTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHt1KHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7dShyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke3Uoci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7dShyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7dShyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke3Uocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke3Uocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW3RlKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7dShWZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7dShlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHt1KHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke3UoaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHt1KHIubmFtZSl9OiAke3Uoci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHt1KGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LEpfPWU9Pntjb25zdCB0PWUuZGF5cz8/W107cmV0dXJuW3RlKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7dShlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UoVmUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7dShOdW1iZXIoZS5pblRyaXA/PzApK051bWJlcihlLmJvb2tlZD8/MCkpfS8ke3UoZS5wbGFubmVkKX08L2I+PHNwYW4+JHt1KGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKG4sbyk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bysxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHt1KG4ubGFiZWwpfSR7bi5kYXRlP2A8c21hbGw+IMK3ICR7dShTdHJpbmcobi5kYXRlKS5zbGljZSg1KSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtuLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7dShuLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAkeyhuLml0ZW1zPz9bXSkubWFwKHI9PmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIiR7ci5raW5kPT09ImhvdGVsIj9gIGRhdGEtaG90ZWw9IiR7dShyLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtyLmNoZWNrSW4/YCBkYXRhLWNpPSIke3Uoci5jaGVja0luKX0iIGRhdGEtY289IiR7dShyLmNoZWNrT3V0KX0iYDoiIn1gOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3UoW3IuZGV0YWlsLHIubmlnaHRzP051bWJlcihyLm5pZ2h0Pz8xKT4xP2BuaWdodCAke3IubmlnaHR9IG9mICR7ci5uaWdodHN9YDpgJHtyLm5pZ2h0c30gJHtyLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiIsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmJvb2tlZHx8ci5pblRyaXA/InllcyI6Im5vIn0iPiR7ci5ib29rZWQ/YEJvb2tlZCDCtyAke3Uoci5ib29rZWQpfWA6ci5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG49PmAke3Uobi5uYW1lKX06ICR7dShuLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxHZT0oZSx0PSExKT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2NvbnN0IG49dCYmZS52aWV3PT09Im1lbWJlciImJlk/ey4uLmUsbWVtYmVyOll9OmU7bi50b29sTmFtZXMmJihkZj1uLnRvb2xOYW1lcyksbi5icmFuZCYmKGN0PVN0cmluZyhuLmJyYW5kKSksbi5sb2dvVXJsJiYoY3M9U3RyaW5nKG4ubG9nb1VybCkpLHR5cGVvZiBuLmRlbW89PSJib29sZWFuIiYmKHBmPW4uZGVtbyksbi5kZW1vTm90ZSYmKGhmPVN0cmluZyhuLmRlbW9Ob3RlKSksdHlwZW9mIG4ucm9vbXNfd2FudGVkPT0ibnVtYmVyIj9RPW4ucm9vbXNfd2FudGVkOihuLnZpZXc9PT0iaG90ZWxzInx8bi52aWV3PT09ImRlc3RpbmF0aW9ucyJ8fG4udmlldz09PSJuby1ob3RlbHMiKSYmbi5zdGF5Py5jaGVja0luJiYhZHQmJihRPU1hdGgubWF4KDEsTnVtYmVyKG4uYXNrPy5yb29tcz8/MSl8fDEpKSx0fHwobi52aWV3PT09Im1lbWJlciImJm4ubWVtYmVyPy50aWVyPy5uYW1lP1k9bi5tZW1iZXI6bi5tZW1iZXI/LnRpZXI/Lm5hbWUmJihZPVk/LnByb2dyYW1tZT09PW4ubWVtYmVyLnByb2dyYW1tZSYmWT8udGllcj8ubmFtZT09PW4ubWVtYmVyLnRpZXIubmFtZT97Li4uWSwuLi5uLm1lbWJlcixwcmVmZXJlbmNlczpuLm1lbWJlci5wcmVmZXJlbmNlc306bi5tZW1iZXIpLChuLnZpZXc9PT0ic2lnbmVkLW91dCJ8fG4uc2lnbmVkSW49PT0hMSkmJihZPW51bGwpKSxuLnN0YXk/LmNoZWNrSW4mJiFKdCYmIWR0JiYoej17Y2hlY2tJbjpuLnN0YXkuY2hlY2tJbixjaGVja091dDpuLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOm4uc3RheS5ndWVzdHM/PzJ9KSwhRGMmJihuLnZpZXc9PT0idHJpcCJ8fG4udmlldz09PSJuZWVkcy1kYXRlcyIpJiYoeXQ9bi5saW5lcz8/W10pLChuLnZpZXc9PT0iYm9va2luZyJ8fG4udmlldz09PSJlbXB0eS10cmlwIikmJih5dD1bXSxYdD0wKSxXZT1TdHJpbmcobi52aWV3Pz8iIiksZmYoKTtjb25zdCBvPW1lKCJicmFuZCIpO2NzPyhvLnNyYz1jcyxvLmhpZGRlbj0hMSxtZSgidGl0bGUiKS5oaWRkZW49ITApOihvLmhpZGRlbj0hMCxtZSgidGl0bGUiKS5oaWRkZW49ITEsbWUoInRpdGxlIikudGV4dENvbnRlbnQ9Y3R8fCJIb3RlbHMiKSxtZSgic3ViIikudGV4dENvbnRlbnQ9R18obiksWV8oKSxRXygpO2NvbnN0IHI9e2hvdGVsczpQXyxkZXN0aW5hdGlvbnM6a18sIm5vLWhvdGVscyI6eF8saG90ZWw6eHUsIm5vLXJvb21zIjp4dSwiaG90ZWwtbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGF0IGhvdGVsIGlzIG5vdCBpbiB0aGlzIGNvbm5lY3Rvci48L2Rpdj4nLGV4dHJhczpPXyx0cmlwOlJfLCJuZWVkcy1kYXRlcyI6V18sYm9va2luZzpEXywibmVlZHMtZ3Vlc3QiOk5fLG1lbWJlcjpqXywibWVtYmVyLW5vdC1mb3VuZCI6TV8sInNpZ25lZC1vdXQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlNpZ25lZCBvdXQuIFJhdGVzIGFyZSB0aGUgcHVibGljIG9uZXMgYWdhaW4uPC9kaXY+PGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPjwvZGl2PicsImVtcHR5LXRyaXAiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRyaXAgeWV0LjwvZGl2PicsYm9va2luZ3M6Ql8sImNhbmNlbGxhdGlvbi1wcmV2aWV3IjpPdSxjYW5jZWxsZWQ6T3UsImNoYW5nZS1wcmV2aWV3IjpBdSxjaGFuZ2VkOkF1LCJib29raW5nLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZyBoZXJlIG1hdGNoZXMgdGhhdCBjb2RlLjwvZGl2PicsY29tcGFyaXNvbjpWXywibm90aGluZy10by1jb21wYXJlIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5Ob25lIG9mIHRob3NlIGFyZSBob3RlbHMgdGhpcyBjb25uZWN0b3Iga25vd3MuPC9kaXY+JyxpdGluZXJhcnk6Sl8sImVtcHR5LWl0aW5lcmFyeSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+QW4gaXRpbmVyYXJ5IG5lZWRzIGF0IGxlYXN0IG9uZSBkYXkuPC9kaXY+Jyxwb2xpY3k6dXMscG9saWNpZXM6dXMsInBvbGljeS1taXNzaW5nIjp1cyxlcnJvcjpMXywiZmluZC1ib29raW5nIjooKT0+W3RlKCksJzxkaXYgY2xhc3M9Im5vdGUiPkEgYm9va2luZyBtYWRlIGluIGFub3RoZXIgY29udmVyc2F0aW9uIGlzIGZvdW5kIHdpdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgaXQgd2FzIG1hZGUgd2l0aCAtIGJvdGgsIGFzIHRoZXkgYXJlIG9uIHRoZSBjb25maXJtYXRpb24uPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9ybSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICAgICAgIDxsYWJlbD5Db25maXJtYXRpb24gY29kZTxpbnB1dCBpZD0iZmNvZGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iU0wt4oCmIj48L2xhYmVsPgogICAgICAgICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJmbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIG9uZSBvbiB0aGUgYm9va2luZyI+PC9sYWJlbD4KICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibG9va3VwLWJvb2tpbmciPkZpbmQgaXQ8L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YF0uam9pbigiIiksIm5vLW1lbWJlciI6KCk9PmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9ib2R5IGlzIHNpZ25lZCBpbiwgc28gdGhlcmUgaXMgbm90aGluZyBzYXZlZCB0byBmb3JnZXQuPC9kaXY+JHtPbyghMCl9YCwibWVtYmVyLXNpZ24taW4iOigpPT5bdGUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+JyxPbyghMCldLmpvaW4oIiIpfTsoV2U9PT0iaG90ZWwifHxXZT09PSJuby1yb29tcyJ8fFdlPT09Im5lZWRzLWRhdGVzIikmJm4uaG90ZWw/LmlkPyhCdD1TdHJpbmcobi5ob3RlbC5pZCksbi5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5ucygwLCFlcyksMCkpOihCdD0iIixVYygpKSxWPW47Y29uc3Qgcz1yW1dlXTttZSgiY29udGVudCIpLmlubmVySFRNTD0ocz9zKG4pOmA8ZGl2IGNsYXNzPSJlcnIiPiR7dShuLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7bi5kZXRhaWw/YDxicj4ke3Uobi5kZXRhaWwpfWA6IiJ9PC9kaXY+YCkrS18obil9LEtfPWU9Pntjb25zdCB0PSEhamUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy5tZXNzYWdlLG49KGUuc3VnZ2VzdGlvbnM/P1tdKS5tYXAoKG8scik9Pm8/LmFzaz9gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7dShvLmxhYmVsKX08L2J1dHRvbj5gOm8/LnNheSYmdD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBzYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zdWdnZXN0PSIke3J9Ij4ke3Uoby5sYWJlbCl9IDxzbWFsbD7CtyBpbiB0aGUgY2hhdDwvc21hbGw+PC9idXR0b24+YDoiIikuam9pbigiIik7cmV0dXJuIG4/YDxkaXYgY2xhc3M9InN1Z2dlc3QiPiR7bn08L2Rpdj5gOiIifSxXXz1lPT5bdGUoKSxlLmhvdGVsP3pmKGUuaG90ZWwpOiIiLGA8ZGl2IGNsYXNzPSJlcnIiPiR7dShlLndoeT8/IldoaWNoIG5pZ2h0cz8gQSByb29tIG5lZWRzIGEgY2hlY2staW4gYW5kIGEgY2hlY2stb3V0IGRhdGUuIil9PC9kaXY+YCx2ZihTdHJpbmcoZS5ob3RlbD8uaWQ/PyIiKSxlLmhvdGVsPy50b2RheVRoZXJlKV0uam9pbigiIiksR189ZT0+ZS52aWV3PT09ImhvdGVscyI/YCR7ZS50b3RhbD8/MH0gJHtOdW1iZXIoZS50b3RhbCk9PT0xPyJob3RlbCI6ImhvdGVscyJ9YDplLnZpZXc9PT0iaG90ZWwifHxlLnZpZXc9PT0ibm8tcm9vbXMiP1ZlKGUuc3RheSk6ZS52aWV3PT09InRyaXAiPyhlLmxpbmVzPz9bXSkubGVuZ3RoP1N0cmluZyhlLnRvdGFsPz8iIik6IiI6ZS52aWV3PT09ImNvbXBhcmlzb24iP2AkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA6ZS52aWV3PT09Iml0aW5lcmFyeSI/TnVtYmVyKGUuYm9va2VkKT4wP2Ake2UuYm9va2VkfS8ke2UucGxhbm5lZH0gYm9va2VkYDpgJHtlLmluVHJpcH0vJHtlLnBsYW5uZWR9IGluIHRoZSB0cmlwYDplLnZpZXc9PT0iYm9va2luZ3MiP2Ake2UuY291bnQ/PzB9IGJvb2tpbmcke051bWJlcihlLmNvdW50KT09PTE/IiI6InMifWA6IiIsUV89KCk9Pntjb25zdCBlPW1lKCJtZW1iZXJjaGlwIik7WT8oZS5oaWRkZW49ITEsZS50ZXh0Q29udGVudD1gJHtZLnRpZXI/Lm5hbWU/PyJNZW1iZXIifSDCtyAke01hdGgucm91bmQoKFkudGllcj8uZGlzY291bnQ/PzApKjEwMCl9JSBvZmZgLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsIm1lbWJlciIpLGUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsW1kubmFtZSxZLnByb2dyYW1tZV0uZmlsdGVyKHQ9PnR5cGVvZiB0PT0ic3RyaW5nIiYmdCkuam9pbigiIMK3ICIpKSk6KGUuaGlkZGVuPVdlPT09Im1lbWJlci1ub3QtZm91bmQiLGUudGV4dENvbnRlbnQ9Ik1lbWJlciBzaWduIGluIixlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJhc2stc2lnbi1pbiIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKX0sWV89KCk9Pntjb25zdCBlPW1lKCJoZWFkdHJpcCIpLHQ9RGM/WHQ6WHR8fHl0Lmxlbmd0aDtlLmhpZGRlbj10PT09MHx8V2U9PT0idHJpcCIsbWUoImhlYWR0cmlwbiIpLnRleHRDb250ZW50PVN0cmluZyh0KX0sWF89KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3UiKTt6PXtjaGVja0luOmU/LnZhbHVlPz96LmNoZWNrSW4sY2hlY2tPdXQ6dD8udmFsdWU/P3ouY2hlY2tPdXQsZ3Vlc3RzOk51bWJlcihuPy52YWx1ZT8/ei5ndWVzdHMpfHwyfX0seW89KGU9e30pPT56LmNoZWNrSW4mJnouY2hlY2tPdXQ/e2NoZWNrSW46ei5jaGVja0luLGNoZWNrT3V0OnouY2hlY2tPdXQsZ3Vlc3RzOnouZ3Vlc3RzLC4uLmV9OmU7bGV0IFNzLEp0PSExO2NvbnN0IFVjPSgpPT57Y2xlYXJUaW1lb3V0KFNzKSxKdD0hMX0sbnM9KGU9MCx0PSExKT0+e0J0JiYoY2xlYXJUaW1lb3V0KFNzKSxKdD0hMCxTcz1zZXRUaW1lb3V0KCgpPT57aWYoIUJ0KXtKdD0hMTtyZXR1cm59aWYoTHQpe25zKDE1MCx0KTtyZXR1cm59SnQ9ITEscSgiZ2V0SG90ZWwiLHtob3RlbDpCdCxyb29tczpRLC4uLnlvKCl9LHQ/e25vdGU6Z199Ont9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxOPWU9PnttZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHt1KGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSxbZGF0YS1ib29raW5nLWV4dHJhc10sW2RhdGEtYm9va2luZy1leHRyYV0sW2RhdGEtc3VnZ2VzdF0sW2RhdGEtcGxhY2VdLFtkYXRhLXBsYWNlLWFsbF0sW2RhdGEtc29ydF0sW2RhdGEtbGlzdC1yb29tc10sW2RhdGEtZmlsdGVyXSxbZGF0YS1wYW5lbF0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKHcpKTtjb25zdCBJPVpfW25dO3cmJkkmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7SX0iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksSWYoKTtyZXR1cm59Y29uc3Qgbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1saXN0LXJvb21zIik7aWYobyE9PW51bGwpe1E9TWF0aC5taW4oenUsTWF0aC5tYXgoMSxRK051bWJlcihvKSkpO2NvbnN0IHc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxybiIpO3cmJih3LnRleHRDb250ZW50PVN0cmluZyhRKSksQW8oNDUwKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYociE9PW51bGwpe1hfKCksUT1NYXRoLm1pbih6dSxNYXRoLm1heCgxLFErTnVtYmVyKHIpKSk7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm4iKTt3JiYody50ZXh0Q29udGVudD1TdHJpbmcoUSkpO2NvbnN0IEk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO0kmJihJLnRleHRDb250ZW50PXRzKCkpLG5zKDQ1MCk7cmV0dXJufWNvbnN0IHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihzIT09bnVsbCl7Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixJPXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhZGQiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/UTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxhZT10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9OnlvKCk7cSgiYWRkVG9UcmlwIix7aG90ZWw6dyxyb29tOnMscm9vbXM6SSwuLi5hZX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihpIT09bnVsbCl7Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1kYXkiKTtxKCJhZGRUb1RyaXAiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixleHRyYTppLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLC4uLnc/e2RheTp3fTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZSIpO2lmKGEhPT1udWxsKXtjb25zdCB3PVY/LmFzaz8uc29ydCxJPVY/LnZpZXc9PT0iaG90ZWxzIj9WPy5hc2s/LnF1ZXJ5OnZvaWQgMDt6cygpO2NvbnN0IGFlPVY/LnZpZXc9PT0iZGVzdGluYXRpb25zInx8ISFWPy5zdGF5Py5jaGVja0luO3EoImxpc3RIb3RlbHMiLHsuLi5hP3tjaXR5OmF9Ont9LC4uLnc/e3NvcnQ6d306e30sLi4uYSYmST97cXVlcnk6SX06e30sLi4uVj8udmlldz09PSJob3RlbHMiP3ZvKFY/LmFzayk6e30sLi4uYWU/VnQoKTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCBjPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWZpbHRlciIpO2lmKGMhPT1udWxsKXtjb25zdCB3PVY/LmFzaz8/e30sST12byh3KTtpZihjLnN0YXJ0c1dpdGgoImJyYW5kOiIpKXtjb25zdCBjZT1jLnNsaWNlKDYpO0kuYnJhbmQ9SS5icmFuZD09PWNlP3ZvaWQgMDpjZX1lbHNlIGlmKGMuc3RhcnRzV2l0aCgiZmFjaWxpdHk6Iikpe2NvbnN0IGNlPWMuc2xpY2UoOSksUGU9SS5mYWNpbGl0aWVzPz9bXTtJLmZhY2lsaXRpZXM9UGUuaW5jbHVkZXMoY2UpP1BlLmZpbHRlcihzdD0+c3QhPT1jZSk6Wy4uLlBlLGNlXX1lbHNlKGM9PT0iZnJlZUNhbmNlbGxhdGlvbiJ8fGM9PT0iYnJlYWtmYXN0IikmJihJW2NdPSFJW2NdKTtjb25zdCBhZT12byhJKTtxKCJsaXN0SG90ZWxzIix7Li4uUHUodyksLi4uYWV9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGZpbHRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc29ydCIpO2lmKGwhPT1udWxsKXtUZT13Zjtjb25zdHtzb3J0OncsLi4uSX09Vj8uYXNrPz97fTtxKCJsaXN0SG90ZWxzIix7Li4uSSwuLi5sIT09Imdyb3VwIj97c29ydDpsfTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgcmVvcmRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UtYWxsIik7aWYoZCE9PW51bGwpe3EoImxpc3RIb3RlbHMiLHtjaXR5OmQsYWxsOiEwLC4uLlZ0KCl9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgbT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKG0hPT1udWxsKXtxKCJsaXN0RXh0cmFzIix7Ym9va2luZzptfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgYj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYoYiE9PW51bGwpe3EoInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6YixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCB2PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHYhPT1udWxsKXtxKCJsaXN0RXh0cmFzIix7aG90ZWw6diwuLi55bygpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgXz10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZihfIT09bnVsbCl7cSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzpffSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZihrIT09bnVsbCl7cSgicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6a30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0ICQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZigkIT09bnVsbCl7cSgiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6JCxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBaPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoWiE9PW51bGwpe2NvbnN0IHc9Vj8udG8/P3t9LEk9Vj8uZnJvbT8/e30sYWU9Vj8uYWRkT24sY2U9dy5jaGVja0luJiYody5jaGVja0luIT09SS5jaGVja0lufHx3LmNoZWNrT3V0IT09SS5jaGVja091dCk7cSgiY2hhbmdlQm9va2luZyIse2Jvb2tpbmc6Wixjb25maXJtZWQ6ITAsLi4uY2U/e2NoZWNrSW46dy5jaGVja0luLGNoZWNrT3V0OncuY2hlY2tPdXR9Ont9LC4uLmFlPy5pZD97ZXh0cmE6YWUuaWQscXVhbnRpdHk6TnVtYmVyKGFlLnRvKX06e30sLi4udy5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKHcucm9vbXMpIT09TnVtYmVyKEkucm9vbXMpP3tyb29tczpOdW1iZXIody5yb29tcyl9Ont9LC4uLncucm9vbU5hbWUmJncucm9vbU5hbWUhPT1JLnJvb21OYW1lP3tyb29tOncucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgVD10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZihUPT09ImJhY2siKXtSdSgpO3JldHVybn1jb25zdCBLPVQ9PT0iYm9va2luZ3MiPyJib29raW5ncyI6dC5oYXNBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/YGhvdGVsOiR7dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKX1gOiIiO2lmKEsmJnBlLmxlbmd0aCYmWXQocGUuYXQoLTEpPy5wYXlsb2FkKT09PUspe1J1KCk7cmV0dXJufWlmKFQ9PT0ibW9yZS1wbGFjZXMiKXtmb3IoY29uc3QgdyBvZih0LmNsb3Nlc3QoIi5wbGFjZXMiKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jaGlwLnBsYWNlW2hpZGRlbl0iKSl3LmhpZGRlbj0hMTt0LnJlbW92ZSgpO3JldHVybn1jb25zdCBuZT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpO2lmKG5lIT09bnVsbCl7VGU9VGU9PT1uZT8iIjpuZTtmb3IoY29uc3QgdyBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbC1ib2R5XSIpKXcuaGlkZGVuPXcuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsLWJvZHkiKSE9PVRlO2Zvcihjb25zdCB3IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsXSIpKXcuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcody5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKT09PVRlKSk7cmV0dXJufWlmKFQ9PT0iY2xlYXItZmlsdGVycyIpe3EoImxpc3RIb3RlbHMiLFB1KFY/LmFzaykpLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2xlYXIgdGhlIGZpbHRlcnMuIikpO3JldHVybn1pZihUPT09ImFsbC1ob3RlbHMiKXt6cygpLHEoImxpc3RIb3RlbHMiLHthbGw6ITAsLi4uVnQoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoVD09PSJwcmljZS1saXN0Iil7QW8oMCk7cmV0dXJufWlmKFQ9PT0iZmluZC1ib29raW5nIil7Y29uc3Qgdz17dmlldzoiZmluZC1ib29raW5nIn07Ym8odyksR2UodyksdXQoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8uZm9jdXMoKTtyZXR1cm59aWYoVD09PSJsb29rdXAtYm9va2luZyIpe2NvbnN0IHc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LnZhbHVlLnRyaW0oKT8/IiIsST1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm1haWwiKT8udmFsdWUudHJpbSgpPz8iIjtpZighd3x8IUkuaW5jbHVkZXMoIkAiKSl7TigiQm90aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCB0aGUgYm9va2luZyB3YXMgbWFkZSB3aXRoLCBwbGVhc2UuIik7cmV0dXJufXEoImxpc3RCb29raW5ncyIse2Jvb2tpbmc6dyxlbWFpbDpJfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb29rIHRoYXQgdXAuIikpO3JldHVybn1pZihUPT09ImZpbmQiKXtQZigpO3JldHVybn1pZihUPT09Im1vcmUtaG90ZWxzIil7Y29uc3Qgdz1WO2lmKCF3fHx3LnZpZXchPT0iaG90ZWxzIilyZXR1cm47cSgibGlzdEhvdGVscyIsey4uLncuYXNrPz97fSxvZmZzZXQ6TnVtYmVyKHcub2Zmc2V0Pz8wKSsody5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MjB9LHtmb2xkOkk9Pkk/LnZpZXc9PT0iaG90ZWxzIj97Li4uSSxob3RlbHM6Wy4uLncuaG90ZWxzPz9bXSwuLi5JLmhvdGVscz8/W11dLHNob3duOih3LmhvdGVscz8/W10pLmxlbmd0aCsoSS5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0Ok51bWJlcih3Lm9mZnNldD8/MCkscGxhY2VzOncucGxhY2VzLC4uLncud2lkZW5lZD97d2lkZW5lZDp3LndpZGVuZWR9Ont9fTpJfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYoVD09PSJob21lIil7cSgibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoKFQ9PT0ibWVtYmVyInx8VD09PSJmaW5kLWJvb2tpbmcifHxUPT09ImFzay1zaWduLWluIikmJkx0KXJldHVybjtpZihUPT09Im1lbWJlciIpe2lmKCFZKXJldHVybjtjb25zdCB3PXt2aWV3OiJtZW1iZXIiLG1lbWJlcjpZfTtibyh3KSxHZSh3KSx1dCgpO3JldHVybn1pZihUPT09ImFzay1zaWduLWluIil7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2lnbmluIik7aWYodyl3LmhpZGRlbj0hMTtlbHNle2NvbnN0IEk9e3ZpZXc6Im1lbWJlci1zaWduLWluIn07Ym8oSSksR2UoSSksdXQoKX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZihUPT09InNpZ24taW4iKXtjb25zdCB3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsST1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCF3fHwhSSl7TigiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufXEoInNpZ25JbiIse251bWJlcjp3LHN1cm5hbWU6SX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKFQ9PT0iZm9yZ2V0LXByZWZzIil7cSgiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgVz10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYoVyE9PW51bGwpe2NvbnN0IHc9KFY/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKFcpXTt3Py5hc2s/LnRvb2w/cShTdHJpbmcody5hc2sudG9vbCksdy5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6dz8uc2F5JiZqZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHcuc2F5KX1dfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZihUPT09InNpZ24tb3V0Iil7WT1udWxsLHEoInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoVD09PSJhc2stYm9vayIpe2NvbnN0IHc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7dyYmKHcuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoVD09PSJib29rIil7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIixJPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLGFlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiLGNlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndGltZSIpPy52YWx1ZS50cmltKCk/PyIiLFBlPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcChvcz0+b3MuZGF0YXNldC5hc2s/PyIiKSxzdD0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZih4ZT17bmFtZTp3LGVtYWlsOkksbm90ZXM6YWUsYXJyaXZpbmdBdDpjZSxyZXF1ZXN0czpQZSxyZW1lbWJlcjpzdH0sIXd8fCFJLmluY2x1ZGVzKCJAIikpe04odz8nVGhhdCBlbWFpbCBoYXMgbm8gIkAiIGluIGl0IC0gdGhlIGNvbmZpcm1hdGlvbiBuZWVkcyBhbiBhZGRyZXNzIGl0IGNhbiByZWFjaC4nOiJUaGUgYm9va2luZyBuZWVkcyBhIG5hbWUgYW5kIGFuIGVtYWlsIHRvIHNlbmQgdGhlIGNvbmZpcm1hdGlvbiB0by4iKTtyZXR1cm59cSgicmVxdWVzdEJvb2tpbmciLHtuYW1lOncsZW1haWw6SSwuLi5hZT97bm90ZXM6YWV9Ont9LC4uLmNlP3thcnJpdmluZ0F0OmNlfTp7fSwuLi5QZS5sZW5ndGg/e3JlcXVlc3RzOlBlfTp7fSwuLi5zdD97cmVtZW1iZXJSZXF1ZXN0czohMH06e319KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGFzayBmb3IgdGhvc2Ugcm9vbXMuIikpO3JldHVybn1pZihUPT09ImJvb2tpbmdzIil7cSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZihUPT09InRyaXAiKXtxKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IEg9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihIKXtjb25zdCB3PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIiksST10LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpO3cmJkkmJih6LmNoZWNrSW49dyx6LmNoZWNrT3V0PUkpLHEoImdldEhvdGVsIix7aG90ZWw6SCwuLi55bygpLC4uLnouY2hlY2tJbiYmUT4xP3tyb29tczpRfTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtjb25zdCBJZj0oKT0+e2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKSlyZXR1cm47Y29uc3QgZT10PT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KT8udmFsdWU/PyIiO3hlPXtuYW1lOmUoImduYW1lIiksZW1haWw6ZSgiZ21haWwiKSxub3RlczplKCJnbm90ZSIpLGFycml2aW5nQXQ6ZSgiZ3RpbWUiKSxyZXF1ZXN0czpbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAodD0+dC5kYXRhc2V0LmFzaz8/IiIpLHJlbWVtYmVyOiEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkfX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5pZD8/IiI7WyJnbmFtZSIsImdtYWlsIiwiZ25vdGUiLCJndGltZSIsImdyZW1lbWJlciJdLmluY2x1ZGVzKHQpJiZJZigpfSk7Y29uc3QgUnU9KCk9Pntmb3IoO3BlLmF0KC0xKT8ucGF5bG9hZD8udmlldz09PSJtZW1iZXIiJiYhWTspcGU9cGUuc2xpY2UoMCwtMSk7Y29uc3QgZT1wZS5hdCgtMSk7aWYoIWV8fEx0KXtmZigpO3JldHVybn1wZT1wZS5zbGljZSgwLC0xKSxDbys9MSxVYygpLHhmKCk7Y29uc3QgdD1lLnZlcnNpb249PT14bz92b2lkIDA6bF8oZS5wYXlsb2FkKTt0PyhWPWUucGF5bG9hZCxxKHQua2V5LHQuYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT5HZShlLnBheWxvYWQsITApKS5maW5hbGx5KHV0KSk6KEdlKGUucGF5bG9hZCwhMCksdXQoKSl9LFBmPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2hlcmUiKT8udmFsdWUudHJpbSgpPz8iIjtpZighZSl7TigiV2hlcmUgdG8/IEEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwuIik7cmV0dXJufXpzKCk7Y29uc3Qgbj0oVj8ucmVnaW9ucz8/W10pLmZsYXRNYXAobz0+KG8uY291bnRyaWVzPz9bXSkuZmxhdE1hcChyPT5bci5uYW1lLC4uLihyLmNpdGllcz8/W10pLm1hcChzPT5zLm5hbWUpXSkpLmZpbmQobz0+by50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpKTtxKCJsaXN0SG90ZWxzIix7Li4ubj97Y2l0eTpufTp7cXVlcnk6ZX0sLi4uVnQoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgc2VhcmNoIGp1c3Qgbm93LiIpKX0senM9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY28iKTtlPy52YWx1ZSYmKHouY2hlY2tJbj1lLnZhbHVlKSx0Py52YWx1ZSYmKHouY2hlY2tPdXQ9dC52YWx1ZSksZT8udmFsdWUmJihlcz0hMCl9O2xldCBUcyxkdD0hMTtjb25zdCB4Zj0oKT0+e2NsZWFyVGltZW91dChUcyksZHQ9ITF9LGVrPWU9PmU/LnZpZXc9PT0iaG90ZWxzInx8ZT8udmlldz09PSJuby1ob3RlbHMiJiYhIWU/LmFzayxBbz0oZT0wKT0+e2NsZWFyVGltZW91dChUcyksZHQ9ITAsVHM9c2V0VGltZW91dCgoKT0+e2lmKCFlayhWKSl7ZHQ9ITE7cmV0dXJufWlmKEx0KXtBbygxNTApO3JldHVybn1kdD0hMSxxKCJsaXN0SG90ZWxzIix7Li4uJF8oVj8uYXNrKSwuLi5WdCgpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBwcmljZSB0aG9zZSBuaWdodHMuIikpfSxlKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZT0+e2lmKGUudGFyZ2V0Py5pZD09PSJ3aGVyZSImJmUua2V5PT09IkVudGVyIiYmIWUuaXNDb21wb3Npbmcpe2UucHJldmVudERlZmF1bHQoKSxQZigpO3JldHVybn1jb25zdCB0PWUudGFyZ2V0OyF0fHx0LmdldEF0dHJpYnV0ZSgicm9sZSIpIT09ImJ1dHRvbiJ8fGUua2V5IT09IkVudGVyIiYmZS5rZXkhPT0iICJ8fChlLnByZXZlbnREZWZhdWx0KCksdC5jbGljaygpKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ7dD8udHlwZT09PSJkYXRlIiYmKGVzPSEwKTtjb25zdCBvPXtkY2k6WyJkY2kiLCJkY28iXSxkY286WyJkY2kiLCJkY28iXSxsY2k6WyJsY2kiLCJsY28iXSxsY286WyJsY2kiLCJsY28iXX1bdD8uaWQ/PyIiXTtpZihvKXtjb25zdCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9bMF0pLGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1sxXSk7aWYoIWF8fCFjKXJldHVybjtpZih0LmlkPT09b1swXSYmYS52YWx1ZSl7Y29uc3QgbD1GZShhLnZhbHVlLDEpO2MubWluPWwsKCFjLnZhbHVlfHxjLnZhbHVlPD1hLnZhbHVlKSYmKGMudmFsdWU9bCl9ei5jaGVja0luPWEudmFsdWV8fHouY2hlY2tJbix6LmNoZWNrT3V0PWMudmFsdWV8fHouY2hlY2tPdXQsb1swXT09PSJsY2kiJiZBbygzMDApO3JldHVybn1pZih0Py5pZCE9PSJjaSImJnQ/LmlkIT09ImNvIilyZXR1cm47Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSxzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpO2lmKCFyfHwhcylyZXR1cm47aWYodC5pZD09PSJjaSImJnIudmFsdWUpe2NvbnN0IGE9RmUoci52YWx1ZSwxKTtzLm1pbj1hLCghcy52YWx1ZXx8cy52YWx1ZTw9ci52YWx1ZSkmJihzLnZhbHVlPWEpfXouY2hlY2tJbj1yLnZhbHVlfHx6LmNoZWNrSW4sei5jaGVja091dD1zLnZhbHVlfHx6LmNoZWNrT3V0O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO2kmJihpLnRleHRDb250ZW50PXRzKCkpLG5zKCl9KTtjb25zdCBDZj0oZSx0KT0+e3RyeXttZih0KTtjb25zdCBuPWU/SlNPTi5zdHJpbmdpZnkoZSk6IiI7aWYobiYmbj09PWdmJiZKU09OLnN0cmluZ2lmeShWKT09PWJmKXJldHVybjtlPy5zdGF5Py5jaGVja0luJiYoZXM9ITApLHBlPVtdLENvKz0xLFVjKCkseGYoKSxUZT13ZixHZShlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbiksbWUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O2plLm9udG9vbHJlc3VsdD1lPT5DZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7amUub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+dWYoZSxsZik7amUuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPWplLmdldEhvc3RDb250ZXh0KCk7dWYoZSxsZik7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZDZih0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57bWUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVsLC5zdGF5IC5ndWVzdHN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS5mbGV4LWRhdGVze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjJweDtzY3JvbGxiYXItd2lkdGg6dGhpbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uZmR7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7bWluLXdpZHRoOjc4cHg7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udDppbmhlcml0O3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcn0uZmQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmZkLWRheXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW07Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6bm93cmFwfS5mZC1wcmljZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjY1MDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5mZC5vbntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtjdXJzb3I6ZGVmYXVsdH0uZmQub24gLmZkLWRheXtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO29wYWNpdHk6Ljg1fS5mZC5iZXN0e2JvcmRlci1jb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5mZC5iZXN0IC5mZC1wcmljZSwuZmQuYmVzdCAuZmQtZGF5e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmZkLm91dCAuZmQtcHJpY2V7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC13ZWlnaHQ6NTAwfS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5sZWdze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ubGVne2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6OXB4IDExcHh9LmxlZy53YXN7b3BhY2l0eTouNzJ9LmxlZy53YXMgLmxlZ3Z7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ubGVna3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5sZWd2e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY0MDttYXJnaW4tdG9wOjJweH0ubGVnbXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6MnB4fS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS53YXJubm90ZXtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjlweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS50aWxlLm92ZXJ7b3BhY2l0eTouODJ9LmFza2VkLWxpbmV7Zm9udC1zdHlsZTppdGFsaWN9LmFza2Vke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5hc2tlZCBie2ZvbnQtd2VpZ2h0OjcyMDtjb2xvcjp2YXIoLS1mZyl9LmFza2VkLmZsYWd7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0td2Fybil9LmFza2VkLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX0uYXNrc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmFza3MtdHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwLmFza3tjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweH0uY2hpcC5hc2tbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MX0uY21wLWhlYWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZzoxMHB4IDExcHggMTJweH0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fS5zdWdnZXN0e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21hcmdpbi10b3A6MTRweH0uc3VnZ2VzdCAuY2hpcHtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHggMTFweDtjb2xvcjp2YXIoLS1mZyl9LnN1Z2dlc3QgLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LnN1Z2dlc3QgLmNoaXA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZm9ybSBsYWJlbC5yZW1lbWJlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZvbnQtd2VpZ2h0OjQwMDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MH0uZm9ybSBsYWJlbC5yZW1lbWJlciBpbnB1dHttYXJnaW46MnB4IDAgMH0ucGxhY2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwLnBsYWNle2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweCAxMHB4O2NvbG9yOnZhcigtLWZnKX0uY2hpcC5wbGFjZSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNoaXAucGxhY2U6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmNoaXAucGxhY2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uc3VnZ2VzdCAuY2hpcC5zYXkgc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZpbmRlcntkaXNwbGF5OmZsZXg7Z2FwOjhweH0uZmluZGVyIGlucHV0e2ZsZXg6MTttaW4td2lkdGg6MDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo5cHggMTJweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyl9LmZpbmRlciBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5yZWdpb257ZGlzcGxheTpncmlkO2dhcDoxMHB4fS5jb3VudHJ5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6NnB4fS5jb3VudHJ5bmFtZSBzbWFsbHtmb250LXdlaWdodDo1MDA7bGV0dGVyLXNwYWNpbmc6MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3R7ZGlzcGxheTpncmlkO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZGVzdDpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MH0uZGVzdC1jb3VudHJ5e2p1c3RpZnktc2VsZjpzdGFydDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246bGVmdH0uZGVzdC1jb3VudHJ5IHNtYWxse2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZGVzdC1jb3VudHJ5IC5ue2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdC1jb3VudHJ5OmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmRlc3QtY291bnRyeTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5maW5kZXIgLmdve2ZsZXg6bm9uZTtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtc2l6ZToxM3B4fS5zb3J0cy1re2FsaWduLXNlbGY6Y2VudGVyO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXJpZ2h0OjJweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0uc2VhcmNoe2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc2VhcmNoIC5zdGF5e3BhZGRpbmc6MDtiYWNrZ3JvdW5kOm5vbmV9LnNlYXJjaCAud2hlcmV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnNlYXJjaCAud2hlcmUgaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxMXB4fS5zZWFyY2ggLndoZXJlIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnNlYXJjaCAuc3RheSAuZ297cGFkZGluZzo5cHggMTRweDtmb250LXNpemU6MTNweH0udC10YWdze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4O21hcmdpbi10b3A6NHB4fS50LWZyb20udC1ub25le2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweH0uc3RheSAuZ28ucXVpZXR7cGFkZGluZzo4cHggMTJweDtmb250LXNpemU6MTIuNXB4fS5maWx0ZXItcGFuZWx7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5mZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS50LWZyb20gLnQtc3Vie2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxcHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV0gc21hbGx7Y29sb3I6aW5oZXJpdH0uY2hpcC50b29se2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC50b29sW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+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 = '057c736c5f24cab5ffdc2d7f6884cfa8d0566c618d5265b1d7d42a01041b796f';
7
+ export const HOTEL_CARD_SOURCE_SHA = 'd1634b9b47a5400ada333b3b8b7bfd94cfbd5a866529035e1f0e8b21ed34ab6f';
8
8
  //# sourceMappingURL=card.generated.js.map