@curless/hotel-storefront 0.23.1 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -11
- package/dist/__tests__/__fixtures__/huazhu-fake.d.ts +54 -0
- package/dist/__tests__/__fixtures__/huazhu-fake.d.ts.map +1 -0
- package/dist/__tests__/__fixtures__/huazhu-fake.js +340 -0
- package/dist/__tests__/__fixtures__/huazhu-fake.js.map +1 -0
- package/dist/__tests__/huazhu-backend.test.d.ts +2 -0
- package/dist/__tests__/huazhu-backend.test.d.ts.map +1 -0
- package/dist/__tests__/huazhu-backend.test.js +434 -0
- package/dist/__tests__/huazhu-backend.test.js.map +1 -0
- package/dist/__tests__/huazhu-cancel-policy.test.d.ts +2 -0
- package/dist/__tests__/huazhu-cancel-policy.test.d.ts.map +1 -0
- package/dist/__tests__/huazhu-cancel-policy.test.js +82 -0
- package/dist/__tests__/huazhu-cancel-policy.test.js.map +1 -0
- package/dist/__tests__/huazhu-sellable.test.d.ts +2 -0
- package/dist/__tests__/huazhu-sellable.test.d.ts.map +1 -0
- package/dist/__tests__/huazhu-sellable.test.js +192 -0
- package/dist/__tests__/huazhu-sellable.test.js.map +1 -0
- package/dist/__tests__/server.test.js +129 -4
- package/dist/__tests__/server.test.js.map +1 -1
- package/dist/__tests__/tool-descriptions.test.js +57 -4
- package/dist/__tests__/tool-descriptions.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +2 -0
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/backend.d.ts +27 -0
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +7 -0
- package/dist/backend.js.map +1 -1
- package/dist/card.generated.d.ts +1 -1
- package/dist/card.generated.js +2 -2
- package/dist/card.generated.js.map +1 -1
- package/dist/config.d.ts +52 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/facilities.d.ts.map +1 -1
- package/dist/facilities.js +7 -5
- package/dist/facilities.js.map +1 -1
- package/dist/huazhu/backend.d.ts +40 -0
- package/dist/huazhu/backend.d.ts.map +1 -0
- package/dist/huazhu/backend.js +1318 -0
- package/dist/huazhu/backend.js.map +1 -0
- package/dist/huazhu/bookings.d.ts +81 -0
- package/dist/huazhu/bookings.d.ts.map +1 -0
- package/dist/huazhu/bookings.js +189 -0
- package/dist/huazhu/bookings.js.map +1 -0
- package/dist/huazhu/cancel-policy.d.ts +69 -0
- package/dist/huazhu/cancel-policy.d.ts.map +1 -0
- package/dist/huazhu/cancel-policy.js +201 -0
- package/dist/huazhu/cancel-policy.js.map +1 -0
- package/dist/huazhu/catalog.d.ts +75 -0
- package/dist/huazhu/catalog.d.ts.map +1 -0
- package/dist/huazhu/catalog.js +251 -0
- package/dist/huazhu/catalog.js.map +1 -0
- package/dist/huazhu/check.d.ts +5 -0
- package/dist/huazhu/check.d.ts.map +1 -0
- package/dist/huazhu/check.js +170 -0
- package/dist/huazhu/check.js.map +1 -0
- package/dist/huazhu/client.d.ts +100 -0
- package/dist/huazhu/client.d.ts.map +1 -0
- package/dist/huazhu/client.js +232 -0
- package/dist/huazhu/client.js.map +1 -0
- package/dist/huazhu/sellable.d.ts +81 -0
- package/dist/huazhu/sellable.d.ts.map +1 -0
- package/dist/huazhu/sellable.js +219 -0
- package/dist/huazhu/sellable.js.map +1 -0
- package/dist/huazhu/wire.d.ts +389 -0
- package/dist/huazhu/wire.d.ts.map +1 -0
- package/dist/huazhu/wire.js +72 -0
- package/dist/huazhu/wire.js.map +1 -0
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/legal.d.ts +4 -3
- package/dist/legal.d.ts.map +1 -1
- package/dist/legal.js +33 -18
- package/dist/legal.js.map +1 -1
- package/dist/lib.d.ts +8 -3
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +8 -1
- package/dist/lib.js.map +1 -1
- package/dist/server.d.ts +20 -8
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +132 -28
- package/dist/server.js.map +1 -1
- package/dist/surface.d.ts +2 -1
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +37 -10
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +33 -20
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +130 -11
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +21 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/card.generated.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// The hotel booking MCP App card - a single self-contained HTML (Vite +
|
|
3
3
|
// vite-plugin-singlefile, with the MCP Apps SDK bundled), base64-embedded so it
|
|
4
4
|
// is bundler-safe. Regenerate after changing the widget UI.
|
|
5
|
-
export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgVWY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLEZmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxHYz17fSxIZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9RmYoZCxvKSxkIGluIEdjKXJldHVybjtHY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1pLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCAkPWlbd107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOlVmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBCZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBWZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBNbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIEpmKGUpe31mdW5jdGlvbiBLZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIFdmKGUpe31mdW5jdGlvbiBtcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBncyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+UnMobikpLmpvaW4odCl9ZnVuY3Rpb24gJG8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIEdme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gYW4oZSl7cmV0dXJuIG5ldyBHZihlKX1mdW5jdGlvbiBBcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBVZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gRnUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgUWM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gSHUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1RYylyZXR1cm4gbz09PXZvaWQgMCYmKG89UWMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFFmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gc3QoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBxbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBSZShlKXtyZXR1cm4gcW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gQnUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBzdCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBWdShlLHQsbil7dCBpbiBlP3N0KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gZXQoZSx0LG4sbyl7Y29uc3Qgcj1SZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD9CdShlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTpWdShlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiBZZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/QnUoZSxuLCgpPT50W25dKTpWdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBYZihlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gZW0oZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gdG0oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIG5tKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gSnUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIEt1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgT3M9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IFd1PWFuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gSGUoZSl7aWYoaHQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKGh0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gRG8oZSl7cmV0dXJuIEhlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gb20oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3Qgcm09ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LFNvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksR3U9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBRKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBzbShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBScyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBRdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IFl1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxYdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gZWwoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gZXQocyxlLExvKGUsdCkpLFEoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBMbyhlLHQpe2NvbnN0IG49UmUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiB0bChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoTG8oZSx0KSksYT17fTtyZXR1cm4gZXQoYSxlLFJlZmxlY3Qub3duS2V5cyhSZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLFEoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBubChlLHQpe2lmKCFIZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1SZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gUShlLHVlKGUuX3pvZC5kZWYse3NoYXBlOm9sKGUsdCl9KSl9ZnVuY3Rpb24gb2woZSx0KXtjb25zdCBuPXt9O3JldHVybiBldChuLGUsUmVmbGVjdC5vd25LZXlzKFJlKGUpKSksWWYobix0KSxufWZ1bmN0aW9uIHJsKGUsdCl7aWYoIUhlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBRKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6b2woZSx0KX0pKX1mdW5jdGlvbiBzbChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtldChuLGUsUmVmbGVjdC5vd25LZXlzKFJlKGUpKSksZXQobix0LFJlZmxlY3Qub3duS2V5cyhSZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBRKGUsbyl9ZnVuY3Rpb24gYnMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KExvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiBldCh1LHQsUmVmbGVjdC5vd25LZXlzKFJlKHQpKSxlJiYoKGwsZCk9PmkmJiFpLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiBpbChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoTG8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIGV0KHIsdCxSZWZsZWN0Lm93bktleXMoUmUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGZlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYWwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIHV0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIHZzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBTZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOnV0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz91dChzPy4oZSkpPz91dCh0Py5lcnJvcj8uKGUpKT8/dXQobi5jdXN0b21FcnJvcj8uKGUpKT8/dXQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGlbdV09ZVt1XSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGltPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIEZvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWltLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIGNsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gZnQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBhbShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gdWwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIGxsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gY20oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gdWwodCtuKX1mdW5jdGlvbiB1bShlKXtyZXR1cm4gbGwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGxtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBkbShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBwbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIGRsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6aG0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBOZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBCbyhlLHQsbil7cmV0dXJuIE5lKGUsdCxuLCExKX1mdW5jdGlvbiBjbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gTmUodGhpcyxuLG8odGhpcykpfSxzZXQocil7TmUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGhtKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpOZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe05lKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBmbShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGNzLERlPSExO2NvbnN0IG1tPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7RGU9ITB9fTtmdW5jdGlvbiBPKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmY3MhPT1lLl96b2Qpe2NzPXZvaWQgMDtyZXR1cm59Y3M9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LG1tKTtjb25zdCByPURlO0RlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIERlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksRGU9RGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxEZT1EZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gcGwoZSx0LG4sbyl7Y29uc3Qgcj1mbShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IGhsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gWnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtobF09ITAsdH1jb25zdCBOcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6WHUsQ09OU1RBTlRfQ0FUQ0g6aGwsQ2xhc3M6cG0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6WXUsYWJvcnRlZDpmZSxhbGxvd3NFdmFsOld1LGFzc2VydDpXZixhc3NlcnRFcXVhbDpCZixhc3NlcnRJczpKZixhc3NlcnROZXZlcjpLZixhc3NlcnROb3RFcXVhbDpWZixhc3NpZ25Qcm9wOnN0LGF0dGFjaFNjaGVtYTp2cyxiYXNlNjRUb1VpbnQ4QXJyYXk6dWwsYmFzZTY0dXJsVG9VaW50OEFycmF5OmNtLGNhY2hlZDphbixjYXB0dXJlU3RhY2tUcmFjZTpPcyxjbGVhbkVudW06YW0sY2xlYW5SZWdleDpVZSxjbG9uZTpRLGNsb25lRGVmOlhmLGNvZGVQb2ludExlbmd0aDpGbyxjb25zdGFudENhdGNoOlpzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6c20sZGVmaW5lTGF6eTpIdSxkZWZpbmVMYXp5SW50ZXJuYWw6TyxkZXJpdmVkOmNuLGVzYzpKdSxlc2NhcGVSZWdleDpaZSxleHBsaWNpdGx5QWJvcnRlZDphbCxleHRlbmQ6bmwsZmluYWxpemVJc3N1ZTpTZSxmbG9hdFNhZmVSZW1haW5kZXI6RnUsZ2V0RWxlbWVudEF0UGF0aDplbSxnZXRFbnVtVmFsdWVzOm1zLGdldExlbmd0aGFibGVPcmlnaW46SG8sZ2V0UGFyc2VkVHlwZTpybSxnZXRTaXphYmxlT3JpZ2luOlVvLGhleFRvVWludDhBcnJheTpsbSxoaWRlOkJvLGluc3RhbGxMYXp5UHJvcDpwbCxpc09iamVjdDpodCxpc1BsYWluT2JqZWN0OkhlLGlzc3VlOmZ0LGpvaW5WYWx1ZXM6Z3MsanNvblN0cmluZ2lmeVJlcGxhY2VyOiRvLG1lbWJlcnM6ZGwsbWVyZ2U6c2wsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6QXMsbnVtS2V5czpvbSxvYmplY3RDbG9uZTpRZixvbWl0OnRsLG9wdGlvbmFsS2V5czpRdSxvd246TmUscGFyc2VkVHlwZTpjbCxwYXJ0aWFsOmJzLHBpY2s6ZWwscHJlZml4SXNzdWVzOmtlLHByaW1pdGl2ZVR5cGVzOkd1LHByb21pc2VBbGxPYmplY3Q6dG0scHJvcGVydHlLZXlUeXBlczpTbyxyYW5kb21TdHJpbmc6bm0scmF3U2hhcGU6cW8scmVxdWlyZWQ6aWwsc2FmZUV4dGVuZDpybCxzaGFsbG93Q2xvbmU6RG8sc2x1Z2lmeTpLdSxzdHJpbmdpZnlQcmltaXRpdmU6UnMsdG9ab2Q6TW8sdWludDhBcnJheVRvQmFzZTY0OmxsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDp1bSx1aW50OEFycmF5VG9IZXg6ZG0sdW53cmFwTWVzc2FnZTp1dH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWWM7Y29uc3QganM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLHVzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFhjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIGdtKGUpe2NvbnN0IHQ9WGM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBYYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7dXMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIix1cyl9ZmluYWxseXt1cy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxpKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBOPXc7Zm9yKDtOJiZOIT09JDspTj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoTik7Y29uc3QgST1OPz93O2kuaGFzKEkpfHwoaS5hZGQoSSksZGwoSSxhKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBifHwoYlt3XT1fW3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P2dtKGQpOnRoaXM7dSh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBNcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIEZlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFZvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShZYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhZYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIHRlKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIGJtKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZiwkbywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIHZtKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgeW09e2dldDpibSxzZXQ6dm0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LGxzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sZXU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksZmw9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIsbHMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixscyksbHMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIix5bSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZXUuaGFzKG4pfHwoZXUuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LG1sPXAoIiRab2RFcnJvciIsZmwpLHllPXAoIiRab2RFcnJvciIsZmwsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiBfbShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIEpvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/X20obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIEtvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IHU9bixsPTA7Zm9yKDtsPGkubGVuZ3RoOyl7Y29uc3QgZD1pW2xdLG09bD09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmdS5fZXJyb3JzLnB1c2godChhKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPXVbZF07bSYmYi5fZXJyb3JzLnB1c2godChhKSksdT1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBxcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAodT0+byh7aXNzdWVzOnV9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCB1PVsuLi5zLC4uLmkucGF0aF07aWYodS5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDx1Lmxlbmd0aDspe2NvbnN0IG09dVtkXSxiPWQ9PT11Lmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGE9bC5pdGVtcylbbV0/PyhhW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gZ2woZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIERzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke2dsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIFdvKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgdW49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHU9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKGw9PlNlKGwsYSx0ZSgpKSkpO3Rocm93IE9zKHUscz8uY2FsbGVlPz90KSx1fXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0seXM9dW4oeWUpLGxuPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCB1PW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcChsPT5TZShsLGEsdGUoKSkpKTt0aHJvdyBPcyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LF9zPWxuKHllKSxkbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP3ZsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sYmw9ZG4oeWUpO2Z1bmN0aW9uIHZsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+U2UocixuLHRlKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBwbj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP3ZsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sa209cG4oeWUpLHdtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSwkbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLEdvPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09d20pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBTbShlLHQsbil9KTtmdW5jdGlvbiBTbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1skbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBRbz1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LExzPWU9Pntjb25zdCB0PXVuKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLFdvKG4sYSkpfTtyZXR1cm4gbn0sem09THMoeWUpLFVzPWU9Pntjb25zdCB0PXVuKGUpLG49KG8scixzLGEpPT50KG8scixzLFdvKG4sYSkpO3JldHVybiBufSxUbT1Vcyh5ZSksRnM9ZT0+e2NvbnN0IHQ9bG4oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxXbyhuLGEpKX07cmV0dXJuIG59LEltPUZzKHllKSxIcz1lPT57Y29uc3QgdD1sbihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLFdvKG4sYSkpO3JldHVybiBufSxQbT1Icyh5ZSksQnM9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gZG4oZSkodCxuLHIpfSx4bT1Ccyh5ZSksVnM9ZT0+KHQsbixvKT0+ZG4oZSkodCxuLG8pLENtPVZzKHllKSxKcz1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHBuKGUpKHQsbixyKX0sRW09SnMoeWUpLEtzPWU9PmFzeW5jKHQsbixvKT0+cG4oZSkodCxuLG8pLEFtPUtzKHllKSx5bD0vXltjQ11bMC05YS16XXs2LH0kLyxfbD0vXlswLTlhLXpdKyQvLGtsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLHdsPS9eWzAtOWEtdkEtVl17MjB9JC8sJGw9L15bQS1aYS16MC05XXsyN30kLyxTbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gemwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IFRsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLE9tPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sSWw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLG10PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyxSbT1tdCg0KSxabT1tdCg2KSxObT1tdCg3KSxQbD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxqbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxNbT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyx4bD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxxbT14bCxEbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxMbT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIENsKCl7cmV0dXJuIG5ldyBSZWdFeHAoTG0sInUiKX1jb25zdCBFbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sQWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxPbD1lPT57Y29uc3QgdD1aZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxSbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sWmw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sVW09L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sRm09L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLE5sPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxqbD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sV3M9L15odHRwcz8kLyxNbD0vXlwrWzEtOV1cZHs2LDE0fSQvLEdzPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxxbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxRcz0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxEbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gSG0oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IExsPUhtKERsKTtmdW5jdGlvbiBrcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIFVsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtrcyhlKX0kYCl9ZnVuY3Rpb24gRmwoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke2tzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7a3Moe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7RGx9VCg/OiR7b30pJGApfWNvbnN0IEhsPS9eW1xzXFNdezAsfSQvLEJsPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LFZsPS9eLT9cZCtuPyQvLEpsPS9eLT9cZCskLyxZbz0vXi0/XGQrKD86XC5cZCspPyQvLEtsPS9eKD86dHJ1ZXxmYWxzZSkkL2ksV2w9L15udWxsJC9pLEdsPS9edW5kZWZpbmVkJC9pLFFsPS9eW15BLVpdKiQvLFlsPS9eW15hLXpdKiQvLFhsPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBCbT0vXlswLTlhLWZBLUZdezMyfSQvLFZtPWhuKDIyLCI9PSIpLEptPWZuKDIyKSxLbT0vXlswLTlhLWZBLUZdezQwfSQvLFdtPWhuKDI3LCI9IiksR209Zm4oMjcpLFFtPS9eWzAtOWEtZkEtRl17NjR9JC8sWW09aG4oNDMsIj0iKSxYbT1mbig0MyksZWc9L15bMC05YS1mQS1GXXs5Nn0kLyx0Zz1obig2NCwiIiksbmc9Zm4oNjQpLG9nPS9eWzAtOWEtZkEtRl17MTI4fSQvLHJnPWhuKDg2LCI9PSIpLHNnPWZuKDg2KSxYbz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOkhsLGJhc2U2NDpVbSxiYXNlNjR1cmw6Rm0sYmlnaW50OlZsLGJvb2xlYW46S2wsYnJvd3NlckVtYWlsOkRtLGNpZHJ2NDpSbCxjaWRydjY6WmwsY3JlZGl0Q2FyZDpHcyxjdWlkOnlsLGN1aWQyOl9sLGN1cnJlbmN5Q29kZTpxbCxkYXRlOkxsLGRhdGV0aW1lOkZsLGRvbWFpbjpqbCxkdXJhdGlvbjpUbCxlMTY0Ok1sLGVtYWlsOlBsLGVtb2ppOkNsLGV4dGVuZGVkRHVyYXRpb246T20sZ3VpZDpJbCxoZXg6WGwsaG9zdG5hbWU6TmwsaHRtbDVFbWFpbDpqbSxodHRwUHJvdG9jb2w6V3MsaWJhbjpRcyxpZG5FbWFpbDpxbSxpbnRlZ2VyOkpsLGlwdjQ6RWwsaXB2NjpBbCxrc3VpZDokbCxsb3dlcmNhc2U6UWwsbWFjOk9sLG1kNV9iYXNlNjQ6Vm0sbWQ1X2Jhc2U2NHVybDpKbSxtZDVfaGV4OkJtLG5hbm9pZDpTbCxuYW5vaWRPZkxlbmd0aDp6bCxudWxsOldsLG51bWJlcjpZbyxyZmM1MzIyRW1haWw6TW0sc2hhMV9iYXNlNjQ6V20sc2hhMV9iYXNlNjR1cmw6R20sc2hhMV9oZXg6S20sc2hhMjU2X2Jhc2U2NDpZbSxzaGEyNTZfYmFzZTY0dXJsOlhtLHNoYTI1Nl9oZXg6UW0sc2hhMzg0X2Jhc2U2NDp0ZyxzaGEzODRfYmFzZTY0dXJsOm5nLHNoYTM4NF9oZXg6ZWcsc2hhNTEyX2Jhc2U2NDpyZyxzaGE1MTJfYmFzZTY0dXJsOnNnLHNoYTUxMl9oZXg6b2csc3RyaW5nOkJsLHRpbWU6VWwsdWxpZDprbCx1bmRlZmluZWQ6R2wsdW5pY29kZUVtYWlsOnhsLHVwcGVyY2FzZTpZbCx1dWlkOm10LHV1aWQ0OlJtLHV1aWQ2OlptLHV1aWQ3Ok5tLHhpZDp3bH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxXPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxZcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFBcyh0KSYmdC5zaXplIT09dm9pZCAwfSxYcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFBcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LHpvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LGVpPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49em9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnpvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHRpPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49em9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnpvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksZWQ9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6RnUobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx0ZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Vy5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPVl1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG5kPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdFtuLG9dPVh1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksb2Q9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVlzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOlVvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHJkPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1ZcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpVbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHNkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1ZcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46VW8ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxpZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1YcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9GbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPUhvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGFkPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVhzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9GbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPUhvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksY2Q9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1cuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49WHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP0ZvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPUhvKHIpLHU9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi51P3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxtbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztXLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSx1ZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pnttbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxsZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVFsKSxtbi5pbml0KGUsdCl9KSxkZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVlsKSxtbi5pbml0KGUsdCl9KSxwZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPVplKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxoZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7WmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxmZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtaZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBUbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmtlKG4sZS5pc3N1ZXMpKX1jb25zdCBtZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5UbyhyLG4sdC5wcm9wZXJ0eSkpO1RvKG8sbix0LnByb3BlcnR5KX19KSxnZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e1cuaW5pdChlLHQpLEJvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTt1IGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaCh1LnRoZW4obD0+VG8obCxvLGEpKSkpOlRvKHUsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksYmQ9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Vy5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx2ZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Vy5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgeWR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCBfZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LHg9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPV9kO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLHUsbCk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9ZmUoaSksbTtmb3IoY29uc3QgYiBvZiB1KXtpZihiLl96b2QuZGVmLndoZW4pe2lmKGFsKGkpfHwhYi5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKHZzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO3ZzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+aSk6aX0sYT0oaSx1LGwpPT57aWYoZmUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyh1LHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShpLHUpPT57aWYodS5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSx1KTtpZih1LmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLnUsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+YShtLGksdSkpOmEoZCxpLHUpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGksdSk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKHUuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7cmV0dXJuIGwudGhlbihkPT5zKGQscix1KSl9cmV0dXJuIHMobCxyLHUpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBCbyh0aGlzLCJ+c3RhbmRhcmQiLG5pKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7TmUodGhpcywifnN0YW5kYXJkIixlKX19KSxrZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PlNlKG4sdCx0ZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBpZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4ga2QoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIG5pKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4ga2QobyxuKX1jYXRjaHt9cmV0dXJuIGlnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IGduPXAoIiRab2RTdHJpbmciLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9IbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEg9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pnttbi5pbml0KGUsdCksZ24uaW5pdChlLHQpfSksd2Q9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUlsKSxILmluaXQoZSx0KX0pLCRkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bXQobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW10KCkpO0guaW5pdChlLHQpfSksU2Q9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1QbCksSC5pbml0KGUsdCl9KSxvaT0xLFF0PTI7ZnVuY3Rpb24gcmkoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiB6ZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP3JpKGUpfHxRdDpUZChlLHQpfWZ1bmN0aW9uIFRkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1Xcy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gb2k7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/UXR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIFF0fX1jb25zdCBhZz0vW1x0XG5ccl0vZztmdW5jdGlvbiB3cyhlKXtyZXR1cm4gZS5yZXBsYWNlKGFnLCIiKX1mdW5jdGlvbiBJZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBQZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCB4ZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj16ZChvLHQpO2lmKHI9PT1vaSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1RdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9d3Mobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFJZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhUGQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6d3Mobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksQ2Q9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1DbCgpKSxILmluaXQoZSx0KX0pLEVkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9TbDp6bCh0Lmxlbmd0aCkpLEguaW5pdChlLHQpfSksQWQ9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXlsKSxILmluaXQoZSx0KX0pLE9kPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49X2wpLEguaW5pdChlLHQpfSksUmQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWtsKSxILmluaXQoZSx0KX0pLFpkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXdsKSxILmluaXQoZSx0KX0pLE5kPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49JGwpLEguaW5pdChlLHQpfSksamQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1GbCh0KSksSC5pbml0KGUsdCl9KSxNZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TGwpLEguaW5pdChlLHQpfSkscWQ9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVsKHQpKSxILmluaXQoZSx0KX0pLERkPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VGwpLEguaW5pdChlLHQpfSksTGQ9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUVsKSxILmluaXQoZSx0KX0pLGNnPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBzaShlKXtyZXR1cm4gY2cudGVzdChlKT9yaShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IFVkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1BbCksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntzaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxGZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1PbCh0LmRlbGltaXRlcikpLEguaW5pdChlLHQpfSksSGQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49UmwpLEguaW5pdChlLHQpfSk7ZnVuY3Rpb24gQmQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOnNpKG4pfWNvbnN0IFZkPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVpsKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0JkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gaWkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBKZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sS2Q9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SmQpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxhaT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gV2QoZSl7aWYoIWFpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gaWkobil9Y29uc3QgR2Q9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YWkpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57V2Qobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxRZD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TWwpLEguaW5pdChlLHQpfSksdWc9L1stIF0vZztmdW5jdGlvbiBsZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBZZChlKXtyZXR1cm4gR3MudGVzdChlKT9sZyhlLnJlcGxhY2UodWcsIiIpKTohMX1jb25zdCBYZD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49R3MpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57WWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGRnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGVwKGUpe3JldHVybiBRcy50ZXN0KGUpP2RnKGUpOiExfWNvbnN0IHRwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1RcyksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntlcChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBucChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IG9wPXAoIiRab2RKV1QiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntucChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHJwPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksY2k9cCgiJFpvZE51bWJlciIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1ZbyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxzcD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3RkLmluaXQoZSx0KSxjaS5pbml0KGUsdCl9KSx1aT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1LbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGxpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49VmwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxpcD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e25kLmluaXQoZSx0KSxsaS5pbml0KGUsdCl9KSxhcD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxjcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPUdsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHVwPXAoIiRab2ROdWxsIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVdsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxscD1wKCIkWm9kQW55IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksZHA9cCgiJFpvZFVua25vd24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxwcD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxocD1wKCIkWm9kVm9pZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGZwPXAoIiRab2REYXRlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gdHUoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5rZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IG1wPXAoIiRab2RBcnJheSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCB1PTA7dTxzLmxlbmd0aDt1Kyspe2NvbnN0IGw9c1t1XSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4obT0+dHUobSxvLHUpKSk7ZWxzZSBpZih0dShkLG8sdSksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmZmUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gSW8oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLmtlKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgcGc9W107ZnVuY3Rpb24gZ3AoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOnBnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1RdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIGJwKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sdT1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihmZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKHUuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IHc9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTt3IGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2gody50aGVuKCQ9PklvKCQsbixfLHQsbSxiKSkpOklvKHcsbixfLHQsbSxiKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IHZwPXAoIiRab2RPYmplY3QiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9YW4oKCk9PmdwKHQpKTtPKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHxzdChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPWh0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCB1PWRlLm1lbW9pemVyO3U/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9dT91LmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IHc9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGkuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoZmUobCx3KSlicmVhazt3PWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTj12WyRdLEk9Ti5fem9kLm9wdGluLEc9Ti5fem9kLm9wdG91dCxvZT1OLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChvZS50aGVuKEo9PklvKEosbCwkLG0sSSxHKSkpOklvKG9lLGwsJCxtLEksRyl9cmV0dXJuIGE/YnAoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLHlwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57dnAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89YW4oKCk9PmdwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSx3PV8uc3ltYm9sS2V5cywkPW5ldyB5ZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6d30pLE49Sj0+YHNoYXBlWyR7Sn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Sn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLEk9KEosQik9PmAKICAgICAgICAgIGxldCAke0p9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Sn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Sn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7Qn0sIC4uLmlzcy5wYXRoXSA6IFske0J9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0p9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0p9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBHPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKUdbSl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKXtpZihKPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgQj1HW0pdLGdlPXR5cGVvZiBKPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihKKX1dYDpKdShKKSxrPWAke2dlfSBpbiBpbnB1dGAsej12W0pdLEs9ej8uX3pvZD8ub3B0aW4scmU9SyE9PXZvaWQgMCxPZT16Py5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7Qn0gPSAke04oZ2UpfTtgKSxyZSYmT2Upe2NvbnN0IGN0PUs9PT0ib3B0aW9uYWwiP2Ake0J9X3ByZXNlbnRgOmAke0J9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtCfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0J9X3ByZXNlbnQgPSAke2t9OwogICAgICAgIGlmICghJHtCfS5pc3N1ZXMubGVuZ3RoIHx8ICR7Qn1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7Qn0uaXNzdWVzLmxlbmd0aCkgeyR7SShCLGdlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtjdH0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7Qn0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSByZT8oJC53cml0ZShgCiAgICAgICAgaWYgKCR7Qn0uaXNzdWVzLmxlbmd0aCkgeyR7SShCLGdlKX0KICAgICAgICB9CiAgICAgIGApLEs9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHtnZX1dID0gJHtCfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtCfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7a30pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0J9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOiQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7Qn1fcHJlc2VudCA9ICR7a307CiAgICAgICAgaWYgKCR7Qn0uaXNzdWVzLmxlbmd0aCkgeyR7SShCLGdlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0J9X3ByZXNlbnQgJiYgISR7Qn0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7Z2V9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7Qn1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7Qn0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuICQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksJC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksJC5jb21waWxlKCl9O2xldCBhO2NvbnN0IGk9aHQsdT0hZGUuaml0bGVzcyxkPXUmJld1LnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgYjtlLl96b2QucGFyc2U9KHYsXyk9PntiPz8oYj1vLnZhbHVlKTtjb25zdCB3PXYudmFsdWU7cmV0dXJuIGkodyk/dSYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGF8fChhPXModC5zaGFwZSkpLHY9YSh2LF8pLG0/YnAoW10sdyx2LF8sYixlLF8/LmFib3J0RWFybHk9PT0hMCk6dik6bih2LF8pOih2Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OncsaW5zdDplfSksdil9fSk7ZnVuY3Rpb24gbnUoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFmZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGE9PlNlKGEsbyx0ZSgpKSkpfSksdCl9Y29uc3QgZXI9cCgiJFpvZFVuaW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIik/ImRlZmF1bHRlZCI6by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbiE9PXZvaWQgMCk/Im9wdGlvbmFsIjp2b2lkIDApLE8oZSwib3B0b3V0IixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpPyJvcHRpb25hbCI6dm9pZCAwKSxPKGUsInZhbHVlcyIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnZhbHVlcykpcmV0dXJuIG5ldyBTZXQoby5kZWYub3B0aW9ucy5mbGF0TWFwKHI9PkFycmF5LmZyb20oci5fem9kLnZhbHVlcykpKX0pLE8oZSwicGF0dGVybiIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnBhdHRlcm4pKXtjb25zdCByPW8uZGVmLm9wdGlvbnMubWFwKHM9PnMuX3pvZC5wYXR0ZXJuKTtyZXR1cm4gbmV3IFJlZ0V4cChgXigke3IubWFwKHM9PlVlKHMuc291cmNlKSkuam9pbigifCIpfSkkYCl9fSk7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgaSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaCh1KSxzPSEwO2Vsc2V7aWYodS5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdTthLnB1c2godSl9fXJldHVybiBzP1Byb21pc2UuYWxsKGEpLnRoZW4oaT0+bnUoaSxvLGUscikpOm51KGEsbyxlLHIpfX0pO2Z1bmN0aW9uIG91KGUsdCxuLG8pe2NvbnN0IHI9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspZVtzXS5pc3N1ZXMubGVuZ3RoPT09MCYmci5wdXNoKHMpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9ZVtyWzBdXS52YWx1ZSx0KTooci5sZW5ndGg9PT0wP3QuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoYT0+U2UoYSxvLHRlKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0IF9wPXAoIiRab2RYb3IiLChlLHQpPT57ZXIuaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgdC5vcHRpb25zKXtjb25zdCB1PWkuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTt1IGluc3RhbmNlb2YgUHJvbWlzZT8oYS5wdXNoKHUpLHM9ITApOmEucHVzaCh1KX1yZXR1cm4gcz9Qcm9taXNlLmFsbChhKS50aGVuKGk9Pm91KGksbyxlLHIpKTpvdShhLG8sZSxyKX19KTtmdW5jdGlvbiBkaShlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89a3Aobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24ga3AoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCB3cD1wKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLGVyLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTtPKGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBhPTA7Zm9yKGNvbnN0IGkgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgdT1pLl96b2QucHJvcFZhbHVlcztpZighdXx8T2JqZWN0LmtleXModSkubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGkpfSJgKTt1W3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmYSsrO2Zvcihjb25zdFtsLGRdb2YgT2JqZWN0LmVudHJpZXModSkpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGwpfHxzdChzLGwsbmV3IFNldCk7Zm9yKGNvbnN0IG0gb2YgZClzW2xdLmFkZChtKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmE+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgYT1xbyhyLl96b2QuZGVmKTtpZihhJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPWFuKCgpPT5rcCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO2lmKCFodChhKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDphLGluc3Q6ZX0pLHI7Y29uc3QgaT1hPy5bdC5kaXNjcmltaW5hdG9yXSx1PW8udmFsdWUuZ2V0KGkpO3JldHVybiB1JiYoaSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT91Ll96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIobD0+by52YWx1ZS5nZXQobCkhPT1udWxsKSxpbnB1dDphLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksJHA9cCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxhPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGEgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGFdKS50aGVuKChbdSxsXSk9PnJ1KG4sdSxsKSk6cnUobixzLGEpfX0pO2Z1bmN0aW9uIFBvKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoSGUoZSkmJkhlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBhPVBvKGVbc10sdFtzXSk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWEuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxhPVBvKHIscyk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goYS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uIHJ1KGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGE9KGwsZCk9PntsZXQgbTtpZihsLmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhbC5wYXRoPy5sZW5ndGgpcj8/KHI9bCksbT1sLmtleXM7ZWxzZSBpZihsLmNvZGU9PT0iaW52YWxpZF9rZXkiJiZsLm9yaWdpbj09PSJyZWNvcmQiJiZsLnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGI9U3RyaW5nKGwucGF0aFswXSk7cy5oYXMoYil8fHMuc2V0KGIsbCksbT1bYl19ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgYiBvZiBtKW8uaGFzKGIpfHxvLnNldChiLHt9KSxvLmdldChiKVtkXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IGwgb2YgdC5pc3N1ZXMpYShsLCJsIil8fGUuaXNzdWVzLnB1c2gobCk7Zm9yKGNvbnN0IGwgb2Ygbi5pc3N1ZXMpYShsLCJyIil8fGUuaXNzdWVzLnB1c2gobCk7Y29uc3QgaT1bLi4ub10uZmlsdGVyKChbLGxdKT0+bC5sJiZsLnIpLm1hcCgoW2xdKT0+bCk7aWYoaS5sZW5ndGgpe2NvbnN0IGw9cj9pLmZpbHRlcihkPT5yLmtleXMuaW5jbHVkZXMoZCkpOltdO2wubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6bH0pO2Zvcihjb25zdCBkIG9mIGkpIWwuaW5jbHVkZXMoZCkmJnMuaGFzKGQpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGQpKX1jb25zdCB1PVBvKHQudmFsdWUsbi52YWx1ZSk7aWYoIXUudmFsaWQpe2lmKGZlKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkodS5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9dS5kYXRhLGV9Y29uc3QgcGk9cCgiJFpvZFR1cGxlIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPWRlLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBhPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmEsaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGk9W10sdT1zdShuLCJvcHRpbiIpLGw9c3Uobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoYS5sZW5ndGg8dSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnUsaW5jbHVzaXZlOiEwLGlucHV0OmEsaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjthLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6YSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBkPW5ldyBBcnJheShuLmxlbmd0aCksbT10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGI9ITE7Zm9yKGxldCB2PTA7djxuLmxlbmd0aDt2Kyspe2NvbnN0IF89blt2XS5fem9kLnJ1bih7dmFsdWU6YVt2XSxpc3N1ZXM6W119LHMpO18gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChfLnRoZW4odz0+e2Rbdl09d30pKTooZFt2XT1fLG0mJiFiJiZfLmlzc3Vlcy5sZW5ndGgmJihiPWZlKF8pKSl9aWYodC5yZXN0JiYhYil7bGV0IHY9bi5sZW5ndGgtMTtjb25zdCBfPWEuc2xpY2Uobi5sZW5ndGgpO2xldCB3PXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBfKXtpZihtJiZyLmlzc3Vlcy5sZW5ndGghPT13KXtpZihmZShyLHcpKWJyZWFrO3c9ci5pc3N1ZXMubGVuZ3RofXYrKztjb25zdCBOPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO04gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChOLnRoZW4oST0+aXUoSSxyLHYpKSk6aXUoTixyLHYpfX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+YXUoZCxyLG4sYSxsKSk6YXUoZCxyLG4sYSxsKX19KTtmdW5jdGlvbiBzdShlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIGl1KGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ua2UobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBhdShlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBhPWVbc10saT1zPG8ubGVuZ3RoO2lmKCFpJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGEuaXNzdWVzLmxlbmd0aCl7aWYoIWkmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi5rZShzLGEuaXNzdWVzKSl9dC52YWx1ZVtzXT1hLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IFNwPXAoIiRab2RSZWNvcmQiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFIZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgYT1bXSxpPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihpJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgdT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGkpaWYodHlwZW9mIGQ9PSJzdHJpbmcifHx0eXBlb2YgZD09Im51bWJlciJ8fHR5cGVvZiBkPT0ic3ltYm9sIil7aWYodS5hZGQodHlwZW9mIGQ9PSJudW1iZXIiP2QudG9TdHJpbmcoKTpkKSxkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgbT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTtpZihtIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihtLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOm0uaXNzdWVzLm1hcChfPT5TZShfLHIsdGUoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1tLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmtlKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5rZShkLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1sZXQgbDtmb3IoY29uc3QgZCBpbiBzKWlmKCF1LmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgbD1sPz9bXSxsLnB1c2goZCk7bCYmbC5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6bCxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCB1O2Zvcihjb25zdCBsIG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYobD09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsbCkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIGw9PSJzdHJpbmciJiZZby50ZXN0KGwpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIobCksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVtsXT1zW2xdOmk/KHU9dT8/W10sdS5wdXNoKGwpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+U2UoXyxyLHRlKCkpKSxpbnB1dDpsLHBhdGg6W2xdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9ZC52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tsXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh2LnRoZW4oXz0+e18uaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5rZShsLF8uaXNzdWVzKSksby52YWx1ZVtiXT1fLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ua2UobCx2Lmlzc3VlcykpLG8udmFsdWVbYl09di52YWx1ZSl9dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5vKTpvfX0pLHpwPXAoIiRab2RNYXAiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJtYXAiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGE9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBNYXAscik6bmV3IE1hcDtjb25zdCBpPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdFtsLGRdb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpLGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTttIGluc3RhbmNlb2YgUHJvbWlzZXx8YiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFByb21pc2UuYWxsKFttLGJdKS50aGVuKChbdixfXSk9PntjdSh2LF8sbyxsLHMsZSxyKX0pKTpjdShtLGIsbyxsLHMsZSxyKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBjdShlLHQsbixvLHIscyxhKXtlLmlzc3Vlcy5sZW5ndGgmJihTby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ua2UobyxlLmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46Im1hcCIsaW5wdXQ6cixpbnN0OnMsaXNzdWVzOmUuaXNzdWVzLm1hcChpPT5TZShpLGEsdGUoKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFNvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5rZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChpPT5TZShpLGEsdGUoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgVHA9cCgiJFpvZFNldCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgYT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGk9cj8uYWJvcnRFYXJseTtsZXQgdT1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IGwgb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKGQudGhlbihtPT51dShtLG8pKSk6dXUoZCxvKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiB1dShlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgSXA9cCgiJFpvZEVudW0iLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1tcyh0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sTyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1tcyhyLmRlZi5lbnRyaWVzKS5maWx0ZXIoYT0+U28uaGFzKHR5cGVvZiBhKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChhPT5aZShhLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO3JldHVybiBvLmhhcyhhKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6YSxpbnN0OmV9KSxyfX0pLFBwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLE8oZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP1plKHMpOnM/WmUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLHhwPXAoIiRab2RGaWxlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxDcD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLGRlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFZvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGE9PihuLnZhbHVlPWEsbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gbHUoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBoaT1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsTyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLE8oZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7VWUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5sdShuLHMpKTpsdShuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLEVwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e2hpLmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLEFwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtVZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksT3A9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+ZHUocyx0KSk6ZHUocix0KX19KTtmdW5jdGlvbiBkdShlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBScD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksWnA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5wdShzLGUpKTpwdShyLGUpfX0pO2Z1bmN0aW9uIHB1KGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBOcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFZvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBodShlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PlNlKHIsbyx0ZSgpKSl9LGlucHV0OmUudmFsdWV9KSxlKTooZS52YWx1ZT10LnZhbHVlLHQubWVtbyYmKGUubWVtbz0hMCksZSl9Y29uc3QganA9cCgiJFpvZENhdGNoIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pmh1KG4scyx0LG8pKTpodShuLHIsdCxvKX19KSxNcD1wKCIkWm9kTmFOIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KCh0eXBlb2Ygbi52YWx1ZSE9Im51bWJlciJ8fCFOdW1iZXIuaXNOYU4obi52YWx1ZSkpJiZuLmlzc3Vlcy5wdXNoKHtpbnB1dDpuLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoibmFuIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbil9KSxmaT1wKCIkWm9kUGlwZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLE8oZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLE8oZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PnBvKGEsdC5pbixvKSk6cG8ocyx0LmluLG8pfWNvbnN0IHI9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+cG8ocyx0Lm91dCxvKSk6cG8ocix0Lm91dCxvKX19KTtmdW5jdGlvbiBwbyhlLHQsbil7cmV0dXJuIGUuaXNzdWVzLnNvbWUobz0+by5jb2RlIT09InVucmVjb2duaXplZF9rZXlzIik/KGUuYWJvcnRlZD0hMCxlKTp0Ll96b2QucnVuKHt2YWx1ZTplLnZhbHVlLGlzc3VlczplLmlzc3Vlc30sbil9Y29uc3QgbWk9cCgiJFpvZENvZGVjIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKChvLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcz10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT5obyhhLHQsbykpOmhvKHMsdCxvKX1lbHNle2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PmhvKGEsdCxvKSk6aG8ocyx0LG8pfX19KTtmdW5jdGlvbiBobyhlLHQsbil7aWYoZS5pc3N1ZXMubGVuZ3RoKXJldHVybiBlLmFib3J0ZWQ9ITAsZTtpZigobi5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHI9dC50cmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmZvKGUscyx0Lm91dCxuKSk6Zm8oZSxyLHQub3V0LG4pfWVsc2V7Y29uc3Qgcj10LnJldmVyc2VUcmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmZvKGUscyx0LmluLG4pKTpmbyhlLHIsdC5pbixuKX19ZnVuY3Rpb24gZm8oZSx0LG4sbyl7cmV0dXJuIGUuaXNzdWVzLmxlbmd0aD8oZS5hYm9ydGVkPSEwLGUpOm4uX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOmUuaXNzdWVzfSxvKX1jb25zdCBxcD1wKCIkWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntmaS5pbml0KGUsdCl9KSxEcD1wKCIkWm9kUmVhZG9ubHkiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKSxPKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihmdSk6ZnUocil9fSk7ZnVuY3Rpb24gZnUoZSl7cmV0dXJuIGUubWVtb3x8KGUudmFsdWU9T2JqZWN0LmZyZWV6ZShlLnZhbHVlKSksZX1mdW5jdGlvbiBoZyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7bGV0IG49dC5wYXR0ZXJuLG89ISF0LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLHIscztmb3IoY29uc3QgaSBvZiB0LmNoZWNrcz8/W10pe2NvbnN0IHU9aS5fem9kLmRlZjt1LnBhdHRlcm4mJihuPXUucGF0dGVybiksb3x8KG89ISF1LmZvcm1hdD8uaW5jbHVkZXMoImludCIpKTtjb25zdCBsPXUubWluaW11bT8/dS5sZW5ndGgsZD11Lm1heGltdW0/P3UubGVuZ3RoO2whPT12b2lkIDAmJihyPT09dm9pZCAwfHxsPnIpJiYocj1sKSxkIT09dm9pZCAwJiYocz09PXZvaWQgMHx8ZDxzKSYmKHM9ZCl9aWYobilyZXR1cm4gbi5zb3VyY2U7aWYociE9PXZvaWQgMCYmcyE9PXZvaWQgMCYmcj5zKXJldHVybiIoPyEpIjtpZihyIT09dm9pZCAwfHxzIT09dm9pZCAwKXJldHVybiBCbCh7bWluaW11bTpyLG1heGltdW06c30pLnNvdXJjZTtjb25zdCBhPWUuX3pvZC5wYXR0ZXJuO3JldHVybihvJiZhPT09WW8/Smw6YSk/LnNvdXJjZX1mdW5jdGlvbiAkcyhlKXtjb25zdCB0PWUuX3pvZC5kZWYsbj1lLl96b2QucGF0dGVybj8uc291cmNlLG89dC5pbm5lclR5cGU/P2UuX3pvZC5pbm5lclR5cGU7aWYobyl7Y29uc3Qgcj1vLl96b2QucGF0dGVybj8uc291cmNlLHM9JHMobyk7cmV0dXJuIG4mJnImJnMmJnMhPT1yP24ucmVwbGFjZShVZShyKSwoKT0+VWUocykpOm59aWYodC5vcHRpb25zKXtjb25zdCByPXQub3B0aW9ucy5tYXAoJHMpO2lmKHIuZXZlcnkoQm9vbGVhbikpcmV0dXJuYF4oJHtyLm1hcChzPT5VZShzKSkuam9pbigifCIpfSkkYH1yZXR1cm4gaGcoZSl9Y29uc3QgTHA9cCgiJFpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQucGFydHMpaWYodHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCl7Y29uc3Qgcj0kcyhvKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5vLl96b2QudHJhaXRzXS5zaGlmdCgpfWApO24ucHVzaChVZShyKSl9ZWxzZSBpZihvPT09bnVsbHx8R3UuaGFzKHR5cGVvZiBvKSluLnB1c2goWmUoYCR7b31gKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke299YCk7ZS5fem9kLnBhdHRlcm49bmV3IFJlZ0V4cChgXiR7bi5qb2luKCIiKX0kYCksZS5fem9kLnBhcnNlPShvLHIpPT50eXBlb2Ygby52YWx1ZSE9InN0cmluZyI/KG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvKTooZS5fem9kLnBhdHRlcm4ubGFzdEluZGV4PTAsZS5fem9kLnBhdHRlcm4udGVzdChvLnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdD8/InRlbXBsYXRlX2xpdGVyYWwiLHBhdHRlcm46ZS5fem9kLnBhdHRlcm4uc291cmNlfSksbyl9KSxVcD1wKCIkWm9kRnVuY3Rpb24iLChlLHQpPT4oeC5pbml0KGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9kZWYiLHt2YWx1ZTp0fSksZS5fem9kLmRlZj10LGUuaW1wbGVtZW50PW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/eXMoZS5fZGVmLmlucHV0LG8pOm8scz1SZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD95cyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5pbXBsZW1lbnRBc3luYz1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmMgZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/YXdhaXQgX3MoZS5fZGVmLmlucHV0LG8pOm8scz1hd2FpdCBSZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9hd2FpdCBfcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5fem9kLnBhcnNlPShuLG8pPT50eXBlb2Ygbi52YWx1ZSE9ImZ1bmN0aW9uIj8obi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoiZnVuY3Rpb24iLGlucHV0Om4udmFsdWUsaW5zdDplfSksbik6KGUuX2RlZi5vdXRwdXQmJmUuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZT09PSJwcm9taXNlIj9uLnZhbHVlPWUuaW1wbGVtZW50QXN5bmMobi52YWx1ZSk6bi52YWx1ZT1lLmltcGxlbWVudChuLnZhbHVlKSxuKSxlLmlucHV0PSguLi5uKT0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuWzBdKT9uZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5ldyBwaSh7dHlwZToidHVwbGUiLGl0ZW1zOm5bMF0scmVzdDpuWzFdfSksb3V0cHV0OmUuX2RlZi5vdXRwdXR9KTpuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5bMF0sb3V0cHV0OmUuX2RlZi5vdXRwdXR9KX0sZS5vdXRwdXQ9bj0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDplLl9kZWYuaW5wdXQsb3V0cHV0Om59KX0sZSkpLEZwPXAoIiRab2RQcm9taXNlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUpLnRoZW4ocj0+dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSl9KSxnaT1wKCIkWm9kTGF6eSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxIdShlLl96b2QsImlubmVyVHlwZSIsKCk9Pntjb25zdCBuPXQ7cmV0dXJuIG4uX2NhY2hlZElubmVyfHwobi5fY2FjaGVkSW5uZXI9dC5nZXR0ZXIoKSksbi5fY2FjaGVkSW5uZXJ9KSxPKGUsInBhdHRlcm4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKSxPKGUsInByb3BWYWx1ZXMiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4/P3ZvaWQgMCksTyhlLCJvcHRvdXQiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQ/P3ZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5lLl96b2QuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxIcD1wKCIkWm9kQ3VzdG9tIiwoZSx0KT0+e1cuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+bixlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89bi52YWx1ZSxyPXQuZm4obyk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHIudGhlbihzPT5tdShzLG4sbyxlKSk7bXUocixuLG8sZSl9fSk7ZnVuY3Rpb24gbXUoZSx0LG4sbyl7aWYoIWUpe2NvbnN0IHI9e2NvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om8scGF0aDpbLi4uby5fem9kLmRlZi5wYXRoPz9bXV0sY29udGludWU6IW8uX3pvZC5kZWYuYWJvcnR9O28uX3pvZC5kZWYucGFyYW1zJiYoci5wYXJhbXM9by5fem9kLmRlZi5wYXJhbXMpLHQuaXNzdWVzLnB1c2goZnQocikpfX1jbGFzcyBCcCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwYXJzZSBhIHJlZmVyZW5jZSBjeWNsZSB0aGF0IGNsb3NlcyB0aHJvdWdoIGEgdHJhbnNmb3JtIiksdGhpcy5uYW1lPSJab2RDeWNsaWNFcnJvciJ9fWNvbnN0IFNzPSJ+bWVtbyIsZ3U9W107ZnVuY3Rpb24gVnAoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCJ9ZnVuY3Rpb24gZHMoZSl7cmV0dXJuIGUubWFwKHQ9PnQucGF0aD97Li4udCxwYXRoOnQucGF0aC5zbGljZSgpfTp7Li4udH0pfWNvbnN0IEpwPW5ldyBXZWFrTWFwLGx0PTAseW89MSxCdD0yO2Z1bmN0aW9uIFZ0KGUsdCxuKXtjb25zdCBvPUpwLmdldChlKTtpZihvIT09dm9pZCAwKXJldHVybiBvP0J0Omx0O2lmKHQuaGFzKGUpKXJldHVybiBCdDt0LmFkZChlKTtsZXQgcj1sdDtjb25zdCBzPWQ9PntpZihyIT09QnQmJmQ/Ll96b2Qpe2NvbnN0IG09VnQoZCx0LG4pO20+ciYmKHI9bSl9fSxhPShkLG0pPT57bGV0IGI9bHQ7Zm9yKGNvbnN0IHYgb2YgUmVmbGVjdC5vd25LZXlzKGQpKXtjb25zdCBfPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx2KTtpZighXy5lbnVtZXJhYmxlKWNvbnRpbnVlO2NvbnN0IHc9Xy5nZXQ/eW86Xy52YWx1ZT8uX3pvZD9WdChfLnZhbHVlLHQsbik6bHQ7dz5iJiYoYj13KX1yZXR1cm4gYn0saT1kPT57ZD5yJiYocj1kKX0sdT1lLl96b2QuZGVmO3N3aXRjaCh1LnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgZD1xbyh1KTtpKGQ/YShkKTp5bykscyh1LmNhdGNoYWxsKTticmVha31jYXNlImFycmF5IjpzKHUuZWxlbWVudCk7YnJlYWs7Y2FzZSJ0dXBsZSI6Zm9yKGNvbnN0IGQgb2YgdS5pdGVtcylzKGQpO3ModS5yZXN0KTticmVhaztjYXNlInJlY29yZCI6Y2FzZSJtYXAiOnModS5rZXlUeXBlKSxzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInNldCI6cyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJ1bmlvbiI6Zm9yKGNvbnN0IGQgb2YgdS5vcHRpb25zKXMoZCk7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOnModS5sZWZ0KSxzKHUucmlnaHQpO2JyZWFrO2Nhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOnModS5pbm5lclR5cGUpO2JyZWFrO2Nhc2UicGlwZSI6cyh1LmluKSxzKHUub3V0KTticmVhaztjYXNlImZ1bmN0aW9uIjpzKHUuaW5wdXQpLHModS5vdXRwdXQpO2JyZWFrO2Nhc2UibGF6eSI6e2NvbnN0IGQ9dS5fY2FjaGVkSW5uZXI/PyhuP2UuX3pvZC5pbm5lclR5cGU6dm9pZCAwKTtpKGQ/VnQoZCx0LCExKTp5byk7YnJlYWt9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6Zm9yKGNvbnN0IGQgaW4gdSl7Y29uc3QgbT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsZCk7aWYoIW18fG0uZ2V0KWNvbnRpbnVlO2NvbnN0IGI9bS52YWx1ZTtpZighKCFifHx0eXBlb2YgYiE9Im9iamVjdCIpKXtpZihiLl96b2QpcyhiKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYikpZm9yKGNvbnN0IHYgb2YgYilzKHYpfX19cmV0dXJuIHQuZGVsZXRlKGUpLGZnKGUscil9ZnVuY3Rpb24gZmcoZSx0KXtyZXR1cm4gdCE9PXlvJiZKcC5zZXQoZSx0PT09QnQpLHR9ZnVuY3Rpb24gbWcoZSl7cmV0dXJuIFZ0KGUsbmV3IFNldCwhMCkhPT1sdH1mdW5jdGlvbiBnZyhlLHQpe2xldCBuPWUuYnVja2V0cy5nZXQodCk7cmV0dXJuIG58fChuPW5ldyBXZWFrTWFwLGUuYnVja2V0cy5zZXQodCxuKSksbn1sZXQgbW87Y29uc3QgZ289W10sYmc9e2FsbG9jKGUsdCxuKXtjb25zdCBvPW1vO2lmKCFvKXJldHVybiBuO21vPXZvaWQgMDtjb25zdCByPXt2YWx1ZTpuLGlzc3VlczpudWxsfTtyZXR1cm4gby5zZXQodC52YWx1ZSxyKSxnby5wdXNoKHIpLG59LGd1YXJkKGUpe3ZhciB0Oyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IG49ZS5fem9kLnBhcnNlLG89KHIscyk9PntpZihzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCImJktwKHMsci52YWx1ZSkpdGhyb3cgbmV3IEJwO3JldHVybiBuKHIscyl9O2UuX3pvZC5wYXJzZT1vLGUuX3pvZC5ydW49PT1uJiYoZS5fem9kLnJ1bj1vKX0pfSxhdHRhY2goZSl7dmFyIHQ7bGV0IG4sbz0hMSxyLHM7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3QgYT1lLl96b2QucGFyc2UsaT0odSxsKT0+e2lmKG49PT12b2lkIDApe2NvbnN0IE49VnQoZSxuZXcgU2V0LCExKTtpZihOPT09bHQpcmV0dXJuIGUuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKSxhKHUsbCk7Tj09PUJ0fHxvP249ITA6bz0hMH1jb25zdCBkPXUudmFsdWU7aWYoIVZwKGQpKXJldHVybiBhKHUsbCk7bGV0IG09bFtTc107bXx8KG09e2J1Y2tldHM6bmV3IFdlYWtNYXAsYmFja0VkZ2VzOnZvaWQgMH0sbFtTc109bSk7bGV0IGI7cj09PWw/Yj1zOihiPWdnKG0sZSkscj1sLHM9Yik7Y29uc3Qgdj1iLmdldChkKTtpZih2KXJldHVybiB1LnZhbHVlPXYudmFsdWUsdi5pc3N1ZXM/di5pc3N1ZXMubGVuZ3RoJiZ1Lmlzc3Vlcy5wdXNoKC4uLmRzKHYuaXNzdWVzKSk6KHUubWVtbz0hMCxtLmJhY2tFZGdlcz8/KG0uYmFja0VkZ2VzPW5ldyBXZWFrU2V0KSxtLmJhY2tFZGdlcy5hZGQodi52YWx1ZSkpLHU7bW89Yjtjb25zdCBfPWdvLmxlbmd0aCx3PWEodSxsKTttbz12b2lkIDA7Y29uc3QgJD1nby5sZW5ndGg+Xz9nby5wb3AoKTp2b2lkIDA7cmV0dXJuIHcgaW5zdGFuY2VvZiBQcm9taXNlP3cudGhlbihOPT4oJCYmKCQuaXNzdWVzPU4uaXNzdWVzLmxlbmd0aD9kcyhOLmlzc3Vlcyk6Z3UpLE4pKTooJCYmKCQuaXNzdWVzPXcuaXNzdWVzLmxlbmd0aD9kcyh3Lmlzc3Vlcyk6Z3UpLHcpfTtlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSl9KX19O2Z1bmN0aW9uIHRyKCl7cmV0dXJuIGJnfWZ1bmN0aW9uIEtwKGUsdCl7Y29uc3Qgbj1lW1NzXT8uYmFja0VkZ2VzO3JldHVybiBuIT09dm9pZCAwJiZWcCh0KSYmbi5oYXModCl9Y29uc3Qgdmc9KCk9Pntjb25zdCBlPXtzdHJpbmc6e3VuaXQ6ImNoYXJhY3RlcnMiLHZlcmI6InRvIGhhdmUifSxmaWxlOnt1bml0OiJieXRlcyIsdmVyYjoidG8gaGF2ZSJ9LGFycmF5Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LHNldDp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxtYXA6e3VuaXQ6ImVudHJpZXMiLHZlcmI6InRvIGhhdmUifX07ZnVuY3Rpb24gdChzKXtyZXR1cm4gZVtzXT8/bnVsbH1jb25zdCBuPXtyZWdleDoiaW5wdXQiLGVtYWlsOiJlbWFpbCBhZGRyZXNzIix1cmw6IlVSTCIsZW1vamk6ImVtb2ppIix1dWlkOiJVVUlEIix1dWlkdjQ6IlVVSUR2NCIsdXVpZHY2OiJVVUlEdjYiLG5hbm9pZDoibmFub2lkIixndWlkOiJHVUlEIixjdWlkOiJjdWlkIixjdWlkMjoiY3VpZDIiLHVsaWQ6IlVMSUQiLHhpZDoiWElEIixrc3VpZDoiS1NVSUQiLGRhdGV0aW1lOiJJU08gZGF0ZXRpbWUiLGRhdGU6IklTTyBkYXRlIix0aW1lOiJJU08gdGltZSIsZHVyYXRpb246IklTTyBkdXJhdGlvbiIsaXB2NDoiSVB2NCBhZGRyZXNzIixpcHY2OiJJUHY2IGFkZHJlc3MiLG1hYzoiTUFDIGFkZHJlc3MiLGNpZHJ2NDoiSVB2NCByYW5nZSIsY2lkcnY2OiJJUHY2IHJhbmdlIixiYXNlNjQ6ImJhc2U2NC1lbmNvZGVkIHN0cmluZyIsYmFzZTY0dXJsOiJiYXNlNjR1cmwtZW5jb2RlZCBzdHJpbmciLGpzb25fc3RyaW5nOiJKU09OIHN0cmluZyIsZTE2NDoiRS4xNjQgbnVtYmVyIixjdXJyZW5jeV9jb2RlOiJjdXJyZW5jeSBjb2RlIixjcmVkaXRfY2FyZDoiY3JlZGl0IGNhcmQgbnVtYmVyIixpYmFuOiJJQkFOIixqd3Q6IkpXVCIsdGVtcGxhdGVfbGl0ZXJhbDoiaW5wdXQifSxvPXtuYW46Ik5hTiJ9O2Z1bmN0aW9uIHIocyxhKXtyZXR1cm4gcz09PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJiFOdW1iZXIuaXNGaW5pdGUoYSk/U3RyaW5nKGEpOm9bc10/P3N9cmV0dXJuIHM9Pntzd2l0Y2gocy5jb2RlKXtjYXNlImludmFsaWRfdHlwZSI6e2NvbnN0IGE9cihzLmV4cGVjdGVkKSxpPWNsKHMuaW5wdXQpLHU9cihpLHMuaW5wdXQpO3JldHVybmBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke2F9LCByZWNlaXZlZCAke3V9YH1jYXNlImludmFsaWRfdmFsdWUiOnJldHVybiBzLnZhbHVlcy5sZW5ndGg9PT0xP2BJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke1JzKHMudmFsdWVzWzBdKX1gOmBJbnZhbGlkIG9wdGlvbjogZXhwZWN0ZWQgb25lIG9mICR7Z3Mocy52YWx1ZXMsInwiKX1gO2Nhc2UidG9vX2JpZyI6e2NvbnN0IGE9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI8PSI6IjwiLGk9dChzLm9yaWdpbik7cmV0dXJuIGk/YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGhhdmUgJHthfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0Pz8iZWxlbWVudHMifWA6YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGJlICR7YX0ke3MubWF4aW11bS50b1N0cmluZygpfWB9Y2FzZSJ0b29fc21hbGwiOntjb25zdCBhPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPj0iOiI+IixpPXQocy5vcmlnaW4pO3JldHVybiBpP2BUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGhhdmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0fWA6YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gYmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9YH1jYXNlImludmFsaWRfZm9ybWF0Ijp7Y29uc3QgYT1zO3JldHVybiBhLmZvcm1hdD09PSJzdGFydHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IHN0YXJ0IHdpdGggIiR7YS5wcmVmaXh9ImA6YS5mb3JtYXQ9PT0iZW5kc193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggIiR7YS5zdWZmaXh9ImA6YS5mb3JtYXQ9PT0iaW5jbHVkZXMiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBpbmNsdWRlICIke2EuaW5jbHVkZXN9ImA6YS5mb3JtYXQ9PT0icmVnZXgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7YS5wYXR0ZXJufWA6YEludmFsaWQgJHtuW2EuZm9ybWF0XT8/cy5mb3JtYXR9YH1jYXNlIm5vdF9tdWx0aXBsZV9vZiI6cmV0dXJuYEludmFsaWQgbnVtYmVyOiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtzLmRpdmlzb3J9YDtjYXNlInVucmVjb2duaXplZF9rZXlzIjpyZXR1cm5gVW5yZWNvZ25pemVkIGtleSR7cy5rZXlzLmxlbmd0aD4xPyJzIjoiIn06ICR7Z3Mocy5rZXlzLCIsICIpfWA7Y2FzZSJpbnZhbGlkX2tleSI6cmV0dXJuYEludmFsaWQga2V5IGluICR7cy5vcmlnaW59YDtjYXNlImludmFsaWRfdW5pb24iOnJldHVybiBzLm9wdGlvbnMmJkFycmF5LmlzQXJyYXkocy5vcHRpb25zKSYmcy5vcHRpb25zLmxlbmd0aD4wP2BJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7cy5vcHRpb25zLm1hcChpPT5gJyR7aX0nYCkuam9pbigiIHwgIil9YDpzLmluY2x1c2l2ZT09PSExPyJJbnZhbGlkIGlucHV0OiBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVkIjoiSW52YWxpZCBpbnB1dCI7Y2FzZSJpbnZhbGlkX2VsZW1lbnQiOnJldHVybmBJbnZhbGlkIHZhbHVlIGluICR7cy5vcmlnaW59YDtkZWZhdWx0OnJldHVybiJJbnZhbGlkIGlucHV0In19fTtmdW5jdGlvbiBXcCgpe3JldHVybntsb2NhbGVFcnJvcjp2ZygpfX1jb25zdCBiaT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW46V3B9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGJ1O2NvbnN0IHZpPVN5bWJvbCgiWm9kT3V0cHV0IikseWk9U3ltYm9sKCJab2RJbnB1dCIpO2NsYXNzIEdwe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXB9YWRkKHQsLi4ubil7Y29uc3Qgbz1uWzBdO3JldHVybiB0aGlzLl9tYXAuc2V0KHQsbyksbyYmdHlwZW9mIG89PSJvYmplY3QiJiYiaWQiaW4gbyYmdGhpcy5faWRtYXAuc2V0KG8uaWQsdCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcCx0aGlzfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIG4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmImlkImluIG4mJnRoaXMuX2lkbWFwLmRlbGV0ZShuLmlkKSx0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXN9Z2V0KHQpe2NvbnN0IG49dC5fem9kLnBhcmVudDtpZihuKXtjb25zdCBvPXsuLi50aGlzLmdldChuKT8/e319O2RlbGV0ZSBvLmlkO2NvbnN0IHI9ey4uLm8sLi4udGhpcy5fbWFwLmdldCh0KX07cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD9yOnZvaWQgMH1yZXR1cm4gdGhpcy5fbWFwLmdldCh0KX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9fWZ1bmN0aW9uIG5yKCl7cmV0dXJuIG5ldyBHcH0oYnU9Z2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnk/PyhidS5fX3pvZF9nbG9iYWxSZWdpc3RyeT1ucigpKTtjb25zdCB3ZT1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5LF9pPSgpPT57dGhyb3cgbmV3IEVycm9yKCJ6b2QgY29tcGlsZSgpIGlzIG5vdCBidW5kbGVkIGludG8gY2FyZHMgLSBzZWUgcGFja2FnZXMvaW50ZXJuYWwvY2FyZC1raXQvdml0ZS1zbGltLm1qcyIpfTtjbGFzcyBraSBleHRlbmRzIEVycm9ye31jbGFzcyB3aSBleHRlbmRzIEVycm9ye31jbGFzcyAkaSBleHRlbmRzIEVycm9ye31jb25zdCBTaT1faSx6aT1faSx5Zz1faTtmdW5jdGlvbiBvcihlKXtyZXR1cm4gZS5jaGVja3MmJihlLmNoZWNrcz1bLi4uZS5jaGVja3NdKSxlfWZ1bmN0aW9uIFFwKGUsdCl7cmV0dXJuIG5ldyBlKG9yKHt0eXBlOiJzdHJpbmciLC4uLnkodCl9KSl9ZnVuY3Rpb24gWXAoZSx0KXtyZXR1cm4gbmV3IGUob3Ioe3R5cGU6InN0cmluZyIsY29lcmNlOiEwLC4uLnkodCl9KSl9ZnVuY3Rpb24gVGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbWFpbCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBJaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imd1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gQ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjYiLC4uLnkodCl9KX1mdW5jdGlvbiBFaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NyIsLi4ueSh0KX0pfWZ1bmN0aW9uIHJyKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1vamkiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJuYW5vaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZDIiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1bGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoieGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoia3N1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBYcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im1hYyIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBMaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBVaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBGaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBIaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NHVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBCaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImUxNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gZWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB0aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImliYW4iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gVmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJqd3QiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9Y29uc3QgSmk9e0FueTpudWxsLE1pbnV0ZTotMSxTZWNvbmQ6MCxNaWxsaXNlY29uZDozLE1pY3Jvc2Vjb25kOjZ9O2Z1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZXRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixvZmZzZXQ6ITEsbG9jYWw6ITEscHJlY2lzaW9uOm51bGwsLi4ueSh0KX0pfWZ1bmN0aW9uIFdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBHaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gUWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkdXJhdGlvbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBuaChlLHQpe3JldHVybiBuZXcgZShvcih7dHlwZToibnVtYmVyIixjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBvaChlLHQpe3JldHVybiBuZXcgZShvcih7dHlwZToibnVtYmVyIixjb2VyY2U6ITAsY2hlY2tzOltdLC4uLnkodCl9KSl9ZnVuY3Rpb24gcmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoic2FmZWludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gYWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBjaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGxoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIGRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLC4uLnkodCl9KX1mdW5jdGlvbiBwaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50Iixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIGhoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gZmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gbWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN5bWJvbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGdoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmRlZmluZWQiLC4uLnkodCl9KX1mdW5jdGlvbiBiaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHZoKGUpe3JldHVybiBuZXcgZSh7dHlwZToiYW55In0pfWZ1bmN0aW9uIHloKGUpe3JldHVybiBuZXcgZSh7dHlwZToidW5rbm93biJ9KX1mdW5jdGlvbiBfaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmV2ZXIiLC4uLnkodCl9KX1mdW5jdGlvbiBraChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidm9pZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHdoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIiwuLi55KHQpfSl9ZnVuY3Rpb24gJGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gU2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5hbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGplKGUsdCl7cmV0dXJuIG5ldyBlaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIGJlKGUsdCl7cmV0dXJuIG5ldyBlaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIG5ldyB0aSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIHZlKGUsdCl7cmV0dXJuIG5ldyB0aSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIHNyKGUpe3JldHVybiBNZSgwLGUpfWZ1bmN0aW9uIGlyKGUpe3JldHVybiBqZSgwLGUpfWZ1bmN0aW9uIGFyKGUpe3JldHVybiBiZSgwLGUpfWZ1bmN0aW9uIGNyKGUpe3JldHVybiB2ZSgwLGUpfWZ1bmN0aW9uIHR0KGUsdCl7cmV0dXJuIG5ldyBlZCh7Y2hlY2s6Im11bHRpcGxlX29mIiwuLi55KHQpLHZhbHVlOmV9KX1mdW5jdGlvbiBpdChlLHQpe3JldHVybiBuZXcgb2Qoe2NoZWNrOiJtYXhfc2l6ZSIsLi4ueSh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBuZXcgcmQoe2NoZWNrOiJtaW5fc2l6ZSIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBrdChlLHQpe3JldHVybiBuZXcgc2Qoe2NoZWNrOiJzaXplX2VxdWFscyIsLi4ueSh0KSxzaXplOmV9KX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBuZXcgaWQoe2NoZWNrOiJtYXhfbGVuZ3RoIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIG5ldyBhZCh7Y2hlY2s6Im1pbl9sZW5ndGgiLC4uLnkodCksbWluaW11bTplfSl9ZnVuY3Rpb24gJHQoZSx0KXtyZXR1cm4gbmV3IGNkKHtjaGVjazoibGVuZ3RoX2VxdWFscyIsLi4ueSh0KSxsZW5ndGg6ZX0pfWZ1bmN0aW9uIGJuKGUsdCl7cmV0dXJuIG5ldyB1ZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoicmVnZXgiLC4uLnkodCkscGF0dGVybjplfSl9ZnVuY3Rpb24gdm4oZSl7cmV0dXJuIG5ldyBsZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoibG93ZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIG5ldyBkZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoidXBwZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24gX24oZSx0KXtyZXR1cm4gbmV3IHBkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsLi4ueSh0KSxpbmNsdWRlczplfSl9ZnVuY3Rpb24ga24oZSx0KXtyZXR1cm4gbmV3IGhkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIsLi4ueSh0KSxwcmVmaXg6ZX0pfWZ1bmN0aW9uIHduKGUsdCl7cmV0dXJuIG5ldyBmZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIiwuLi55KHQpLHN1ZmZpeDplfSl9ZnVuY3Rpb24gdXIoZSx0LG4pe3JldHVybiBuZXcgbWQoe2NoZWNrOiJwcm9wZXJ0eSIscHJvcGVydHk6ZSxzY2hlbWE6dCwuLi55KG4pfSl9ZnVuY3Rpb24gJG4oZSx0KXtyZXR1cm4gbmV3IGdkKHtjaGVjazoicHJvcGVydGllcyIsc2hhcGU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gU24oZSx0KXtyZXR1cm4gbmV3IGJkKHtjaGVjazoibWltZV90eXBlIixtaW1lOmUsLi4ueSh0KX0pfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBuZXcgdmQoe2NoZWNrOiJvdmVyd3JpdGUiLHR4OmV9KX1mdW5jdGlvbiB6bihlKXtyZXR1cm4gQWUodD0+dC5ub3JtYWxpemUoZSkpfWZ1bmN0aW9uIFRuKCl7cmV0dXJuIEFlKGU9PmUudHJpbSgpKX1mdW5jdGlvbiBJbigpe3JldHVybiBBZShlPT5lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIFBuKCl7cmV0dXJuIEFlKGU9PmUudG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24geG4oKXtyZXR1cm4gQWUoZT0+S3UoZSkpfWZ1bmN0aW9uIHpoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFycmF5IixlbGVtZW50OnQsLi4ueShuKX0pfWZ1bmN0aW9uIF9nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGtnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsaW5jbHVzaXZlOiExLC4uLnkobil9KX1mdW5jdGlvbiB3ZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOm4sZGlzY3JpbWluYXRvcjp0LC4uLnkobyl9KX1mdW5jdGlvbiAkZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6dCxyaWdodDpufSl9ZnVuY3Rpb24gU2coZSx0LG4sbyl7Y29uc3Qgcj1uIGluc3RhbmNlb2YgeCxzPXI/bzpuLGE9cj9uOm51bGw7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0dXBsZSIsaXRlbXM6dCxyZXN0OmEsLi4ueShzKX0pfWZ1bmN0aW9uIHpnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIFRnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToibWFwIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIElnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InNldCIsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBnKGUsdCxuKXtjb25zdCBvPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHI9PltyLHJdKSk6dDtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6bywuLi55KG4pfSl9ZnVuY3Rpb24geGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczp0LC4uLnkobil9KX1mdW5jdGlvbiBDZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheSh0KT90Olt0XSwuLi55KG4pfSl9ZnVuY3Rpb24gVGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImZpbGUiLC4uLnkodCl9KX1mdW5jdGlvbiBFZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06dH0pfWZ1bmN0aW9uIEFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBPZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gUmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOnQsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKCk6RG8obil9fSl9ZnVuY3Rpb24gWmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBOZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBqZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOnQsY2F0Y2hWYWx1ZTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOlpzKG4pfSl9ZnVuY3Rpb24gTWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToicGlwZSIsaW46dCxvdXQ6bn0pfWZ1bmN0aW9uIHFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBEZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czp0LC4uLnkobil9KX1mdW5jdGlvbiBMZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibGF6eSIsZ2V0dGVyOnR9KX1mdW5jdGlvbiBVZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBJaChlLHQsbil7Y29uc3Qgbz15KG4pO3JldHVybiBvLmFib3J0Pz8oby5hYm9ydD0hMCksbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5vfSl9ZnVuY3Rpb24gUGgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLnkobil9KX1mdW5jdGlvbiB4aChlLHQpe2NvbnN0IG49Q2gobz0+KG8uYWRkSXNzdWU9cj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIilvLmlzc3Vlcy5wdXNoKGZ0KHIsby52YWx1ZSxuLl96b2QuZGVmKSk7ZWxzZXtjb25zdCBzPXI7cy5mYXRhbCYmKHMuY29udGludWU9ITEpLHMuY29kZT8/KHMuY29kZT0iY3VzdG9tIiksImlucHV0ImluIHN8fChzLmlucHV0PW8udmFsdWUpLHMuaW5zdD8/KHMuaW5zdD1uKSxzLmNvbnRpbnVlPz8ocy5jb250aW51ZT0hbi5fem9kLmRlZi5hYm9ydCksby5pc3N1ZXMucHVzaChmdChzKSl9fSxlKG8udmFsdWUsbykpLHQpO3JldHVybiBufWZ1bmN0aW9uIENoKGUsdCl7Y29uc3Qgbj1uZXcgVyh7Y2hlY2s6ImN1c3RvbSIsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuY2hlY2s9ZSxufWZ1bmN0aW9uIEVoKGUpe2NvbnN0IHQ9bmV3IFcoe2NoZWNrOiJkZXNjcmliZSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz13ZS5nZXQobik/P3t9O3dlLmFkZChuLHsuLi5vLGRlc2NyaXB0aW9uOmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBBaChlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoibWV0YSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz13ZS5nZXQobik/P3t9O3dlLmFkZChuLHsuLi5vLC4uLmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBPaChlLHQpe2NvbnN0IG49eSh0KTtsZXQgbz1uLnRydXRoeT8/WyJ0cnVlIiwiMSIsInllcyIsIm9uIiwieSIsImVuYWJsZWQiXSxyPW4uZmFsc3k/P1siZmFsc2UiLCIwIiwibm8iLCJvZmYiLCJuIiwiZGlzYWJsZWQiXTtuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKG89by5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSxyPXIubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikpO2NvbnN0IHM9bmV3IFNldChvKSxhPW5ldyBTZXQociksaT1lLkNvZGVjPz9taSx1PWUuQm9vbGVhbj8/dWksbD1lLlN0cmluZz8/Z24sZD1uZXcgbCh7dHlwZToic3RyaW5nIixlcnJvcjpuLmVycm9yfSksbT1uZXcgdSh7dHlwZToiYm9vbGVhbiIsZXJyb3I6bi5lcnJvcn0pLGI9bmV3IGkoe3R5cGU6InBpcGUiLGluOmQsb3V0Om0sdHJhbnNmb3JtOigodixfKT0+e2xldCB3PXY7cmV0dXJuIG4uY2FzZSE9PSJzZW5zaXRpdmUiJiYodz13LnRvTG93ZXJDYXNlKCkpLHMuaGFzKHcpPyEwOmEuaGFzKHcpPyExOihfLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIixleHBlY3RlZDoic3RyaW5nYm9vbCIsdmFsdWVzOlsuLi5zLC4uLmFdLGlucHV0Ol8udmFsdWUsaW5zdDpiLGNvbnRpbnVlOiExfSkse30pfSkscmV2ZXJzZVRyYW5zZm9ybTooKHYsXyk9PnY9PT0hMD9vWzBdfHwidHJ1ZSI6clswXXx8ImZhbHNlIiksZXJyb3I6bi5lcnJvcn0pO3JldHVybiBiLl96b2QuYmFnLnRydXRoeT1vLGIuX3pvZC5iYWcuZmFsc3k9cixiLl96b2QuYmFnLmNhc2U9bi5jYXNlPz8iaW5zZW5zaXRpdmUiLGJ9ZnVuY3Rpb24gU3QoZSx0LG4sbz17fSl7Y29uc3Qgcj15KG8pLHM9e2NoZWNrOiJzdHJpbmdfZm9ybWF0Iix0eXBlOiJzdHJpbmciLGZvcm1hdDp0LGZuOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246aT0+bi50ZXN0KGkpLC4uLnJ9O3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwJiYocy5wYXR0ZXJuPW4pLG5ldyBlKHMpfWNvbnN0IEZnPSgpPT4oe30pLEhnPSgpPT4oe30pLEJnPSgpPT4oe30pLFZnPSgpPT4oe30pLEpnPSgpPT4oe30pLFJoPSgpPT4oKT0+KHt9KSx6cz0oKT0+KCk9Pih7fSksS2c9KCk9Pih7fSksJGU9KCk9Pih7fSksV2c9KCk9Pih7fSksR2c9KCk9Pih7fSksUWc9KCk9Pih7fSksWWc9KCk9Pih7fSksWGc9KCk9Pih7fSksZWI9KCk9Pih7fSksdGI9KCk9Pih7fSksbmI9KCk9Pih7fSksb2I9KCk9Pih7fSkscmI9KCk9Pih7fSksc2I9KCk9Pih7fSksaWI9KCk9Pih7fSksYWI9KCk9Pih7fSksY2I9KCk9Pih7fSksdWI9KCk9Pih7fSksbGI9KCk9Pih7fSksZGI9KCk9Pih7fSkscGI9KCk9Pih7fSksaGI9KCk9Pih7fSksZmI9KCk9Pih7fSksbWI9KCk9Pih7fSksZ2I9KCk9Pih7fSksYmI9KCk9Pih7fSksdmI9KCk9Pih7fSkseWI9KCk9Pih7fSksWmg9KCk9Pih7fSksX2I9KCk9Pih7fSksa2I9KCk9Pih7fSksd2I9KCk9Pih7fSksJGI9KCk9Pih7fSksU2I9KCk9Pih7fSksemI9KCk9Pih7fSksVGI9KCk9Pih7fSksSWI9KCk9Pih7fSksUGI9KCk9Pih7fSkseGI9KCk9Pih7fSksQ2I9KCk9Pih7fSksTmg9KCk9Pih7fSksRWI9KCk9Pih7fSksWWk9KCk9Pih7fSk7Y2xhc3MgQWJ7fWNvbnN0IE9iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxqaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJFpvZEFueTpscCwkWm9kQXJyYXk6bXAsJFpvZEFzeW5jRXJyb3I6RmUsJFpvZEJhc2U2NDpLZCwkWm9kQmFzZTY0VVJMOkdkLCRab2RCaWdJbnQ6bGksJFpvZEJpZ0ludEZvcm1hdDppcCwkWm9kQm9vbGVhbjp1aSwkWm9kQ0lEUnY0OkhkLCRab2RDSURSdjY6VmQsJFpvZENVSUQ6QWQsJFpvZENVSUQyOk9kLCRab2RDYXRjaDpqcCwkWm9kQ2hlY2s6VywkWm9kQ2hlY2tCaWdJbnRGb3JtYXQ6bmQsJFpvZENoZWNrRW5kc1dpdGg6ZmQsJFpvZENoZWNrR3JlYXRlclRoYW46dGksJFpvZENoZWNrSW5jbHVkZXM6cGQsJFpvZENoZWNrTGVuZ3RoRXF1YWxzOmNkLCRab2RDaGVja0xlc3NUaGFuOmVpLCRab2RDaGVja0xvd2VyQ2FzZTpsZCwkWm9kQ2hlY2tNYXhMZW5ndGg6aWQsJFpvZENoZWNrTWF4U2l6ZTpvZCwkWm9kQ2hlY2tNaW1lVHlwZTpiZCwkWm9kQ2hlY2tNaW5MZW5ndGg6YWQsJFpvZENoZWNrTWluU2l6ZTpyZCwkWm9kQ2hlY2tNdWx0aXBsZU9mOmVkLCRab2RDaGVja051bWJlckZvcm1hdDp0ZCwkWm9kQ2hlY2tPdmVyd3JpdGU6dmQsJFpvZENoZWNrUHJvcGVydGllczpnZCwkWm9kQ2hlY2tQcm9wZXJ0eTptZCwkWm9kQ2hlY2tSZWdleDp1ZCwkWm9kQ2hlY2tTaXplRXF1YWxzOnNkLCRab2RDaGVja1N0YXJ0c1dpdGg6aGQsJFpvZENoZWNrU3RyaW5nRm9ybWF0Om1uLCRab2RDaGVja1VwcGVyQ2FzZTpkZCwkWm9kQ29kZWM6bWksJFpvZENyZWRpdENhcmQ6WGQsJFpvZEN1c3RvbTpIcCwkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OnJwLCRab2RDeWNsaWNFcnJvcjpCcCwkWm9kRGF0ZTpmcCwkWm9kRGVmYXVsdDpPcCwkWm9kRGlzY3JpbWluYXRlZFVuaW9uOndwLCRab2RFMTY0OlFkLCRab2RFbWFpbDpTZCwkWm9kRW1vamk6Q2QsJFpvZEVuY29kZUVycm9yOlZvLCRab2RFbnVtOklwLCRab2RFcnJvcjptbCwkWm9kRXhhY3RPcHRpb25hbDpFcCwkWm9kRmlsZTp4cCwkWm9kRnVuY3Rpb246VXAsJFpvZEdVSUQ6d2QsJFpvZElCQU46dHAsJFpvZElQdjQ6TGQsJFpvZElQdjY6VWQsJFpvZElTT0RhdGU6TWQsJFpvZElTT0RhdGVUaW1lOmpkLCRab2RJU09EdXJhdGlvbjpEZCwkWm9kSVNPVGltZTpxZCwkWm9kSW50ZXJzZWN0aW9uOiRwLCRab2RKV1Q6b3AsJFpvZEtTVUlEOk5kLCRab2RMYXp5OmdpLCRab2RMaXRlcmFsOlBwLCRab2RNQUM6RmQsJFpvZE1hcDp6cCwkWm9kTmFOOk1wLCRab2ROYW5vSUQ6RWQsJFpvZE5ldmVyOnBwLCRab2ROb25PcHRpb25hbDpacCwkWm9kTnVsbDp1cCwkWm9kTnVsbGFibGU6QXAsJFpvZE51bWJlcjpjaSwkWm9kTnVtYmVyRm9ybWF0OnNwLCRab2RPYmplY3Q6dnAsJFpvZE9iamVjdEpJVDp5cCwkWm9kT3B0aW9uYWw6aGksJFpvZFBpcGU6ZmksJFpvZFByZWZhdWx0OlJwLCRab2RQcmVwcm9jZXNzOnFwLCRab2RQcm9taXNlOkZwLCRab2RSZWFkb25seTpEcCwkWm9kUmVhbEVycm9yOnllLCRab2RSZWNvcmQ6U3AsJFpvZFJlZ2lzdHJ5OkdwLCRab2RTZXQ6VHAsJFpvZFN0cmluZzpnbiwkWm9kU3RyaW5nRm9ybWF0OkgsJFpvZFN1Y2Nlc3M6TnAsJFpvZFN5bWJvbDphcCwkWm9kVGVtcGxhdGVMaXRlcmFsOkxwLCRab2RUcmFuc2Zvcm06Q3AsJFpvZFR1cGxlOnBpLCRab2RUeXBlOngsJFpvZFVMSUQ6UmQsJFpvZFVSTDp4ZCwkWm9kVVVJRDokZCwkWm9kVW5kZWZpbmVkOmNwLCRab2RVbmlvbjplciwkWm9kVW5rbm93bjpkcCwkWm9kVm9pZDpocCwkWm9kWElEOlpkLCRab2RYb3I6X3AsJGJyYW5kOk1zLCRjb25zdHJ1Y3RvcjpwLCRpbnB1dDp5aSwkb3V0cHV0OnZpLERvYzp5ZCxJTlZBTElEOmtpLEpTT05TY2hlbWE6T2IsSlNPTlNjaGVtYUdlbmVyYXRvcjpBYixORVZFUjpqcyxUaW1lUHJlY2lzaW9uOkppLFVSTF9CQURfRk9STUFUOm9pLFVSTF9VTlBBUlNFQUJMRTpRdCxab2RDb21waWxlQXN5bmNFcnJvcjp3aSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjokaSxfYW55OnZoLF9hcnJheTp6aCxfYmFzZTY0OkZpLF9iYXNlNjR1cmw6SGksX2JpZ2ludDpkaCxfYm9vbGVhbjp1aCxfY2F0Y2g6amcsX2NoZWNrOkNoLF9jaWRydjQ6TGksX2NpZHJ2NjpVaSxfY29lcmNlZEJpZ2ludDpwaCxfY29lcmNlZEJvb2xlYW46bGgsX2NvZXJjZWREYXRlOiRoLF9jb2VyY2VkTnVtYmVyOm9oLF9jb2VyY2VkU3RyaW5nOllwLF9jcmVkaXRDYXJkOmVoLF9jdWlkOlJpLF9jdWlkMjpaaSxfY3VzdG9tOkloLF9kYXRlOndoLF9kZWNvZGU6VXMsX2RlY29kZUFzeW5jOkhzLF9kZWZhdWx0OlJnLF9kaXNjcmltaW5hdGVkVW5pb246d2csX2UxNjQ6QmksX2VtYWlsOlRpLF9lbW9qaTpBaSxfZW5jb2RlOkxzLF9lbmNvZGVBc3luYzpGcyxfZW5kc1dpdGg6d24sX2VudW06UGcsX2ZpbGU6VGgsX2Zsb2F0MzI6c2gsX2Zsb2F0NjQ6aWgsX2d0Ok1lLF9ndGU6dmUsX2d1aWQ6SWksX2liYW46dGgsX2luY2x1ZGVzOl9uLF9pbnQ6cmgsX2ludDMyOmFoLF9pbnQ2NDpoaCxfaW50ZXJzZWN0aW9uOiRnLF9pcHY0OnFpLF9pcHY2OkRpLF9pc29EYXRlOldpLF9pc29EYXRlVGltZTpLaSxfaXNvRHVyYXRpb246UWksX2lzb1RpbWU6R2ksX2p3dDpWaSxfa3N1aWQ6TWksX2xhenk6TGcsX2xlbmd0aDokdCxfbGl0ZXJhbDpDZyxfbG93ZXJjYXNlOnZuLF9sdDpqZSxfbHRlOmJlLF9tYWM6WHAsX21hcDpUZyxfbWF4OmJlLF9tYXhMZW5ndGg6d3QsX21heFNpemU6aXQsX21pbWU6U24sX21pbjp2ZSxfbWluTGVuZ3RoOkJlLF9taW5TaXplOnFlLF9tdWx0aXBsZU9mOnR0LF9uYW46U2gsX25hbm9pZDpPaSxfbmF0aXZlRW51bTp4ZyxfbmVnYXRpdmU6aXIsX25ldmVyOl9oLF9ub25uZWdhdGl2ZTpjcixfbm9ub3B0aW9uYWw6WmcsX25vbnBvc2l0aXZlOmFyLF9ub3JtYWxpemU6em4sX251bGw6YmgsX251bGxhYmxlOk9nLF9udW1iZXI6bmgsX29wdGlvbmFsOkFnLF9vdmVyd3JpdGU6QWUsX3BhcnNlOnVuLF9wYXJzZUFzeW5jOmxuLF9waXBlOk1nLF9wb3NpdGl2ZTpzcixfcHJvbWlzZTpVZyxfcHJvcGVydGllczokbixfcHJvcGVydHk6dXIsX3JlYWRvbmx5OnFnLF9yZWNvcmQ6emcsX3JlZmluZTpQaCxfcmVnZXg6Ym4sX3NhZmVEZWNvZGU6VnMsX3NhZmVEZWNvZGVBc3luYzpLcyxfc2FmZUVuY29kZTpCcyxfc2FmZUVuY29kZUFzeW5jOkpzLF9zYWZlUGFyc2U6ZG4sX3NhZmVQYXJzZUFzeW5jOnBuLF9zZXQ6SWcsX3NpemU6a3QsX3NsdWdpZnk6eG4sX3N0YXJ0c1dpdGg6a24sX3N0cmluZzpRcCxfc3RyaW5nRm9ybWF0OlN0LF9zdHJpbmdib29sOk9oLF9zdWNjZXNzOk5nLF9zdXBlclJlZmluZTp4aCxfc3ltYm9sOm1oLF90ZW1wbGF0ZUxpdGVyYWw6RGcsX3RvTG93ZXJDYXNlOkluLF90b1VwcGVyQ2FzZTpQbixfdHJhbnNmb3JtOkVnLF90cmltOlRuLF90dXBsZTpTZyxfdWludDMyOmNoLF91aW50NjQ6ZmgsX3VsaWQ6TmksX3VuZGVmaW5lZDpnaCxfdW5pb246X2csX3Vua25vd246eWgsX3VwcGVyY2FzZTp5bixfdXJsOnJyLF91dWlkOlBpLF91dWlkdjQ6eGksX3V1aWR2NjpDaSxfdXVpZHY3OkVpLF92b2lkOmtoLF94aWQ6amksX3hvcjprZyxiYXNlNjRDaGFyc2V0OkpkLGJhc2U2NHVybENoYXJzZXQ6YWksY2FuUGFyc2VVUkw6cmksY2xvbmU6USxjb21waWxlOlNpLGNvbXBpbGVGbjp5Zyxjb25maWc6dGUsY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOnpzLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpSaCxkZWNvZGU6VG0sZGVjb2RlQXN5bmM6UG0sZGVzY3JpYmU6RWgsZW5jb2RlOnptLGVuY29kZUFzeW5jOkltLGV4dHJhY3REZWZzOlZnLGZpbmFsaXplOkpnLGZsYXR0ZW5FcnJvcjpKbyxmb3JtYXRFcnJvcjpLbyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmRpLGdsb2JhbENvbmZpZzpkZSxnbG9iYWxSZWdpc3RyeTp3ZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6SGcsaW5pdGlhbGl6ZUNvbnRleHQ6RmcsaXNCYWNrRWRnZTpLcCxpc1JlY3Vyc2l2ZVNjaGVtYTptZyxpc1ZhbGlkQmFzZTY0OmlpLGlzVmFsaWRCYXNlNjRVUkw6V2QsaXNWYWxpZENJRFJ2NjpCZCxpc1ZhbGlkQ3JlZGl0Q2FyZDpZZCxpc1ZhbGlkSUJBTjplcCxpc1ZhbGlkSVB2NjpzaSxpc1ZhbGlkSldUOm5wLGxvY2FsZXM6YmksbWVtb2l6ZXI6dHIsbWVyZ2VWYWx1ZXM6UG8sbWV0YTpBaCxwYXJzZTp5cyxwYXJzZUFzeW5jOl9zLHBhcnNlVVJMT2JqZWN0OlRkLHByZXR0aWZ5RXJyb3I6RHMscHJvY2VzczpLZyxwcm9jZXNzU2NoZW1hOkJnLHJlZ2V4ZXM6WG8scmVnaXN0cnk6bnIsc2FmZURlY29kZTpDbSxzYWZlRGVjb2RlQXN5bmM6QW0sc2FmZUVuY29kZTp4bSxzYWZlRW5jb2RlQXN5bmM6RW0sc2FmZVBhcnNlOmJsLHNhZmVQYXJzZUFzeW5jOmttLHN0YW5kYXJkUHJvcHM6bmksc3RyaXBUYWJBbmROZXdsaW5lOndzLHRvRG90UGF0aDpnbCx0b0pTT05TY2hlbWE6WWksdG9ab2Q6TW8sdHJlZWlmeUVycm9yOnFzLHVybEhvc3RuYW1lT2s6SWQsdXJsUHJvdG9jb2xPazpQZCx1dGlsOk5zLHZhbGlkYXRlOkdvLHZhbGlkYXRlQXN5bmM6UW8sdmFsaWRhdGVVUkw6emQsdmVyc2lvbjpfZCx3aXRoUGFyc2VyOnppfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHZ1PVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiBYaShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooYSxpKT0+e2NvbnN0IHU9dFthLl96b2QuZGVmLnR5cGVdO3JldHVybiB1P3UoYSxpKTphfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihhKXtjb25zdCBpPW8uZ2V0KGEpO2lmKGk9PT12dSlyZXR1cm4gbmV3IGdpKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGEpfSk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtvLnNldChhLHZ1KTtjb25zdCB1PXMoYSksbD1uKHUsdSE9PWEpO3JldHVybiBvLnNldChhLGwpLGx9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPWEuX3pvZC5kZWY7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPWkuc2hhcGUsZD1PYmplY3Qua2V5cyhsKTtsZXQgbT0hMTtjb25zdCBiPXt9O2Zvcihjb25zdCBfIG9mIGQpe2NvbnN0IHc9cihsW19dKTt3IT09bFtfXSYmKG09ITApLGJbX109d31sZXQgdj1pLmNhdGNoYWxsO3JldHVybiBpLmNhdGNoYWxsJiYodj1yKGkuY2F0Y2hhbGwpLHYhPT1pLmNhdGNoYWxsJiYobT0hMCkpLG0/UShhLHsuLi5pLHNoYXBlOmIsY2F0Y2hhbGw6dn0pOmF9Y2FzZSJhcnJheSI6e2NvbnN0IGw9cihpLmVsZW1lbnQpO3JldHVybiBsPT09aS5lbGVtZW50P2E6UShhLHsuLi5pLGVsZW1lbnQ6bH0pfWNhc2UidHVwbGUiOntjb25zdCBsPWkuaXRlbXM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgdiBvZiBsKXtjb25zdCBfPXIodik7XyE9PXYmJihkPSEwKSxtLnB1c2goXyl9bGV0IGI9aS5yZXN0O3JldHVybiBpLnJlc3QmJihiPXIoaS5yZXN0KSxiIT09aS5yZXN0JiYoZD0hMCkpLGQ/UShhLHsuLi5pLGl0ZW1zOm0scmVzdDpifSk6YX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCBsPXIoaS5rZXlUeXBlKSxkPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS5rZXlUeXBlJiZkPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksa2V5VHlwZTpsLHZhbHVlVHlwZTpkfSl9Y2FzZSJzZXQiOntjb25zdCBsPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksdmFsdWVUeXBlOmx9KX1jYXNlInVuaW9uIjp7Y29uc3QgbD1pLm9wdGlvbnM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgYiBvZiBsKXtjb25zdCB2PXIoYik7diE9PWImJihkPSEwKSxtLnB1c2godil9cmV0dXJuIGQ/UShhLHsuLi5pLG9wdGlvbnM6bX0pOmF9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCBsPXIoaS5sZWZ0KSxkPXIoaS5yaWdodCk7cmV0dXJuIGw9PT1pLmxlZnQmJmQ9PT1pLnJpZ2h0P2E6UShhLHsuLi5pLGxlZnQ6bCxyaWdodDpkfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IGw9cihpLmlubmVyVHlwZSk7cmV0dXJuIGw9PT1pLmlubmVyVHlwZT9hOlEoYSx7Li4uaSxpbm5lclR5cGU6bH0pfWNhc2UicGlwZSI6e2NvbnN0IGw9cihpLmluKSxkPXIoaS5vdXQpO3JldHVybiBsPT09aS5pbiYmZD09PWkub3V0P2E6UShhLHsuLi5pLGluOmwsb3V0OmR9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgbD1yKGkuaW5wdXQpLGQ9cihpLm91dHB1dCk7cmV0dXJuIGw9PT1pLmlucHV0JiZkPT09aS5vdXRwdXQ/YTpRKGEsey4uLmksaW5wdXQ6bCxvdXRwdXQ6ZH0pfWNhc2UibGF6eSI6e2NvbnN0IGw9aS5nZXR0ZXIse19jYWNoZWRJbm5lcjpkLC4uLm19PWk7cmV0dXJuIFEoYSx7Li4ubSxnZXR0ZXI6KCk9PnIobCgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiBhfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBlYShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBNaChlLHQpe3JldHVybiBlYShlKT9ibChlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIFJiKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihlYShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIFpiKGUpe2lmKGVhKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IE5iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDp3bixndDpNZSxndGU6dmUsaW5jbHVkZXM6X24sbGVuZ3RoOiR0LGxvd2VyY2FzZTp2bixsdDpqZSxsdGU6YmUsbWF4TGVuZ3RoOnd0LG1heFNpemU6aXQsbWltZTpTbixtaW5MZW5ndGg6QmUsbWluU2l6ZTpxZSxtdWx0aXBsZU9mOnR0LG5lZ2F0aXZlOmlyLG5vbm5lZ2F0aXZlOmNyLG5vbnBvc2l0aXZlOmFyLG5vcm1hbGl6ZTp6bixvdmVyd3JpdGU6QWUscG9zaXRpdmU6c3IscHJvcGVydGllczokbixwcm9wZXJ0eTp1cixyZWdleDpibixzaXplOmt0LHNsdWdpZnk6eG4sc3RhcnRzV2l0aDprbix0b0xvd2VyQ2FzZTpJbix0b1VwcGVyQ2FzZTpQbix0cmltOlRuLHVwcGVyY2FzZTp5bn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx5dT1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiBibyhlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IHFoPShlLHQpPT57bWwuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3l1LmhhcyhuKXx8KHl1LmFkZChuKSxibyhuLCJmb3JtYXQiLG89PnI9PktvKG8scikpLGJvKG4sImZsYXR0ZW4iLG89PnI9PkpvKG8scikpLGJvKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsJG8sMil9KSxibyhuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcywkbywyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxEaD1wKCJab2RFcnJvciIscWgpLG1lPXAoIlpvZEVycm9yIixxaCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLHRhPXVuKG1lKSxuYT1sbihtZSksb2E9ZG4obWUpLHJhPXBuKG1lKSxzYT1McyhtZSksaWE9VXMobWUpLGFhPUZzKG1lKSxjYT1IcyhtZSksdWE9QnMobWUpLGxhPVZzKG1lKSxkYT1KcyhtZSkscGE9S3MobWUpO2Z1bmN0aW9uIGpiKCl7ZGUubG9jYWxlRXJyb3J8fHRlKFdwKCkpfWZ1bmN0aW9uIGF0KCl7ZGUubWVtb2l6ZXJ8fHRlKHttZW1vaXplcjp0cigpfSl9Y29uc3QgRT1wKCJab2RUeXBlIiwoZSx0KT0+KGpiKCkseC5pbml0KGUsdCksZS5kZWY9dCxlLnR5cGU9dC50eXBlLGUpLHtjaGVjayguLi5lKXtjb25zdCB0PXRoaXMuZGVmO3JldHVybiB0aGlzLmNsb25lKHVlKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBRKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhRcihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhZcihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEFlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gVih0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBFcih0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gYnQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gVihidCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBqcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBQKHRoaXMpfSxvcihlKXtyZXR1cm4gQShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gTnQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBYdCh0aGlzLFhuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gUnIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIE5yKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBEcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBYdCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBIcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHdlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHdlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gd2UuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBCbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5uaSh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDp6cygpLG91dHB1dDp6cygpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtOZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHRhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgbmEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBvYSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIHJhKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtOZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBHbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gUW8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBzYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gaWEodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgYWEodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgY2EodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gdWEodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIGxhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIGRhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIHBhKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBSaCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gd2UuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxDbj1wKCJfWm9kU3RyaW5nIiwoZSx0KT0+e2duLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2coKX0sY24oe2Zvcm1hdDplPT4kZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+JGUoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT4kZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhibiguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKF9uKC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhrbiguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHduKC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEJlKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHd0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKCR0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soQmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayh2bihlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayh5bihlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhUbigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHpuKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhJbigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhQbigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKHhuKCkpfX0pKSx6dD1wKCJab2RTdHJpbmciLChlLHQpPT57Z24uaW5pdChlLHQpLENuLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKFRpKEVuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKHJyKEN0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKFZpKEpuLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soQWkoT24sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKElpKEFuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhQaShQZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayh4aShQZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhDaShQZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhFaShQZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhPaShSbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmkoWm4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhaaShObixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTmkoam4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRmkoSG4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soSGkoQm4sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soamkoTW4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShxbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2socWkoRG4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKERpKExuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKExpKFVuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFVpKEZuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhCaShWbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKEtpKFR0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhXaShJdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soR2koUHQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhRaSh4dCxlKSl9fSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gUXAoenQsZSl9Y29uc3QgVT1wKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksQ24uaW5pdChlLHQpfSksVHQ9cCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57amQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksSXQ9cCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntNZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxQdD1wKCJab2RJU09UaW1lIiwoZSx0KT0+e3FkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLHh0PXAoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e0RkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLEVuPXAoIlpvZEVtYWlsIiwoZSx0KT0+e1NkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGhhKGUpe3JldHVybiBUaShFbixlKX1jb25zdCBBbj1wKCJab2RHVUlEIiwoZSx0KT0+e3dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGZhKGUpe3JldHVybiBJaShBbixlKX1jb25zdCBQZT1wKCJab2RVVUlEIiwoZSx0KT0+eyRkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG1hKGUpe3JldHVybiBQaShQZSxlKX1mdW5jdGlvbiBnYShlKXtyZXR1cm4geGkoUGUsZSl9ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIENpKFBlLGUpfWZ1bmN0aW9uIHZhKGUpe3JldHVybiBFaShQZSxlKX1jb25zdCBDdD1wKCJab2RVUkwiLChlLHQpPT57eGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24geWEoZSl7cmV0dXJuIHJyKEN0LGUpfWZ1bmN0aW9uIF9hKGUpe3JldHVybiBycihDdCx7cHJvdG9jb2w6V3MsaG9zdG5hbWU6amwsLi4ueShlKX0pfWNvbnN0IE9uPXAoIlpvZEVtb2ppIiwoZSx0KT0+e0NkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGthKGUpe3JldHVybiBBaShPbixlKX1jb25zdCBSbj1wKCJab2ROYW5vSUQiLChlLHQpPT57RWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIE9pKFJuLGUpfWNvbnN0IFpuPXAoIlpvZENVSUQiLChlLHQpPT57QWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIFJpKFpuLGUpfWNvbnN0IE5uPXAoIlpvZENVSUQyIiwoZSx0KT0+e09kLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFNhKGUpe3JldHVybiBaaShObixlKX1jb25zdCBqbj1wKCJab2RVTElEIiwoZSx0KT0+e1JkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHphKGUpe3JldHVybiBOaShqbixlKX1jb25zdCBNbj1wKCJab2RYSUQiLChlLHQpPT57WmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIGppKE1uLGUpfWNvbnN0IHFuPXAoIlpvZEtTVUlEIiwoZSx0KT0+e05kLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIElhKGUpe3JldHVybiBNaShxbixlKX1jb25zdCBEbj1wKCJab2RJUHY0IiwoZSx0KT0+e0xkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBxaShEbixlKX1jb25zdCBscj1wKCJab2RNQUMiLChlLHQpPT57RmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24geGEoZSl7cmV0dXJuIFhwKGxyLGUpfWNvbnN0IExuPXAoIlpvZElQdjYiLChlLHQpPT57VWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIERpKExuLGUpfWNvbnN0IFVuPXAoIlpvZENJRFJ2NCIsKGUsdCk9PntIZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBFYShlKXtyZXR1cm4gTGkoVW4sZSl9Y29uc3QgRm49cCgiWm9kQ0lEUnY2IiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFhKGUpe3JldHVybiBVaShGbixlKX1jb25zdCBIbj1wKCJab2RCYXNlNjQiLChlLHQpPT57S2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gT2EoZSl7cmV0dXJuIEZpKEhuLGUpfWNvbnN0IEJuPXAoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntHZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBSYShlKXtyZXR1cm4gSGkoQm4sZSl9Y29uc3QgVm49cCgiWm9kRTE2NCIsKGUsdCk9PntRZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBaYShlKXtyZXR1cm4gQmkoVm4sZSl9Y29uc3QgZHI9cCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntYZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gZWgoZHIsZSl9Y29uc3QgcHI9cCgiWm9kSUJBTiIsKGUsdCk9Pnt0cC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBqYShlKXtyZXR1cm4gdGgocHIsZSl9Y29uc3QgSm49cCgiWm9kSldUIiwoZSx0KT0+e29wLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE1hKGUpe3JldHVybiBWaShKbixlKX1jb25zdCBKZT1wKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57cnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcWEoZSx0LG49e30pe3JldHVybiBTdChKZSxlLHQsbil9ZnVuY3Rpb24gRGEoZSl7cmV0dXJuIFN0KEplLCJob3N0bmFtZSIsTmwsZSl9ZnVuY3Rpb24gTGEoZSl7cmV0dXJuIFN0KEplLCJoZXgiLFhsLGUpfWZ1bmN0aW9uIFVhKGUpe3JldHVybiBTdChKZSwiY3VycmVuY3lfY29kZSIscWwsZSl9ZnVuY3Rpb24gRmEoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPVhvW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIFN0KEplLG8scix0KX1jb25zdCBFdD1wKCJab2ROdW1iZXIiLChlLHQpPT57Y2kuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HZygpLGUuaXNGaW5pdGU9ITB9LGNuKHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09JGUoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT0kZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT0kZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PiRlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhNZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGplKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhZdChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soWXQoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhNZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHR0KGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodHQoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBDKGUpe3JldHVybiBuaChFdCxlKX1jb25zdCBLZT1wKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57c3AuaW5pdChlLHQpLEV0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIFl0KGUpe3JldHVybiByaChLZSxlKX1mdW5jdGlvbiBIYShlKXtyZXR1cm4gc2goS2UsZSl9ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIGloKEtlLGUpfWZ1bmN0aW9uIFZhKGUpe3JldHVybiBhaChLZSxlKX1mdW5jdGlvbiBKYShlKXtyZXR1cm4gY2goS2UsZSl9Y29uc3QgQXQ9cCgiWm9kQm9vbGVhbiIsKGUsdCk9Pnt1aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlFnKCl9KTtmdW5jdGlvbiBMKGUpe3JldHVybiB1aChBdCxlKX1jb25zdCBPdD1wKCJab2RCaWdJbnQiLChlLHQpPT57bGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZZygpfSxjbih7bWluVmFsdWU6ZT0+JGUoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PiRlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+JGUoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soTWUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soTWUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soamUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYmUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHR0KGUsdCkpfX0pKTtmdW5jdGlvbiBLYShlKXtyZXR1cm4gZGgoT3QsZSl9Y29uc3QgS249cCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2lwLmluaXQoZSx0KSxPdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gaGgoS24sZSl9ZnVuY3Rpb24gR2EoZSl7cmV0dXJuIGZoKEtuLGUpfWNvbnN0IGhyPXAoIlpvZFN5bWJvbCIsKGUsdCk9PnthcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhnKCl9KTtmdW5jdGlvbiBRYShlKXtyZXR1cm4gbWgoaHIsZSl9Y29uc3QgZnI9cCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e2NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dGIoKX0pO2Z1bmN0aW9uIGd0KGUpe3JldHVybiBnaChmcixlKX1jb25zdCBtcj1wKCJab2ROdWxsIiwoZSx0KT0+e3VwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZWIoKX0pO2Z1bmN0aW9uIFduKGUpe3JldHVybiBiaChtcixlKX1jb25zdCBncj1wKCJab2RBbnkiLChlLHQpPT57bHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5yYigpfSk7ZnVuY3Rpb24gR24oKXtyZXR1cm4gdmgoZ3IpfWNvbnN0IGJyPXAoIlpvZFVua25vd24iLChlLHQpPT57ZHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5zYigpfSk7ZnVuY3Rpb24gRCgpe3JldHVybiB5aChicil9Y29uc3QgdnI9cCgiWm9kTmV2ZXIiLChlLHQpPT57cHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5vYigpfSk7ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIF9oKHZyLGUpfWNvbnN0IHlyPXAoIlpvZFZvaWQiLChlLHQpPT57aHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5uYigpfSk7ZnVuY3Rpb24gWWEoZSl7cmV0dXJuIGtoKHlyLGUpfWNvbnN0IFFuPXAoIlpvZERhdGUiLChlLHQpPT57ZnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pYigpLGUubWluPShuLG8pPT5lLmNoZWNrKHZlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGJlKG4sbykpfSxjbih7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT0kZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09JGUoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBYYShlKXtyZXR1cm4gd2goUW4sZSl9Y29uc3QgX3I9cCgiWm9kQXJyYXkiLChlLHQpPT57YXQoKSxtcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZiKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKEJlKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhCZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sod3QoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKCR0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gemgoX3IsZSx0KX1mdW5jdGlvbiBlYyhlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIGllKE9iamVjdC5rZXlzKHQpKX1jb25zdCBSdD1wKCJab2RPYmplY3QiLChlLHQpPT57YXQoKSx5cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnliKCkscGwoZSwic2hhcGUiLG49Pm4uX3pvZC5kZWYuc2hhcGUsITEpfSx7a2V5b2YoKXtyZXR1cm4gaWUoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkQoKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpEKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOm50KCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIG5sKHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIHJsKHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBzbCh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBlbCh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiB0bCh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBicyhqdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIGJzKGVvLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBpbCh0byx0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLnkodCl9O3JldHVybiBuZXcgUnQobil9ZnVuY3Rpb24gdGMoZSx0KXtyZXR1cm4gbmV3IFJ0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6bnQoKSwuLi55KHQpfSl9ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4gbmV3IFJ0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6RCgpLC4uLnkodCl9KX1jb25zdCBadD1wKCJab2RVbmlvbiIsKGUsdCk9Pntlci5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlpoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIEEoZSx0KXtyZXR1cm4gbmV3IFp0KHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLC4uLnkodCl9KX1jb25zdCBrcj1wKCJab2RYb3IiLChlLHQpPT57WnQuaW5pdChlLHQpLF9wLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WmgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gbmMoZSx0KXtyZXR1cm4gbmV3IGtyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLGluY2x1c2l2ZTohMSwuLi55KHQpfSl9Y29uc3Qgd3I9cCgiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e1p0LmluaXQoZSx0KSx3cC5pbml0KGUsdCl9KTtmdW5jdGlvbiBZbihlLHQsbil7cmV0dXJuIG5ldyB3cih7dHlwZToidW5pb24iLG9wdGlvbnM6dCxkaXNjcmltaW5hdG9yOmUsLi4ueShuKX0pfWNvbnN0ICRyPXAoIlpvZEludGVyc2VjdGlvbiIsKGUsdCk9PnskcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9iKCl9KTtmdW5jdGlvbiBOdChlLHQpe3JldHVybiBuZXcgJHIoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDplLHJpZ2h0OnR9KX1jb25zdCBTcj1wKCJab2RUdXBsZSIsKGUsdCk9PnthdCgpLHBpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+a2IoKX0se3Jlc3QoZSl7cmV0dXJuIHRoaXMuY2xvbmUoey4uLnRoaXMuX3pvZC5kZWYscmVzdDplfSl9LHBhcnRpYWwoKXtjb25zdCBlPXRoaXMuX3pvZC5kZWY7aWYoZS5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5wYXJ0aWFsKCkgY2Fubm90IGJlIHVzZWQgb24gdHVwbGUgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7cmV0dXJuIHRoaXMuY2xvbmUoey4uLmUsaXRlbXM6ZS5pdGVtcy5tYXAodD0+bmV3IGp0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KSl9KX19KTtmdW5jdGlvbiB6cihlLHQsbil7Y29uc3Qgbz10IGluc3RhbmNlb2YgeCxyPW8/bjp0LHM9bz90Om51bGw7cmV0dXJuIG5ldyBTcih7dHlwZToidHVwbGUiLGl0ZW1zOmUscmVzdDpzLC4uLnkocil9KX1jb25zdCBvdD1wKCJab2RSZWNvcmQiLChlLHQpPT57YXQoKSxTcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndiKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZX0pO2Z1bmN0aW9uIFooZSx0LG4pe3JldHVybiF0fHwhdC5fem9kP25ldyBvdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmgoKSx2YWx1ZVR5cGU6ZSwuLi55KHQpfSk6bmV3IG90KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gb2MoZSx0LG4pe3JldHVybiBuZXcgb3Qoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobikscGFydGlhbDohMH0pfWZ1bmN0aW9uIHJjKGUsdCxuKXtyZXR1cm4gbmV3IG90KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCxtb2RlOiJsb29zZSIsLi4ueShuKX0pfWNvbnN0IFRyPXAoIlpvZE1hcCIsKGUsdCk9PnthdCgpLHpwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2IoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlLGUubWluPSguLi5uKT0+ZS5jaGVjayhxZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKHFlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhpdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhrdCguLi5uKSl9KTtmdW5jdGlvbiBzYyhlLHQsbil7cmV0dXJuIG5ldyBUcih7dHlwZToibWFwIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWNvbnN0IElyPXAoIlpvZFNldCIsKGUsdCk9PnthdCgpLFRwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmIoKSxlLm1pbj0oLi4ubik9PmUuY2hlY2socWUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhxZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soaXQoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soa3QoLi4ubikpfSk7ZnVuY3Rpb24gaWMoZSx0KXtyZXR1cm4gbmV3IElyKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTplLC4uLnkodCl9KX1jb25zdCBydD1wKCJab2RFbnVtIiwoZSx0KT0+e0lwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG8scixzKT0+YWIoKSxlLmVudW09dC5lbnRyaWVzLGUub3B0aW9ucz1bLi4uZS5fem9kLnZhbHVlc107Y29uc3Qgbj1uZXcgU2V0KE9iamVjdC5rZXlzKHQuZW50cmllcykpO2UuZXh0cmFjdD0obyxyKT0+e2NvbnN0IHM9e307Zm9yKGNvbnN0IGEgb2YgbylpZihuLmhhcyhhKSlzW2FdPXQuZW50cmllc1thXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7YX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IHJ0KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfSxlLmV4Y2x1ZGU9KG8scik9Pntjb25zdCBzPXsuLi50LmVudHJpZXN9O2Zvcihjb25zdCBhIG9mIG8paWYobi5oYXMoYSkpZGVsZXRlIHNbYV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2F9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBydCh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX19KTtmdW5jdGlvbiBpZShlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgcnQoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi55KHQpfSl9ZnVuY3Rpb24gYWMoZSx0KXtyZXR1cm4gbmV3IHJ0KHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4ueSh0KX0pfWNvbnN0IFByPXAoIlpvZExpdGVyYWwiLChlLHQpPT57UHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jYigpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBQcih7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4ueSh0KX0pfWNvbnN0IHhyPXAoIlpvZEZpbGUiLChlLHQpPT57eHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kYigpLGUubWluPShuLG8pPT5lLmNoZWNrKHFlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGl0KG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhTbihBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIGNjKGUpe3JldHVybiBUaCh4cixlKX1jb25zdCBDcj1wKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57YXQoKSxDcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1iKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBWbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKGZ0KHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBhPXM7YS5mYXRhbCYmKGEuY29udGludWU9ITEpLGEuY29kZT8/KGEuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGF8fChhLmlucHV0PW4udmFsdWUpLGEuaW5zdD8/KGEuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKGZ0KGEpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gWG4oZSl7cmV0dXJuIG5ldyBDcih7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IGp0PXAoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e2hpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TmgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBWKGUpe3JldHVybiBuZXcganQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IGVvPXAoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57RXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEVyKGUpe3JldHVybiBuZXcgZW8oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEFyPXAoIlpvZE51bGxhYmxlIiwoZSx0KT0+e0FwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBidChlKXtyZXR1cm4gbmV3IEFyKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiB1YyhlKXtyZXR1cm4gVihidChlKSl9Y29uc3QgT3I9cCgiWm9kRGVmYXVsdCIsKGUsdCk9PntPcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIFJyKGUsdCl7cmV0dXJuIG5ldyBPcih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6RG8odCl9fSl9Y29uc3QgWnI9cCgiWm9kUHJlZmF1bHQiLChlLHQpPT57UnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5UYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIG5ldyBacih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOkRvKHQpfX0pfWNvbnN0IHRvPXAoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2IoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBqcihlLHQpe3JldHVybiBuZXcgdG8oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgTXI9cCgiWm9kU3VjY2VzcyIsKGUsdCk9PntOcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnBiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbGMoZSl7cmV0dXJuIG5ldyBNcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBxcj1wKCJab2RDYXRjaCIsKGUsdCk9PntqcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkliKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBEcihlLHQpe3JldHVybiBuZXcgcXIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6WnModCl9KX1jb25zdCBMcj1wKCJab2ROYU4iLChlLHQpPT57TXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT51YigpfSk7ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIFNoKExyLGUpfWNvbnN0IE10PXAoIlpvZFBpcGUiLChlLHQpPT57ZmkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QYigpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIG5ldyBNdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IHF0PXAoIlpvZENvZGVjIiwoZSx0KT0+e010LmluaXQoZSx0KSxtaS5pbml0KGUsdCl9KTtmdW5jdGlvbiBwYyhlLHQsbil7cmV0dXJuIG5ldyBxdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIGhjKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IHF0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBVcj1wKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e010LmluaXQoZSx0KSxxcC5pbml0KGUsdCl9KSxGcj1wKCJab2RSZWFkb25seSIsKGUsdCk9PntEcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gSHIoZSl7cmV0dXJuIG5ldyBGcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgQnI9cCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0xwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bGIoKX0pO2Z1bmN0aW9uIGZjKGUsdCl7cmV0dXJuIG5ldyBCcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi55KHQpfSl9Y29uc3QgVnI9cCgiWm9kTGF6eSIsKGUsdCk9PntnaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkViKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBKcihlKXtyZXR1cm4gbmV3IFZyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IEtyPXAoIlpvZFByb21pc2UiLChlLHQpPT57RnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIG1jKGUpe3JldHVybiBuZXcgS3Ioe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgV3I9cCgiWm9kRnVuY3Rpb24iLChlLHQpPT57VXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5mYigpfSk7ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIG5ldyBXcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP3pyKGU/LmlucHV0KTplPy5pbnB1dD8/UChEKCkpLG91dHB1dDplPy5vdXRwdXQ/P0QoKX0pfWNvbnN0IER0PXAoIlpvZEN1c3RvbSIsKGUsdCk9PntIcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmhiKCl9KTtmdW5jdGlvbiBnYyhlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIEdyKGUsdCl7cmV0dXJuIEloKER0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIFFyKGUsdD17fSl7cmV0dXJuIFBoKER0LGUsdCl9ZnVuY3Rpb24gWXIoZSx0KXtyZXR1cm4geGgoZSx0KX1jb25zdCBiYz1FaCx2Yz1BaCxYcj1wKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e0R0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjaygkbihlLHQpKX19KTtmdW5jdGlvbiB5YyhlLHQ9e30pe2NvbnN0IG49bmV3IFhyKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLnkodCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgX2M9KC4uLmUpPT5PaCh7Q29kZWM6cXQsQm9vbGVhbjpBdCxTdHJpbmc6enR9LC4uLmUpO2Z1bmN0aW9uIGtjKGUpe2NvbnN0IHQ9SnIoKCk9PkEoW2goZSksQygpLEwoKSxXbigpLFAodCksWihoKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gbm8oZSx0KXtyZXR1cm4gbmV3IFVyKHt0eXBlOiJwaXBlIixpbjpYbihlKSxvdXQ6dH0pfWNvbnN0IE1iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6Z3IsWm9kQXJyYXk6X3IsWm9kQmFzZTY0OkhuLFpvZEJhc2U2NFVSTDpCbixab2RCaWdJbnQ6T3QsWm9kQmlnSW50Rm9ybWF0OktuLFpvZEJvb2xlYW46QXQsWm9kQ0lEUnY0OlVuLFpvZENJRFJ2NjpGbixab2RDVUlEOlpuLFpvZENVSUQyOk5uLFpvZENhdGNoOnFyLFpvZENvZGVjOnF0LFpvZENyZWRpdENhcmQ6ZHIsWm9kQ3VzdG9tOkR0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpKZSxab2REYXRlOlFuLFpvZERlZmF1bHQ6T3IsWm9kRGlzY3JpbWluYXRlZFVuaW9uOndyLFpvZEUxNjQ6Vm4sWm9kRW1haWw6RW4sWm9kRW1vamk6T24sWm9kRW51bTpydCxab2RFeGFjdE9wdGlvbmFsOmVvLFpvZEZpbGU6eHIsWm9kRnVuY3Rpb246V3IsWm9kR1VJRDpBbixab2RJQkFOOnByLFpvZElQdjQ6RG4sWm9kSVB2NjpMbixab2RJU09EYXRlOkl0LFpvZElTT0RhdGVUaW1lOlR0LFpvZElTT0R1cmF0aW9uOnh0LFpvZElTT1RpbWU6UHQsWm9kSW5zdGFuY2VPZjpYcixab2RJbnRlcnNlY3Rpb246JHIsWm9kSldUOkpuLFpvZEtTVUlEOnFuLFpvZExhenk6VnIsWm9kTGl0ZXJhbDpQcixab2RNQUM6bHIsWm9kTWFwOlRyLFpvZE5hTjpMcixab2ROYW5vSUQ6Um4sWm9kTmV2ZXI6dnIsWm9kTm9uT3B0aW9uYWw6dG8sWm9kTnVsbDptcixab2ROdWxsYWJsZTpBcixab2ROdW1iZXI6RXQsWm9kTnVtYmVyRm9ybWF0OktlLFpvZE9iamVjdDpSdCxab2RPcHRpb25hbDpqdCxab2RQaXBlOk10LFpvZFByZWZhdWx0OlpyLFpvZFByZXByb2Nlc3M6VXIsWm9kUHJvbWlzZTpLcixab2RSZWFkb25seTpGcixab2RSZWNvcmQ6b3QsWm9kU2V0OklyLFpvZFN0cmluZzp6dCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOk1yLFpvZFN5bWJvbDpocixab2RUZW1wbGF0ZUxpdGVyYWw6QnIsWm9kVHJhbnNmb3JtOkNyLFpvZFR1cGxlOlNyLFpvZFR5cGU6RSxab2RVTElEOmpuLFpvZFVSTDpDdCxab2RVVUlEOlBlLFpvZFVuZGVmaW5lZDpmcixab2RVbmlvbjpadCxab2RVbmtub3duOmJyLFpvZFZvaWQ6eXIsWm9kWElEOk1uLFpvZFhvcjprcixfWm9kU3RyaW5nOkNuLF9kZWZhdWx0OlJyLF9mdW5jdGlvbjp2dCxhbnk6R24sYXJyYXk6UCxiYXNlNjQ6T2EsYmFzZTY0dXJsOlJhLGJpZ2ludDpLYSxib29sZWFuOkwsY2F0Y2g6RHIsY2hlY2s6Z2MsY2lkcnY0OkVhLGNpZHJ2NjpBYSxjb2RlYzpwYyxjcmVkaXRDYXJkOk5hLGN1aWQ6JGEsY3VpZDI6U2EsY3VycmVuY3lDb2RlOlVhLGN1c3RvbTpHcixkYXRlOlhhLGRlc2NyaWJlOmJjLGRpc2NyaW1pbmF0ZWRVbmlvbjpZbixlMTY0OlphLGVtYWlsOmhhLGVtb2ppOmthLGVudW06aWUsZXhhY3RPcHRpb25hbDpFcixmaWxlOmNjLGZsb2F0MzI6SGEsZmxvYXQ2NDpCYSxmdW5jdGlvbjp2dCxndWlkOmZhLGhhc2g6RmEsaGV4OkxhLGhvc3RuYW1lOkRhLGh0dHBVcmw6X2EsaWJhbjpqYSxpbnN0YW5jZW9mOnljLGludDpZdCxpbnQzMjpWYSxpbnQ2NDpXYSxpbnRlcnNlY3Rpb246TnQsaW52ZXJ0Q29kZWM6aGMsaXB2NDpQYSxpcHY2OkNhLGpzb246a2Msand0Ok1hLGtleW9mOmVjLGtzdWlkOklhLGxhenk6SnIsbGl0ZXJhbDpmLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOnJjLG1hYzp4YSxtYXA6c2MsbWV0YTp2YyxuYW46ZGMsbmFub2lkOndhLG5hdGl2ZUVudW06YWMsbmV2ZXI6bnQsbm9ub3B0aW9uYWw6anIsbnVsbDpXbixudWxsYWJsZTpidCxudWxsaXNoOnVjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYscGFydGlhbFJlY29yZDpvYyxwaXBlOlh0LHByZWZhdWx0Ok5yLHByZXByb2Nlc3M6bm8scHJvbWlzZTptYyxyZWFkb25seTpIcixyZWNvcmQ6WixyZWZpbmU6UXIsc2V0OmljLHN0cmljdE9iamVjdDp0YyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6cWEsc3RyaW5nYm9vbDpfYyxzdWNjZXNzOmxjLHN1cGVyUmVmaW5lOllyLHN5bWJvbDpRYSx0ZW1wbGF0ZUxpdGVyYWw6ZmMsdHJhbnNmb3JtOlhuLHR1cGxlOnpyLHVpbnQzMjpKYSx1aW50NjQ6R2EsdWxpZDp6YSx1bmRlZmluZWQ6Z3QsdW5pb246QSx1bmtub3duOkQsdXJsOnlhLHV1aWQ6bWEsdXVpZHY0OmdhLHV1aWR2NjpiYSx1dWlkdjc6dmEsdm9pZDpZYSx4aWQ6VGEseG9yOm5jfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLExoPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBVaChlKXt0ZSh7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIEZoKCl7cmV0dXJuIHRlKCkuY3VzdG9tRXJyb3J9dmFyIHhvO3hvfHwoeG89e30pO2Z1bmN0aW9uIEhoKGUpe3JldHVybiBLaShUdCxlKX1mdW5jdGlvbiBxYihlKXtyZXR1cm4gV2koSXQsZSl9ZnVuY3Rpb24gRGIoZSl7cmV0dXJuIEdpKFB0LGUpfWZ1bmN0aW9uIExiKGUpe3JldHVybiBRaSh4dCxlKX1jb25zdCB3Yz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpJdCxab2RJU09EYXRlVGltZTpUdCxab2RJU09EdXJhdGlvbjp4dCxab2RJU09UaW1lOlB0LGRhdGU6cWIsZGF0ZXRpbWU6SGgsZHVyYXRpb246TGIsdGltZTpEYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxTPXsuLi5NYiwuLi5OYixpc286d2N9LFViPW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIEZiKGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIF91KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIEhiKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gQmIoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpIYihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIFZiKGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBhIG9mIHMpe2NvbnN0IGk9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGEpO2kuc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6aS5lcnJvci5pc3N1ZXMsaW5wdXQ6YSxwYXRoOlthXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gVHMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgaT1UcyhhLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChpKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgYT1UcyhlW3NdLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2F9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBKYj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLEtiPW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBKdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShKdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5KYi5oYXModCk/SnQobik6IUtiLmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoSnQpKX1mdW5jdGlvbiBrdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gV2IoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7Y29uc3QgaT1UcyhyW2FdLG5ldyBTZXQpO2lmKGk9PT1udWxsKWNvbnRpbnVlO2NvbnN0IHU9cy5nZXQoaSk7aWYodT09PXZvaWQgMCl7cy5zZXQoaSxhKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7YX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7dX1gLGlucHV0OnIscGF0aDpbYV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGE9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBpPTA7Zm9yKGNvbnN0IHUgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZSh1KS5zdWNjZXNzJiYrK2k+PWEpYnJlYWs7aTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7a3Uocyl9OyBmb3VuZCAke2l9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmaT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtrdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiB3dShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP1MuYW55KCk6bGUoZSx0KX1jb25zdCBHYj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIEJoKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIFMubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPUJiKHIsdCksYT1sZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsYSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxhfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiBTLm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIFMubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGE9PnR5cGVvZiBhPT0ic3RyaW5nIikpcmV0dXJuIFMuZW51bShyKTtjb25zdCBzPXIubWFwKGE9PlMubGl0ZXJhbChhKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTpTLnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIFMubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBhPXsuLi5lLHR5cGU6c307cmV0dXJuIEJoKGEsdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP1MubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTpTLnVuaW9uKHIpfWlmKCFuKXJldHVybiBTLmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPVMuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKFMuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayhTLnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayhTLnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayhTLmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2soUy5yZWdleChHYikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayhTLmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2soUy5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayhTLmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2soUy5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2soUy5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2soUy5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2soUy5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayhTLmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKFMuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKFMuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2soUy5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKFMuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKFMuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayhTLmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2soUy5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2soUy5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayhTLmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKFMudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKFMueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKFMua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP1MubnVtYmVyKCkuaW50KCk6Uy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPVMuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289Uy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxhPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGk9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP2xlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLGJdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IHY9bGUoYix0KTtzdChyLG0sYS5oYXMobSk/djp2Lm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyxiPU9iamVjdC5rZXlzKG0pLHY9W107Zm9yKGNvbnN0IHcgb2YgYil7Y29uc3QgJD1sZShtW3ddLHQpLE49Uy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKHcpKTt2LnB1c2goUy5sb29zZVJlY29yZChOLCQpKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2goUy5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLnYpLF8ubGVuZ3RoPT09MClvPVMub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCB3PVMuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCAkPTI7JDxfLmxlbmd0aDskKyspdz1TLmludGVyc2VjdGlvbih3LF9bJF0pO289d31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IHc9T2JqZWN0LmtleXMociksJD1iLm1hcChJPT5uZXcgUmVnRXhwKEkpKSxOPW87bz1vLmNoZWNrKEk9PntpZighSGUoSS52YWx1ZSkpcmV0dXJuO2NvbnN0IEc9W107Zm9yKGNvbnN0IG9lIG9mIE9iamVjdC5rZXlzKEkudmFsdWUpKXcuaW5jbHVkZXMob2UpfHwkLnNvbWUoSj0+Si50ZXN0KG9lKSl8fEcucHVzaChvZSk7Ry5sZW5ndGgmJkkuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkcsaW5wdXQ6SS52YWx1ZSxpbnN0Ok59KX0pfX1lbHNle2NvbnN0IG09Uy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289bS5zdHJpY3QoKTppP289bS5jYXRjaGFsbChpKTpvPW0ucGFzc3Rocm91Z2goKX1jb25zdCB1PWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsbD10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGQ9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZih1fHxsIT09dm9pZCAwfHxkIT09dm9pZCAwKXtsZXQgbTtpZih1KXtjb25zdCBiPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lczttPWxlKGIsdCl9bz1WYihvLHtrZXlTY2hlbWE6bSxtaW5Qcm9wZXJ0aWVzOmwsbWF4UHJvcGVydGllczpkfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9ci5tYXAobT0+bGUobSx0KSksdT1fdShpLGEpLGw9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6d3Uocyx0KSxkPVMudHVwbGUodSk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9cy5tYXAobT0+bGUobSx0KSksdT1fdShpLGEpLGw9d3UoZS5hZGRpdGlvbmFsSXRlbXMsdCksZD1TLnR1cGxlKHUpO289bD9kLnJlc3QobCk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGE9bGUocyx0KTtsZXQgaT1TLmFycmF5KGEpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5tYXgoZS5tYXhJdGVtcykpLG89aX1lbHNlIG89Uy5hcnJheShTLmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89V2Iobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/bGUoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIGxlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9TLmFueSgpOlMubmV2ZXIoKTtsZXQgbj1CaChlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgaT1lLmFueU9mLm1hcChsPT5sZShsLHQpKSx1PVMudW5pb24oaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBpPWUub25lT2YubWFwKGw9PmxlKGwsdCkpLHU9Uy54b3IoaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjpTLmFueSgpO2Vsc2V7bGV0IGk9bz9uOmxlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgdT1vPzA6MTtmb3IobGV0IGw9dTtsPGUuYWxsT2YubGVuZ3RoO2wrKylpPVMuaW50ZXJzZWN0aW9uKGksbGUoZS5hbGxPZltsXSx0KSk7bj1pfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49Uy5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj1TLnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBpIG9mIHMpaSBpbiBlJiYocltpXT1lW2ldKTtjb25zdCBhPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgaSBvZiBhKWkgaW4gZSYmKHJbaV09ZVtpXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYhSnQoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBpIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbaV0hPT12b2lkIDAmJihyW2ldPWVbaV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIUp0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgaSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVtpXSE9PXZvaWQgMCYmKHJbaV09ZVtpXSl9Zm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoZSkpVWIuaGFzKGkpfHxzdChyLGksZVtpXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gVmgoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89RmIobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/P3dlfTtyZXR1cm4gbGUobixzKX1mdW5jdGlvbiBKaChlKXtyZXR1cm4gWGkoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90OkEobi5vcHRpb25zKX19KX1mdW5jdGlvbiBRYihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBRKGUsdWUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gS2goZSl7cmV0dXJuIFFiKGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBZYihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT9LaChlKTplLmlufWZ1bmN0aW9uIFdoKGUpe3JldHVybiBYaShlLHtwaXBlOnQ9PlliKHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/Vih0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gR2goZSl7cmV0dXJuIFhpKGUse3BpcGU6dD0+S2godC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFhiKGUpe3JldHVybiBZcCh6dCxlKX1mdW5jdGlvbiBldihlKXtyZXR1cm4gb2goRXQsZSl9ZnVuY3Rpb24gdHYoZSl7cmV0dXJuIGxoKEF0LGUpfWZ1bmN0aW9uIG52KGUpe3JldHVybiBwaChPdCxlKX1mdW5jdGlvbiBvdihlKXtyZXR1cm4gJGgoUW4sZSl9Y29uc3QgUWg9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDpudixib29sZWFuOnR2LGRhdGU6b3YsbnVtYmVyOmV2LHN0cmluZzpYYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSwkdT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOk1zLCRpbnB1dDp5aSwkb3V0cHV0OnZpLElOVkFMSUQ6a2ksTkVWRVI6anMsVGltZVByZWNpc2lvbjpKaSxab2RBbnk6Z3IsWm9kQXJyYXk6X3IsWm9kQmFzZTY0OkhuLFpvZEJhc2U2NFVSTDpCbixab2RCaWdJbnQ6T3QsWm9kQmlnSW50Rm9ybWF0OktuLFpvZEJvb2xlYW46QXQsWm9kQ0lEUnY0OlVuLFpvZENJRFJ2NjpGbixab2RDVUlEOlpuLFpvZENVSUQyOk5uLFpvZENhdGNoOnFyLFpvZENvZGVjOnF0LFpvZENvbXBpbGVBc3luY0Vycm9yOndpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOiRpLFpvZENyZWRpdENhcmQ6ZHIsWm9kQ3VzdG9tOkR0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpKZSxab2REYXRlOlFuLFpvZERlZmF1bHQ6T3IsWm9kRGlzY3JpbWluYXRlZFVuaW9uOndyLFpvZEUxNjQ6Vm4sWm9kRW1haWw6RW4sWm9kRW1vamk6T24sWm9kRW51bTpydCxab2RFcnJvcjpEaCxab2RFeGFjdE9wdGlvbmFsOmVvLFpvZEZpbGU6eHIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiB4b30sWm9kRnVuY3Rpb246V3IsWm9kR1VJRDpBbixab2RJQkFOOnByLFpvZElQdjQ6RG4sWm9kSVB2NjpMbixab2RJU09EYXRlOkl0LFpvZElTT0RhdGVUaW1lOlR0LFpvZElTT0R1cmF0aW9uOnh0LFpvZElTT1RpbWU6UHQsWm9kSW5zdGFuY2VPZjpYcixab2RJbnRlcnNlY3Rpb246JHIsWm9kSXNzdWVDb2RlOkxoLFpvZEpXVDpKbixab2RLU1VJRDpxbixab2RMYXp5OlZyLFpvZExpdGVyYWw6UHIsWm9kTUFDOmxyLFpvZE1hcDpUcixab2ROYU46THIsWm9kTmFub0lEOlJuLFpvZE5ldmVyOnZyLFpvZE5vbk9wdGlvbmFsOnRvLFpvZE51bGw6bXIsWm9kTnVsbGFibGU6QXIsWm9kTnVtYmVyOkV0LFpvZE51bWJlckZvcm1hdDpLZSxab2RPYmplY3Q6UnQsWm9kT3B0aW9uYWw6anQsWm9kUGlwZTpNdCxab2RQcmVmYXVsdDpacixab2RQcmVwcm9jZXNzOlVyLFpvZFByb21pc2U6S3IsWm9kUmVhZG9ubHk6RnIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDpvdCxab2RTZXQ6SXIsWm9kU3RyaW5nOnp0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6TXIsWm9kU3ltYm9sOmhyLFpvZFRlbXBsYXRlTGl0ZXJhbDpCcixab2RUcmFuc2Zvcm06Q3IsWm9kVHVwbGU6U3IsWm9kVHlwZTpFLFpvZFVMSUQ6am4sWm9kVVJMOkN0LFpvZFVVSUQ6UGUsWm9kVW5kZWZpbmVkOmZyLFpvZFVuaW9uOlp0LFpvZFVua25vd246YnIsWm9kVm9pZDp5cixab2RYSUQ6TW4sWm9kWG9yOmtyLF9ab2RTdHJpbmc6Q24sX2RlZmF1bHQ6UnIsX2Z1bmN0aW9uOnZ0LGFueTpHbixhcnJheTpQLGJhc2U2NDpPYSxiYXNlNjR1cmw6UmEsYmlnaW50OkthLGJvb2xlYW46TCxjYXRjaDpEcixjaGVjazpnYyxjaWRydjQ6RWEsY2lkcnY2OkFhLGNsb25lOlEsY29kZWM6cGMsY29lcmNlOlFoLGNvbXBpbGU6U2ksY29uZmlnOnRlLGNvcmU6amgsY3JlZGl0Q2FyZDpOYSxjdWlkOiRhLGN1aWQyOlNhLGN1cnJlbmN5Q29kZTpVYSxjdXN0b206R3IsZGF0ZTpYYSxkZWNvZGU6aWEsZGVjb2RlQXN5bmM6Y2EsZGVlcFBhcnRpYWw6SmgsZGVzY3JpYmU6YmMsZGlzY3JpbWluYXRlZFVuaW9uOlluLGUxNjQ6WmEsZW1haWw6aGEsZW1vamk6a2EsZW5jb2RlOnNhLGVuY29kZUFzeW5jOmFhLGVuZHNXaXRoOnduLGVudW06aWUsZXhhY3RPcHRpb25hbDpFcixmaWxlOmNjLGZsYXR0ZW5FcnJvcjpKbyxmbG9hdDMyOkhhLGZsb2F0NjQ6QmEsZm9ybWF0RXJyb3I6S28sZnJvbUpTT05TY2hlbWE6VmgsZnVuY3Rpb246dnQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpkaSxnZXRFcnJvck1hcDpGaCxnbG9iYWxSZWdpc3RyeTp3ZSxndDpNZSxndGU6dmUsZ3VpZDpmYSxoYXNoOkZhLGhleDpMYSxob3N0bmFtZTpEYSxodHRwVXJsOl9hLGliYW46amEsaW5jbHVkZXM6X24saW5wdXQ6V2gsaW5zdGFuY2VvZjp5YyxpbnQ6WXQsaW50MzI6VmEsaW50NjQ6V2EsaW50ZXJzZWN0aW9uOk50LGludmVydENvZGVjOmhjLGlwdjQ6UGEsaXB2NjpDYSxpc286d2MsanNvbjprYyxqd3Q6TWEsa2V5b2Y6ZWMsa3N1aWQ6SWEsbGF6eTpKcixsZW5ndGg6JHQsbGl0ZXJhbDpmLGxvY2FsZXM6YmksbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6cmMsbG93ZXJjYXNlOnZuLGx0OmplLGx0ZTpiZSxtYWM6eGEsbWFwOnNjLG1heExlbmd0aDp3dCxtYXhTaXplOml0LG1lbW9pemVyOnRyLG1ldGE6dmMsbWltZTpTbixtaW5MZW5ndGg6QmUsbWluU2l6ZTpxZSxtdWx0aXBsZU9mOnR0LG5hbjpkYyxuYW5vaWQ6d2EsbmF0aXZlRW51bTphYyxuZWdhdGl2ZTppcixuZXZlcjpudCxub25uZWdhdGl2ZTpjcixub25vcHRpb25hbDpqcixub25wb3NpdGl2ZTphcixub3JtYWxpemU6em4sbnVsbDpXbixudWxsYWJsZTpidCxudWxsaXNoOnVjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYsb3V0cHV0OkdoLG92ZXJ3cml0ZTpBZSxwYXJzZTp0YSxwYXJzZUFzeW5jOm5hLHBhcnRpYWxSZWNvcmQ6b2MscGlwZTpYdCxwb3NpdGl2ZTpzcixwcmVmYXVsdDpOcixwcmVwcm9jZXNzOm5vLHByZXR0aWZ5RXJyb3I6RHMscHJvbWlzZTptYyxwcm9wZXJ0aWVzOiRuLHByb3BlcnR5OnVyLHJlYWRvbmx5OkhyLHJlY29yZDpaLHJlZmluZTpRcixyZWdleDpibixyZWdleGVzOlhvLHJlZ2lzdHJ5Om5yLHNhZmVEZWNvZGU6bGEsc2FmZURlY29kZUFzeW5jOnBhLHNhZmVFbmNvZGU6dWEsc2FmZUVuY29kZUFzeW5jOmRhLHNhZmVQYXJzZTpvYSxzYWZlUGFyc2VBc3luYzpyYSxzZXQ6aWMsc2V0RXJyb3JNYXA6VWgsc2l6ZTprdCxzbHVnaWZ5OnhuLHN0YXJ0c1dpdGg6a24sc3RyaWN0T2JqZWN0OnRjLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpxYSxzdHJpbmdib29sOl9jLHN1Y2Nlc3M6bGMsc3VwZXJSZWZpbmU6WXIsc3ltYm9sOlFhLHRlbXBsYXRlTGl0ZXJhbDpmYyx0b0pTT05TY2hlbWE6WWksdG9Mb3dlckNhc2U6SW4sdG9VcHBlckNhc2U6UG4sdG9ab2Q6TW8sdHJhbnNmb3JtOlhuLHRyZWVpZnlFcnJvcjpxcyx0cmltOlRuLHR1cGxlOnpyLHVpbnQzMjpKYSx1aW50NjQ6R2EsdWxpZDp6YSx1bmRlZmluZWQ6Z3QsdW5pb246QSx1bmtub3duOkQsdXBwZXJjYXNlOnluLHVybDp5YSx1dGlsOk5zLHV1aWQ6bWEsdXVpZHY0OmdhLHV1aWR2NjpiYSx1dWlkdjc6dmEsdmFsaWRhdGU6R28sdmFsaWRhdGVBc3luYzpRbyx2b2lkOllhLHdpdGhQYXJzZXI6emkseGlkOlRhLHhvcjpuY30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxydj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOk1zLCRpbnB1dDp5aSwkb3V0cHV0OnZpLElOVkFMSUQ6a2ksTkVWRVI6anMsVGltZVByZWNpc2lvbjpKaSxab2RBbnk6Z3IsWm9kQXJyYXk6X3IsWm9kQmFzZTY0OkhuLFpvZEJhc2U2NFVSTDpCbixab2RCaWdJbnQ6T3QsWm9kQmlnSW50Rm9ybWF0OktuLFpvZEJvb2xlYW46QXQsWm9kQ0lEUnY0OlVuLFpvZENJRFJ2NjpGbixab2RDVUlEOlpuLFpvZENVSUQyOk5uLFpvZENhdGNoOnFyLFpvZENvZGVjOnF0LFpvZENvbXBpbGVBc3luY0Vycm9yOndpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOiRpLFpvZENyZWRpdENhcmQ6ZHIsWm9kQ3VzdG9tOkR0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpKZSxab2REYXRlOlFuLFpvZERlZmF1bHQ6T3IsWm9kRGlzY3JpbWluYXRlZFVuaW9uOndyLFpvZEUxNjQ6Vm4sWm9kRW1haWw6RW4sWm9kRW1vamk6T24sWm9kRW51bTpydCxab2RFcnJvcjpEaCxab2RFeGFjdE9wdGlvbmFsOmVvLFpvZEZpbGU6eHIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiB4b30sWm9kRnVuY3Rpb246V3IsWm9kR1VJRDpBbixab2RJQkFOOnByLFpvZElQdjQ6RG4sWm9kSVB2NjpMbixab2RJU09EYXRlOkl0LFpvZElTT0RhdGVUaW1lOlR0LFpvZElTT0R1cmF0aW9uOnh0LFpvZElTT1RpbWU6UHQsWm9kSW5zdGFuY2VPZjpYcixab2RJbnRlcnNlY3Rpb246JHIsWm9kSXNzdWVDb2RlOkxoLFpvZEpXVDpKbixab2RLU1VJRDpxbixab2RMYXp5OlZyLFpvZExpdGVyYWw6UHIsWm9kTUFDOmxyLFpvZE1hcDpUcixab2ROYU46THIsWm9kTmFub0lEOlJuLFpvZE5ldmVyOnZyLFpvZE5vbk9wdGlvbmFsOnRvLFpvZE51bGw6bXIsWm9kTnVsbGFibGU6QXIsWm9kTnVtYmVyOkV0LFpvZE51bWJlckZvcm1hdDpLZSxab2RPYmplY3Q6UnQsWm9kT3B0aW9uYWw6anQsWm9kUGlwZTpNdCxab2RQcmVmYXVsdDpacixab2RQcmVwcm9jZXNzOlVyLFpvZFByb21pc2U6S3IsWm9kUmVhZG9ubHk6RnIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDpvdCxab2RTZXQ6SXIsWm9kU3RyaW5nOnp0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6TXIsWm9kU3ltYm9sOmhyLFpvZFRlbXBsYXRlTGl0ZXJhbDpCcixab2RUcmFuc2Zvcm06Q3IsWm9kVHVwbGU6U3IsWm9kVHlwZTpFLFpvZFVMSUQ6am4sWm9kVVJMOkN0LFpvZFVVSUQ6UGUsWm9kVW5kZWZpbmVkOmZyLFpvZFVuaW9uOlp0LFpvZFVua25vd246YnIsWm9kVm9pZDp5cixab2RYSUQ6TW4sWm9kWG9yOmtyLF9ab2RTdHJpbmc6Q24sX2RlZmF1bHQ6UnIsX2Z1bmN0aW9uOnZ0LGFueTpHbixhcnJheTpQLGJhc2U2NDpPYSxiYXNlNjR1cmw6UmEsYmlnaW50OkthLGJvb2xlYW46TCxjYXRjaDpEcixjaGVjazpnYyxjaWRydjQ6RWEsY2lkcnY2OkFhLGNsb25lOlEsY29kZWM6cGMsY29lcmNlOlFoLGNvbXBpbGU6U2ksY29uZmlnOnRlLGNvcmU6amgsY3JlZGl0Q2FyZDpOYSxjdWlkOiRhLGN1aWQyOlNhLGN1cnJlbmN5Q29kZTpVYSxjdXN0b206R3IsZGF0ZTpYYSxkZWNvZGU6aWEsZGVjb2RlQXN5bmM6Y2EsZGVlcFBhcnRpYWw6SmgsZGVmYXVsdDokdSxkZXNjcmliZTpiYyxkaXNjcmltaW5hdGVkVW5pb246WW4sZTE2NDpaYSxlbWFpbDpoYSxlbW9qaTprYSxlbmNvZGU6c2EsZW5jb2RlQXN5bmM6YWEsZW5kc1dpdGg6d24sZW51bTppZSxleGFjdE9wdGlvbmFsOkVyLGZpbGU6Y2MsZmxhdHRlbkVycm9yOkpvLGZsb2F0MzI6SGEsZmxvYXQ2NDpCYSxmb3JtYXRFcnJvcjpLbyxmcm9tSlNPTlNjaGVtYTpWaCxmdW5jdGlvbjp2dCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmRpLGdldEVycm9yTWFwOkZoLGdsb2JhbFJlZ2lzdHJ5OndlLGd0Ok1lLGd0ZTp2ZSxndWlkOmZhLGhhc2g6RmEsaGV4OkxhLGhvc3RuYW1lOkRhLGh0dHBVcmw6X2EsaWJhbjpqYSxpbmNsdWRlczpfbixpbnB1dDpXaCxpbnN0YW5jZW9mOnljLGludDpZdCxpbnQzMjpWYSxpbnQ2NDpXYSxpbnRlcnNlY3Rpb246TnQsaW52ZXJ0Q29kZWM6aGMsaXB2NDpQYSxpcHY2OkNhLGlzbzp3Yyxqc29uOmtjLGp3dDpNYSxrZXlvZjplYyxrc3VpZDpJYSxsYXp5OkpyLGxlbmd0aDokdCxsaXRlcmFsOmYsbG9jYWxlczpiaSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDpyYyxsb3dlcmNhc2U6dm4sbHQ6amUsbHRlOmJlLG1hYzp4YSxtYXA6c2MsbWF4TGVuZ3RoOnd0LG1heFNpemU6aXQsbWVtb2l6ZXI6dHIsbWV0YTp2YyxtaW1lOlNuLG1pbkxlbmd0aDpCZSxtaW5TaXplOnFlLG11bHRpcGxlT2Y6dHQsbmFuOmRjLG5hbm9pZDp3YSxuYXRpdmVFbnVtOmFjLG5lZ2F0aXZlOmlyLG5ldmVyOm50LG5vbm5lZ2F0aXZlOmNyLG5vbm9wdGlvbmFsOmpyLG5vbnBvc2l0aXZlOmFyLG5vcm1hbGl6ZTp6bixudWxsOlduLG51bGxhYmxlOmJ0LG51bGxpc2g6dWMsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6VixvdXRwdXQ6R2gsb3ZlcndyaXRlOkFlLHBhcnNlOnRhLHBhcnNlQXN5bmM6bmEscGFydGlhbFJlY29yZDpvYyxwaXBlOlh0LHBvc2l0aXZlOnNyLHByZWZhdWx0Ok5yLHByZXByb2Nlc3M6bm8scHJldHRpZnlFcnJvcjpEcyxwcm9taXNlOm1jLHByb3BlcnRpZXM6JG4scHJvcGVydHk6dXIscmVhZG9ubHk6SHIscmVjb3JkOloscmVmaW5lOlFyLHJlZ2V4OmJuLHJlZ2V4ZXM6WG8scmVnaXN0cnk6bnIsc2FmZURlY29kZTpsYSxzYWZlRGVjb2RlQXN5bmM6cGEsc2FmZUVuY29kZTp1YSxzYWZlRW5jb2RlQXN5bmM6ZGEsc2FmZVBhcnNlOm9hLHNhZmVQYXJzZUFzeW5jOnJhLHNldDppYyxzZXRFcnJvck1hcDpVaCxzaXplOmt0LHNsdWdpZnk6eG4sc3RhcnRzV2l0aDprbixzdHJpY3RPYmplY3Q6dGMsc3RyaW5nOmgsc3RyaW5nRm9ybWF0OnFhLHN0cmluZ2Jvb2w6X2Msc3VjY2VzczpsYyxzdXBlclJlZmluZTpZcixzeW1ib2w6UWEsdGVtcGxhdGVMaXRlcmFsOmZjLHRvSlNPTlNjaGVtYTpZaSx0b0xvd2VyQ2FzZTpJbix0b1VwcGVyQ2FzZTpQbix0b1pvZDpNbyx0cmFuc2Zvcm06WG4sdHJlZWlmeUVycm9yOnFzLHRyaW06VG4sdHVwbGU6enIsdWludDMyOkphLHVpbnQ2NDpHYSx1bGlkOnphLHVuZGVmaW5lZDpndCx1bmlvbjpBLHVua25vd246RCx1cHBlcmNhc2U6eW4sdXJsOnlhLHV0aWw6TnMsdXVpZDptYSx1dWlkdjQ6Z2EsdXVpZHY2OmJhLHV1aWR2Nzp2YSx2YWxpZGF0ZTpHbyx2YWxpZGF0ZUFzeW5jOlFvLHZvaWQ6WWEsd2l0aFBhcnNlcjp6aSx4aWQ6VGEseG9yOm5jLHo6JHV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksUWU9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsZXM9IjIuMCIsZWU9R3IoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSksWWg9QShbaCgpLEMoKS5pbnQoKV0pLFhoPWgoKTtzZSh7dHRsOkMoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpDKCkub3B0aW9uYWwoKX0pO2NvbnN0IHN2PWcoe3R0bDpDKCkub3B0aW9uYWwoKX0pLGl2PWcoe3Rhc2tJZDpoKCl9KSwkYz1zZSh7cHJvZ3Jlc3NUb2tlbjpZaC5vcHRpb25hbCgpLFtRZV06aXYub3B0aW9uYWwoKX0pLF9lPWcoe19tZXRhOiRjLm9wdGlvbmFsKCl9KSxvbz1fZS5leHRlbmQoe3Rhc2s6c3Yub3B0aW9uYWwoKX0pLGF2PWU9Pm9vLnNhZmVQYXJzZShlKS5zdWNjZXNzLGFlPWcoe21ldGhvZDpoKCkscGFyYW1zOl9lLmxvb3NlKCkub3B0aW9uYWwoKX0pLHplPWcoe19tZXRhOiRjLm9wdGlvbmFsKCl9KSxUZT1nKHttZXRob2Q6aCgpLHBhcmFtczp6ZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxjZT1zZSh7X21ldGE6JGMub3B0aW9uYWwoKX0pLHJvPUEoW2goKSxDKCkuaW50KCldKSxlZj1nKHtqc29ucnBjOmYoZXMpLGlkOnJvLC4uLmFlLnNoYXBlfSkuc3RyaWN0KCksU3U9ZT0+ZWYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsdGY9Zyh7anNvbnJwYzpmKGVzKSwuLi5UZS5zaGFwZX0pLnN0cmljdCgpLGN2PWU9PnRmLnNhZmVQYXJzZShlKS5zdWNjZXNzLFNjPWcoe2pzb25ycGM6ZihlcyksaWQ6cm8scmVzdWx0OmNlfSkuc3RyaWN0KCksdm89ZT0+U2Muc2FmZVBhcnNlKGUpLnN1Y2Nlc3M7dmFyIEY7KGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0aW9uQ2xvc2VkPS0zMmUzXT0iQ29ubmVjdGlvbkNsb3NlZCIsZVtlLlJlcXVlc3RUaW1lb3V0PS0zMjAwMV09IlJlcXVlc3RUaW1lb3V0IixlW2UuUGFyc2VFcnJvcj0tMzI3MDBdPSJQYXJzZUVycm9yIixlW2UuSW52YWxpZFJlcXVlc3Q9LTMyNjAwXT0iSW52YWxpZFJlcXVlc3QiLGVbZS5NZXRob2ROb3RGb3VuZD0tMzI2MDFdPSJNZXRob2ROb3RGb3VuZCIsZVtlLkludmFsaWRQYXJhbXM9LTMyNjAyXT0iSW52YWxpZFBhcmFtcyIsZVtlLkludGVybmFsRXJyb3I9LTMyNjAzXT0iSW50ZXJuYWxFcnJvciIsZVtlLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQ9LTMyMDQyXT0iVXJsRWxpY2l0YXRpb25SZXF1aXJlZCJ9KShGfHwoRj17fSkpO2NvbnN0IHpjPWcoe2pzb25ycGM6ZihlcyksaWQ6cm8ub3B0aW9uYWwoKSxlcnJvcjpnKHtjb2RlOkMoKS5pbnQoKSxtZXNzYWdlOmgoKSxkYXRhOkQoKS5vcHRpb25hbCgpfSl9KS5zdHJpY3QoKSx1dj1lPT56Yy5zYWZlUGFyc2UoZSkuc3VjY2Vzcyxsdj1BKFtlZix0ZixTYyx6Y10pO0EoW1NjLHpjXSk7Y29uc3QgVGM9Y2Uuc3RyaWN0KCksZHY9emUuZXh0ZW5kKHtyZXF1ZXN0SWQ6cm8ub3B0aW9uYWwoKSxyZWFzb246aCgpLm9wdGlvbmFsKCl9KSxJYz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczpkdn0pLHB2PWcoe3NyYzpoKCksbWltZVR5cGU6aCgpLm9wdGlvbmFsKCksc2l6ZXM6UChoKCkpLm9wdGlvbmFsKCksdGhlbWU6aWUoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLHNvPWcoe2ljb25zOlAocHYpLm9wdGlvbmFsKCl9KSx5dD1nKHtuYW1lOmgoKSx0aXRsZTpoKCkub3B0aW9uYWwoKX0pLHRzPXl0LmV4dGVuZCh7Li4ueXQuc2hhcGUsLi4uc28uc2hhcGUsdmVyc2lvbjpoKCksd2Vic2l0ZVVybDpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKX0pLGh2PU50KGcoe2FwcGx5RGVmYXVsdHM6TCgpLm9wdGlvbmFsKCl9KSxaKGgoKSxEKCkpKSxmdj1ubyhlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLE50KGcoe2Zvcm06aHYub3B0aW9uYWwoKSx1cmw6ZWUub3B0aW9uYWwoKX0pLFooaCgpLEQoKSkub3B0aW9uYWwoKSkpLG12PXNlKHtsaXN0OmVlLm9wdGlvbmFsKCksY2FuY2VsOmVlLm9wdGlvbmFsKCkscmVxdWVzdHM6c2Uoe3NhbXBsaW5nOnNlKHtjcmVhdGVNZXNzYWdlOmVlLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnNlKHtjcmVhdGU6ZWUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksZ3Y9c2Uoe2xpc3Q6ZWUub3B0aW9uYWwoKSxjYW5jZWw6ZWUub3B0aW9uYWwoKSxyZXF1ZXN0czpzZSh7dG9vbHM6c2Uoe2NhbGw6ZWUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksYnY9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLGVlKS5vcHRpb25hbCgpLHNhbXBsaW5nOmcoe2NvbnRleHQ6ZWUub3B0aW9uYWwoKSx0b29sczplZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpmdi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczptdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksZWUpLm9wdGlvbmFsKCl9KSx2dj1fZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOmJ2LGNsaWVudEluZm86dHN9KSx5dj1hZS5leHRlbmQoe21ldGhvZDpmKCJpbml0aWFsaXplIikscGFyYW1zOnZ2fSksX3Y9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLGVlKS5vcHRpb25hbCgpLGxvZ2dpbmc6ZWUub3B0aW9uYWwoKSxjb21wbGV0aW9uczplZS5vcHRpb25hbCgpLHByb21wdHM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczpnKHtzdWJzY3JpYmU6TCgpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpndi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksZWUpLm9wdGlvbmFsKCl9KSxrdj1jZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOl92LHNlcnZlckluZm86dHMsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksd3Y9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczp6ZS5vcHRpb25hbCgpfSksbnM9YWUuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczpfZS5vcHRpb25hbCgpfSksJHY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOlYoQygpKSxtZXNzYWdlOlYoaCgpKX0pLFN2PWcoey4uLnplLnNoYXBlLC4uLiR2LnNoYXBlLHByb2dyZXNzVG9rZW46WWh9KSxQYz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOlN2fSksenY9X2UuZXh0ZW5kKHtjdXJzb3I6WGgub3B0aW9uYWwoKX0pLGlvPWFlLmV4dGVuZCh7cGFyYW1zOnp2Lm9wdGlvbmFsKCl9KSxhbz1jZS5leHRlbmQoe25leHRDdXJzb3I6WGgub3B0aW9uYWwoKX0pLFR2PWllKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLGNvPWcoe3Rhc2tJZDpoKCksc3RhdHVzOlR2LHR0bDpBKFtDKCksV24oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOlYoQygpKSxzdGF0dXNNZXNzYWdlOlYoaCgpKX0pLHhjPWNlLmV4dGVuZCh7dGFzazpjb30pLEl2PXplLm1lcmdlKGNvKSxDbz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpJdn0pLENjPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczpfZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLEVjPWNlLm1lcmdlKGNvKSxBYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtjZS5sb29zZSgpO2NvbnN0IE9jPWlvLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLFJjPWFvLmV4dGVuZCh7dGFza3M6UChjbyl9KSxaYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxQdj1jZS5tZXJnZShjbyksbmY9Zyh7dXJpOmgoKSxtaW1lVHlwZTpWKGgoKSksX21ldGE6WihoKCksRCgpKS5vcHRpb25hbCgpfSksb2Y9bmYuZXh0ZW5kKHt0ZXh0OmgoKX0pLE5jPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSkscmY9bmYuZXh0ZW5kKHtibG9iOk5jfSksdW89aWUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLEx0PWcoe2F1ZGllbmNlOlAodW8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6SGgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxzZj1nKHsuLi55dC5zaGFwZSwuLi5zby5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxtaW1lVHlwZTpWKGgoKSksc2l6ZTpWKEMoKSksYW5ub3RhdGlvbnM6THQub3B0aW9uYWwoKSxfbWV0YTpWKHNlKHt9KSl9KSx4dj1nKHsuLi55dC5zaGFwZSwuLi5zby5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246VihoKCkpLG1pbWVUeXBlOlYoaCgpKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlYoc2Uoe30pKX0pLEN2PWlvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxhZj1hby5leHRlbmQoe3Jlc291cmNlczpQKHNmKX0pLEV2PWlvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksQXY9YW8uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKHh2KX0pLGpjPV9lLmV4dGVuZCh7dXJpOmgoKX0pLE92PWpjLFJ2PWFlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOk92fSksY2Y9Y2UuZXh0ZW5kKHtjb250ZW50czpQKEEoW29mLHJmXSkpfSksWnY9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnplLm9wdGlvbmFsKCl9KSxOdj1qYyxqdj1hZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOk52fSksTXY9amMscXY9YWUuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOk12fSksRHY9emUuZXh0ZW5kKHt1cmk6aCgpfSksTHY9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpEdn0pLFV2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxyZXF1aXJlZDpWKEwoKSl9KSxGdj1nKHsuLi55dC5zaGFwZSwuLi5zby5zaGFwZSxkZXNjcmlwdGlvbjpWKGgoKSksYXJndW1lbnRzOlYoUChVdikpLF9tZXRhOlYoc2Uoe30pKX0pLEh2PWlvLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksQnY9YW8uZXh0ZW5kKHtwcm9tcHRzOlAoRnYpfSksVnY9X2UuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6WihoKCksaCgpKS5vcHRpb25hbCgpfSksSnY9YWUuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6VnZ9KSxNYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLHFjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOk5jLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLERjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOk5jLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLEt2PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6WihoKCksRCgpKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSx1Zj1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6QShbb2YscmZdKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGxmPXNmLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxsbz1BKFtNYyxxYyxEYyxsZix1Zl0pLFd2PWcoe3JvbGU6dW8sY29udGVudDpsb30pLEd2PWNlLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChXdil9KSxRdj1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnplLm9wdGlvbmFsKCl9KSxZdj1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6TCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkwoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkwoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6TCgpLm9wdGlvbmFsKCl9KSxYdj1nKHt0YXNrU3VwcG9ydDppZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLExjPWcoey4uLnl0LnNoYXBlLC4uLnNvLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxlZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxlZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSkub3B0aW9uYWwoKSxhbm5vdGF0aW9uczpZdi5vcHRpb25hbCgpLGV4ZWN1dGlvbjpYdi5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGRmPWlvLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2xpc3QiKX0pLGV5PWFvLmV4dGVuZCh7dG9vbHM6UChMYyl9KSxvcz1jZS5leHRlbmQoe2NvbnRlbnQ6UChsbykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6WihoKCksRCgpKS5vcHRpb25hbCgpLGlzRXJyb3I6TCgpLm9wdGlvbmFsKCl9KTtvcy5vcihjZS5leHRlbmQoe3Rvb2xSZXN1bHQ6RCgpfSkpO2NvbnN0IHR5PW9vLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLHBmPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2NhbGwiKSxwYXJhbXM6dHl9KSxueT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczp6ZS5vcHRpb25hbCgpfSk7Zyh7YXV0b1JlZnJlc2g6TCgpLmRlZmF1bHQoITApLGRlYm91bmNlTXM6QygpLmludCgpLm5vbm5lZ2F0aXZlKCkuZGVmYXVsdCgzMDApfSk7Y29uc3QgaGY9aWUoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLG95PV9lLmV4dGVuZCh7bGV2ZWw6aGZ9KSxyeT1hZS5leHRlbmQoe21ldGhvZDpmKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOm95fSksc3k9emUuZXh0ZW5kKHtsZXZlbDpoZixsb2dnZXI6aCgpLm9wdGlvbmFsKCksZGF0YTpEKCl9KSxpeT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6c3l9KSxheT1nKHtuYW1lOmgoKS5vcHRpb25hbCgpfSksY3k9Zyh7aGludHM6UChheSkub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLHV5PWcoe21vZGU6aWUoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSxseT1nKHt0eXBlOmYoInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmgoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDpQKGxvKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpMKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxkeT1ZbigidHlwZSIsW01jLHFjLERjXSksRW89WW4oInR5cGUiLFtNYyxxYyxEYyxLdixseV0pLHB5PWcoe3JvbGU6dW8sY29udGVudDpBKFtFbyxQKEVvKV0pLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGh5PW9vLmV4dGVuZCh7bWVzc2FnZXM6UChweSksbW9kZWxQcmVmZXJlbmNlczpjeS5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpoKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDppZShbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOkMoKS5vcHRpb25hbCgpLG1heFRva2VuczpDKCkuaW50KCksc3RvcFNlcXVlbmNlczpQKGgoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTplZS5vcHRpb25hbCgpLHRvb2xzOlAoTGMpLm9wdGlvbmFsKCksdG9vbENob2ljZTp1eS5vcHRpb25hbCgpfSksZnk9YWUuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpoeX0pLGZmPWNlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246VihpZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTp1byxjb250ZW50OmR5fSksbWY9Y2UuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpWKGllKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTp1byxjb250ZW50OkEoW0VvLFAoRW8pXSl9KSxteT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkwoKS5vcHRpb25hbCgpfSksZ3k9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDppZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxieT1nKHt0eXBlOmllKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLHZ5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLHl5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxfeT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksa3k9QShbdnkseXldKSx3eT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSwkeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLFN5PUEoW3d5LCR5XSksenk9QShbX3ksa3ksU3ldKSxUeT1BKFt6eSxteSxneSxieV0pLEl5PW9vLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlooaCgpLFR5KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksUHk9b28uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSx4eT1BKFtJeSxQeV0pLEN5PWFlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczp4eX0pLEV5PXplLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxBeT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOkV5fSksT3k9Y2UuZXh0ZW5kKHthY3Rpb246aWUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6bm8oZT0+ZT09PW51bGw/dm9pZCAwOmUsWihoKCksQShbaCgpLEMoKSxMKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSksUnk9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksWnk9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSxOeT1fZS5leHRlbmQoe3JlZjpBKFtaeSxSeV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlooaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxqeT1hZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOk55fSksTXk9Y2UuZXh0ZW5kKHtjb21wbGV0aW9uOnNlKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOlYoQygpLmludCgpKSxoYXNNb3JlOlYoTCgpKX0pfSkscXk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxEeT1hZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOl9lLm9wdGlvbmFsKCl9KSxMeT1jZS5leHRlbmQoe3Jvb3RzOlAocXkpfSksVXk9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6emUub3B0aW9uYWwoKX0pO0EoW25zLHl2LGp5LHJ5LEp2LEh2LEN2LEV2LFJ2LGp2LHF2LHBmLGRmLENjLEFjLE9jLFpjXSk7QShbSWMsUGMsd3YsVXksQ29dKTtBKFtUYyxmZixtZixPeSxMeSxFYyxSYyx4Y10pO0EoW25zLGZ5LEN5LER5LENjLEFjLE9jLFpjXSk7QShbSWMsUGMsaXksTHYsWnYsbnksUXYsQ28sQXldKTtBKFtUYyxrdixNeSxHdixCdixhZixBdixjZixvcyxleSxFYyxSYyx4Y10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PUYuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgRnkoci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgRnkgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihGLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24genUoZSl7Y29uc3Qgbj1SYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89WmIobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBUdShlLHQpe2NvbnN0IG49TWgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBIeT02ZTQ7Y2xhc3MgQnl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoSWMsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKFBjLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihucyxuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKENjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEFjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgaTtmb3IoO2k9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoaS50eXBlPT09InJlc3BvbnNlInx8aS50eXBlPT09ImVycm9yIil7Y29uc3QgdT1pLm1lc3NhZ2UsbD11LmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxpLnR5cGU9PT0icmVzcG9uc2UiKWQodSk7ZWxzZXtjb25zdCBtPXUsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09aS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGkubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFhKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighR2UoYS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoR2UoYS5zdGF0dXMpKXtjb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uaSxfbWV0YTp7Li4uaS5fbWV0YSxbUWVdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihPYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFpjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKEdlKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihGLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKEYuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGEpPT57cj8uKHMsYSksdm8ocyl8fHV2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6U3Uocyk/dGhpcy5fb25yZXF1ZXN0KHMsYSk6Y3Yocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoRi5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bUWVdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOkYuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGEpO2NvbnN0IGk9YXYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLHU9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDphLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooRi5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IF89di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBfJiZ1JiZhd2FpdCB1LnVwZGF0ZVRhc2tTdGF0dXMoXywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6dSx0YXNrUmVxdWVzdGVkVHRsOmk/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpGLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWEmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgYT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxpPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihpJiZhJiZpLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaCh1KXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxhKHUpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksdm8odCkpbyh0KTtlbHNle2NvbnN0IGE9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oYSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKHZvKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgYT10LnJlc3VsdDtpZihhLnRhc2smJnR5cGVvZiBhLnRhc2s9PSJvYmplY3QiKXtjb25zdCBpPWEudGFzazt0eXBlb2YgaS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGkudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdm8odCkpcih0KTtlbHNle2NvbnN0IGE9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoYSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChhKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6YSBpbnN0YW5jZW9mIGo/YTpuZXcgaihGLkludGVybmFsRXJyb3IsU3RyaW5nKGEpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBhPWF3YWl0IHRoaXMucmVxdWVzdCh0LHhjLG8pO2lmKGEudGFzaylzPWEudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6YS50YXNrfTtlbHNlIHRocm93IG5ldyBqKEYuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazppfSxHZShpLnN0YXR1cykpe2kuc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06aS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooRi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9Omkuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooRi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGkuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IHU9aS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLHUpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGEpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjphIGluc3RhbmNlb2Ygaj9hOm5ldyBqKEYuSW50ZXJuYWxFcnJvcixTdHJpbmcoYSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmEsdGFzazppLHJlbGF0ZWRUYXNrOnV9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09ST0+e2QoSSl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksaSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goSSl7bShJKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksaSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOml9KSx1JiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtRZV06dX19KTtjb25zdCBfPUk9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKEkpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBHPUkgaW5zdGFuY2VvZiBqP0k6bmV3IGooRi5SZXF1ZXN0VGltZW91dCxTdHJpbmcoSSkpO2QoRyl9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsST0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChJKTt0cnl7Y29uc3QgRz1NaChuLEkucmVzdWx0KTtHLnN1Y2Nlc3M/bChHLmRhdGEpOmQoRy5lcnJvcil9Y2F0Y2goRyl7ZChHKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntfKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IHc9bz8udGltZW91dD8/SHksJD0oKT0+XyhqLmZyb21FcnJvcihGLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6d30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYix3LG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBOPXU/LnRhc2tJZDtpZihOKXtjb25zdCBJPUc9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTtvZT9vZShHKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsSSksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKE4se3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEc9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEcpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YX0pLmNhdGNoKEk9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEkpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxFYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sUmMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sUHYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBpPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbUWVdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTppLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGk9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihpPXsuLi5pLHBhcmFtczp7Li4uaS5wYXJhbXMsX21ldGE6ey4uLmkucGFyYW1zPy5fbWV0YXx8e30sW1FlXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoaSxuKS5jYXRjaCh1PT50aGlzLl9vbmVycm9yKHUpKX0pO3JldHVybn1sZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbUWVdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGEsbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPXp1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGE9VHUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oYSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPXp1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPVR1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZTdShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxhPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2E/KGEobmV3IGooRi5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihGLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgYT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoYSkscyhuZXcgaihGLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxhKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxhLG4pO2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoaSl7Y29uc3QgdT1Dby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOml9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxHZShpLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxhKT0+e2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWkpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihHZShpLnN0YXR1cykpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2kuc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGEsbik7Y29uc3QgdT1hd2FpdCBvLmdldFRhc2socixuKTtpZih1KXtjb25zdCBsPUNvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6dX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLEdlKHUuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIEl1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBWeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBhPW5bcl07SXUoYSkmJkl1KHMpP25bcl09ey4uLmEsLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIEp5IGV4dGVuZHMgQnl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8sYT0+e2xldCBpPWEucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsaSkscy5vbkhhbmRsZXI/LihpKTtmb3IobGV0IHUgb2ZbLi4ucy5saXN0ZW5lcnNdKXUoaSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIEt5PSIyMDI2LTAxLTI2IixXeT0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIEd5e2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1sdi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PVd5JiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgUXk9QShbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksZW49QShbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLFl5PUEoW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLFh5PVooWXkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksQShbaCgpLGd0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIGVfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLHRfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxuXz1nKHtpc0Vycm9yOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIFVjPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLEZjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBvXz1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSkscl89Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLHNfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxpXz1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLGFfPWcoe3ZhcmlhYmxlczpYeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOmlfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxjXz1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtaKGgoKSxEKCkpO3ZhciBQdT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIHVfPWcoe2V4cGVyaW1lbnRhbDpaKGgoKSxaKGgoKSxHbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOkZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpVYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpQdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6UHUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxsXz1nKHtleHBlcmltZW50YWw6WihoKCksWihoKCksR24oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAoZW4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6VWMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOkZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTplbi5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBkXz1nKHttb2RlOmVuLmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxwXz1BKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UChwXykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpudCgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6bnQoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChBKFt1ZixsZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAobG8pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpVYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOkZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIGhfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOm9zLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksZ2Y9Zyh7dG9vbEluZm86Zyh7aWQ6cm8ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOkxjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOlF5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6YV8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOmVuLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChlbikub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkEoW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0OkEoW0MoKSxndCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEEoW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOkEoW0MoKSxndCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06QShbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLGZfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOmdmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAobG8pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpaKGgoKSxEKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86dHMuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOmxfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBtXz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOnRzLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6dV8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6Z2YuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksZ189e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIHh1KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oZ18pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IEhmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ydiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBDdShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGE9cy5wYXRoPy5tYXAoaT0+dHlwZW9mIGk9PSJvYmplY3QiP2kua2V5OmkpLmpvaW4oIi4iKTtyZXR1cm4gYT9gJHthfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gYl8oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gdl8oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIHlfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgSGMgZXh0ZW5kcyBKeXtfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6b18sdG9vbGlucHV0cGFydGlhbDpyXyx0b29scmVzdWx0OmhfLHRvb2xjYW5jZWxsZWQ6c18saG9zdGNvbnRleHRjaGFuZ2VkOmZffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFIYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8dGUoe2ppdGxlc3M6ITB9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKG5zLHI9Pihjb25zb2xlLmxvZygiUmVjZWl2ZWQgcGluZzoiLHIucGFyYW1zKSx7fSkpLHRoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHZvaWQgMCl9cmVnaXN0ZXJDYXBhYmlsaXRpZXModCl7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBjYXBhYmlsaXRpZXMgYWZ0ZXIgdHJhbnNwb3J0IGlzIGVzdGFibGlzaGVkIik7dGhpcy5fY2FwYWJpbGl0aWVzPVZ5KHRoaXMuX2NhcGFiaWxpdGllcyx0KX1yZWdpc3RlclRvb2wodCxuLG8pe2lmKHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XSl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGApO2xldCByPXRoaXMscz0oKT0+e3IuX2luaXRpYWxpemVkU2VudCYmci5fY2FwYWJpbGl0aWVzLnRvb2xzPy5saXN0Q2hhbmdlZCYmci5zZW5kVG9vbExpc3RDaGFuZ2VkKCl9LGE9bi5pbnB1dFNjaGVtYSE9PXZvaWQgMCxpPXt0aXRsZTpuLnRpdGxlLGRlc2NyaXB0aW9uOm4uZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6bi5pbnB1dFNjaGVtYSxvdXRwdXRTY2hlbWE6bi5vdXRwdXRTY2hlbWEsYW5ub3RhdGlvbnM6bi5hbm5vdGF0aW9ucyxfbWV0YTpuLl9tZXRhLGVuYWJsZWQ6ITAsZW5hYmxlKCl7dGhpcy5lbmFibGVkPSEwLHMoKX0sZGlzYWJsZSgpe3RoaXMuZW5hYmxlZD0hMSxzKCl9LHVwZGF0ZSh1KXtPYmplY3QuYXNzaWduKHRoaXMsdSkscygpfSxyZW1vdmUoKXtyLl9yZWdpc3RlcmVkVG9vbHNbdF09PT1pJiYoZGVsZXRlIHIuX3JlZ2lzdGVyZWRUb29sc1t0XSxzKCkpfSxoYW5kbGVyOmFzeW5jKHUsbCk9PntpZighaS5lbmFibGVkKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgZGlzYWJsZWRgKTtsZXQgZDtpZihhKXtsZXQgbT1pLmlucHV0U2NoZW1hLGI9bT9hd2FpdCBDdShtLHU/P3t9LGBJbnZhbGlkIGlucHV0IGZvciB0b29sICR7dH06IGApOnU/P3t9O2Q9YXdhaXQgbyhiLGwpfWVsc2UgZD1hd2FpdCBvKGwpO3JldHVybiBpLm91dHB1dFNjaGVtYSYmIWQuaXNFcnJvciYmKGQuc3RydWN0dXJlZENvbnRlbnQ9YXdhaXQgQ3UoaS5vdXRwdXRTY2hlbWEsZC5zdHJ1Y3R1cmVkQ29udGVudCxgSW52YWxpZCBvdXRwdXQgZm9yIHRvb2wgJHt0fTogYCkpLGR9fTtyZXR1cm4gdGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdPWksIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyYmIXRoaXMudHJhbnNwb3J0JiZ0aGlzLnJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHt0b29sczp7bGlzdENoYW5nZWQ6ITB9fSksdGhpcy5lbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpLHMoKSxpfV90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMTtlbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpe3RoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkfHwodGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vbmNhbGx0b29sPWFzeW5jKHQsbik9PntsZXQgbz10aGlzLl9yZWdpc3RlcmVkVG9vbHNbdC5uYW1lXTtpZighbyl0aHJvdyBFcnJvcihgVG9vbCAke3QubmFtZX0gbm90IGZvdW5kYCk7cmV0dXJuIG8uaGFuZGxlcih0LmFyZ3VtZW50cyxuKX0sdGhpcy5vbmxpc3R0b29scz1hc3luYyh0LG4pPT4oe3Rvb2xzOmF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHRoaXMuX3JlZ2lzdGVyZWRUb29scykuZmlsdGVyKChbbyxyXSk9PnIuZW5hYmxlZCkubWFwKGFzeW5jKFtvLHJdKT0+e2xldCBzPXtuYW1lOm8sdGl0bGU6ci50aXRsZSxkZXNjcmlwdGlvbjpyLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOnIuaW5wdXRTY2hlbWE/YXdhaXQgeHUoci5pbnB1dFNjaGVtYSwiaW5wdXQiKTp7dHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnt9fX07cmV0dXJuIHIub3V0cHV0U2NoZW1hJiYocy5vdXRwdXRTY2hlbWE9YXdhaXQgeHUoci5vdXRwdXRTY2hlbWEsIm91dHB1dCIpKSxyLmFubm90YXRpb25zJiYocy5hbm5vdGF0aW9ucz1yLmFubm90YXRpb25zKSxyLl9tZXRhJiYocy5fbWV0YT1yLl9tZXRhKSxzfSkpfSkpfWFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQodD17fSl7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRUb29sTGlzdENoYW5nZWQiKSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIscGFyYW1zOnR9KX1nZXRIb3N0Q2FwYWJpbGl0aWVzKCl7cmV0dXJuIHRoaXMuX2hvc3RDYXBhYmlsaXRpZXN9Z2V0SG9zdFZlcnNpb24oKXtyZXR1cm4gdGhpcy5faG9zdEluZm99Z2V0SG9zdENvbnRleHQoKXtyZXR1cm4gdGhpcy5faG9zdENvbnRleHR9Z2V0IG9udG9vbGlucHV0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiKX1zZXQgb250b29saW5wdXQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIsdCl9Z2V0IG9udG9vbGlucHV0cGFydGlhbCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIpfXNldCBvbnRvb2xpbnB1dHBhcnRpYWwodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiLHQpfWdldCBvbnRvb2xyZXN1bHQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiKX1zZXQgb250b29scmVzdWx0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iix0KX1nZXQgb250b29sY2FuY2VsbGVkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIil9c2V0IG9udG9vbGNhbmNlbGxlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIsdCl9Z2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiKX1zZXQgb25ob3N0Y29udGV4dGNoYW5nZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdCl9X29udGVhcmRvd247Z2V0IG9udGVhcmRvd24oKXtyZXR1cm4gdGhpcy5fb250ZWFyZG93bn1zZXQgb250ZWFyZG93bih0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9udGVhcmRvd24iLHRoaXMuX29udGVhcmRvd24sdCksdGhpcy5fb250ZWFyZG93bj10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGNfLChuLG8pPT57aWYoIXRoaXMuX29udGVhcmRvd24pdGhyb3cgRXJyb3IoIk5vIG9udGVhcmRvd24gaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb250ZWFyZG93bihuLnBhcmFtcyxvKX0pfV9vbmNhbGx0b29sO2dldCBvbmNhbGx0b29sKCl7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2x9c2V0IG9uY2FsbHRvb2wodCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmNhbGx0b29sIix0aGlzLl9vbmNhbGx0b29sLHQpLHRoaXMuX29uY2FsbHRvb2w9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihwZiwobixvKT0+e2lmKCF0aGlzLl9vbmNhbGx0b29sKXRocm93IEVycm9yKCJObyBvbmNhbGx0b29sIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2wobi5wYXJhbXMsbyl9KX1fb25saXN0dG9vbHM7Z2V0IG9ubGlzdHRvb2xzKCl7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzfXNldCBvbmxpc3R0b29scyh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9ubGlzdHRvb2xzIix0aGlzLl9vbmxpc3R0b29scyx0KSx0aGlzLl9vbmxpc3R0b29scz10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGRmLChuLG8pPT57aWYoIXRoaXMuX29ubGlzdHRvb2xzKXRocm93IEVycm9yKCJObyBvbmxpc3R0b29scyBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmxpc3R0b29scyhuLnBhcmFtcyxvKX0pfWFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodCl7c3dpdGNoKHQpe2Nhc2Uic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSI6aWYoIXRoaXMuX2hvc3RDYXBhYmlsaXRpZXM/LnNhbXBsaW5nKXRocm93IEVycm9yKGBIb3N0IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke3R9KWApO2JyZWFrfX1hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkodCl7c3dpdGNoKHQpe2Nhc2UidG9vbHMvY2FsbCI6Y2FzZSJ0b29scy9saXN0IjppZighdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKXRocm93IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhcGFiaWxpdHkgKHJlcXVpcmVkIGZvciAke3R9KWApO3JldHVybjtjYXNlInBpbmciOmNhc2UidWkvcmVzb3VyY2UtdGVhcmRvd24iOnJldHVybjtkZWZhdWx0OnRocm93IEVycm9yKGBObyBoYW5kbGVyIGZvciBtZXRob2QgJHt0fSByZWdpc3RlcmVkYCl9fWFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodCl7fWFzc2VydFRhc2tDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFzayBoYW5kbGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzeW5jIGNhbGxTZXJ2ZXJUb29sKHQsbil7aWYodGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNhbGxTZXJ2ZXJUb29sIiksdHlwZW9mIHQ9PSJzdHJpbmciKXRocm93IEVycm9yKGBjYWxsU2VydmVyVG9vbCgpIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgYnV0IHJlY2VpdmVkIGEgc3RyaW5nICgiJHt0fSIpLiBEaWQgeW91IG1lYW46IGNhbGxTZXJ2ZXJUb29sKHsgbmFtZTogIiR7dH0iLCBhcmd1bWVudHM6IHsgLi4uIH0gfSk/YCk7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0b29scy9jYWxsIixwYXJhbXM6dH0sb3Mse29ucHJvZ3Jlc3M6KCk9Pnt9LHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6ITAsLi4ubn0pfWFzeW5jIHJlYWRTZXJ2ZXJSZXNvdXJjZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVhZFNlcnZlclJlc291cmNlIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9yZWFkIixwYXJhbXM6dH0sY2Ysbil9YXN5bmMgbGlzdFNlcnZlclJlc291cmNlcyh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgibGlzdFNlcnZlclJlc291cmNlcyIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvbGlzdCIscGFyYW1zOnR9LGFmLG4pfWFzeW5jIGNyZWF0ZVNhbXBsaW5nTWVzc2FnZSh0LG4pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjcmVhdGVTYW1wbGluZ01lc3NhZ2UiKTtsZXQgbz10LnRvb2xzP21mOmZmO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIscGFyYW1zOnR9LG8sbil9c2VuZE1lc3NhZ2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRNZXNzYWdlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL21lc3NhZ2UiLHBhcmFtczp0fSxuXyxuKX1zZW5kTG9nKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL21lc3NhZ2UiLHBhcmFtczp0fSl9dXBkYXRlTW9kZWxDb250ZXh0KHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJ1cGRhdGVNb2RlbENvbnRleHQiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiLHBhcmFtczp0fSxUYyxuKX1vcGVuTGluayh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgib3BlbkxpbmsiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvb3Blbi1saW5rIixwYXJhbXM6dH0sZV8sbil9c2VuZE9wZW5MaW5rPXRoaXMub3Blbkxpbms7ZG93bmxvYWRGaWxlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJkb3dubG9hZEZpbGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvZG93bmxvYWQtZmlsZSIscGFyYW1zOnR9LHRfLG4pfXJlcXVlc3RUZWFyZG93bih0PXt9KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIixwYXJhbXM6dH0pfXJlcXVlc3REaXNwbGF5TW9kZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVxdWVzdERpc3BsYXlNb2RlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIixwYXJhbXM6dH0sZF8sbil9c2VuZFNpemVDaGFuZ2VkKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIscGFyYW1zOnR9KX1zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpe2xldCB0PSExLG49MCxvPTAscj0oKT0+e3R8fCh0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3Q9ITE7bGV0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9YS5zdHlsZS5oZWlnaHQ7YS5zdHlsZS5oZWlnaHQ9Im1heC1jb250ZW50IjtsZXQgdT1NYXRoLmNlaWwoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO2Euc3R5bGUuaGVpZ2h0PWk7bGV0IGw9TWF0aC5jZWlsKHdpbmRvdy5pbm5lcldpZHRoKTsobCE9PW58fHUhPT1vKSYmKG49bCxvPXUsdGhpcy5zZW5kU2l6ZUNoYW5nZWQoe3dpZHRoOmwsaGVpZ2h0OnV9KSl9KSl9O3IoKTtsZXQgcz1uZXcgUmVzaXplT2JzZXJ2ZXIocik7cmV0dXJuIHMub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHMub2JzZXJ2ZShkb2N1bWVudC5ib2R5KSwoKT0+cy5kaXNjb25uZWN0KCl9YXN5bmMgY29ubmVjdCh0PW5ldyBHeSh3aW5kb3cucGFyZW50LHdpbmRvdy5wYXJlbnQpLG4pe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJBcHAgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyBhZ2Fpbi4iKTt0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITEsYXdhaXQgc3VwZXIuY29ubmVjdCh0KTt0cnl7bGV0IG89YXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2luaXRpYWxpemUiLHBhcmFtczp7YXBwQ2FwYWJpbGl0aWVzOnRoaXMuX2NhcGFiaWxpdGllcyxhcHBJbmZvOnRoaXMuX2FwcEluZm8scHJvdG9jb2xWZXJzaW9uOkt5fX0sbV8sbik7aWYobz09PXZvaWQgMCl0aHJvdyBFcnJvcihgU2VydmVyIHNlbnQgaW52YWxpZCBpbml0aWFsaXplIHJlc3VsdDogJHtvfWApO3RoaXMuX2hvc3RDYXBhYmlsaXRpZXM9by5ob3N0Q2FwYWJpbGl0aWVzLHRoaXMuX2hvc3RJbmZvPW8uaG9zdEluZm8sdGhpcy5faG9zdENvbnRleHQ9by5ob3N0Q29udGV4dCxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIn0pLHRoaXMuX2luaXRpYWxpemVkU2VudD0hMCx0aGlzLm9wdGlvbnM/LmF1dG9SZXNpemUmJnRoaXMuc2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsb3NlKCksb319fWxldCBFdT0iIjtjb25zdCBiZj0oZSx0LG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT0+e2lmKCFlKXJldHVybjsoZS50aGVtZT09PSJsaWdodCJ8fGUudGhlbWU9PT0iZGFyayIpJiZ0LmFwcGx5RG9jdW1lbnRUaGVtZShlLnRoZW1lKTtjb25zdCBvPWUuc3R5bGVzPy52YXJpYWJsZXM7byYmdHlwZW9mIG89PSJvYmplY3QiJiZ0LmFwcGx5SG9zdFN0eWxlVmFyaWFibGVzKG8pO2NvbnN0IHI9ZS5zdHlsZXM/LmNzcz8uZm9udHM7dHlwZW9mIHI9PSJzdHJpbmciJiZyJiZyIT09RXUmJih0LmFwcGx5SG9zdEZvbnRzKHIpLEV1PXIpO2NvbnN0IHM9ZS5zYWZlQXJlYUluc2V0cztpZihzKWZvcihjb25zdCBhIG9mWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSl7Y29uc3QgaT1OdW1iZXIoc1thXT8/MCk7bi5zdHlsZS5zZXRQcm9wZXJ0eShgLS1pbnNldC0ke2F9YCxgJHtOdW1iZXIuaXNGaW5pdGUoaSkmJmk+MD9pOjB9cHhgKX19LEVlPW5ldyBIYyh7bmFtZToiaG90ZWwtc3RvcmVmcm9udCIsdmVyc2lvbjoiMS4wLjAifSx7b3BlbkxpbmtzOnt9LGF2YWlsYWJsZURpc3BsYXlNb2RlczpbImlubGluZSIsImZ1bGxzY3JlZW4iXX0pLHZmPXthcHBseURvY3VtZW50VGhlbWU6Yl8sYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6dl8sYXBwbHlIb3N0Rm9udHM6eV99LHBlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGM9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IGR0PSIiLHBzPSIiLHlmPXt9LF9mPSExLGtmPSIiLFQ9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LFk9MTtjb25zdCBBdT01O2xldCBYPW51bGwsX3Q9W10sTGU9IiIsaGU9W10scT1udWxsLEFvPTA7Y29uc3QgX189bmV3IFNldChbImZvcmdldFByZWZlcmVuY2VzIiwiYWRkVG9UcmlwIiwiY2xlYXJUcmlwIiwicmVxdWVzdEJvb2tpbmciLCJjYW5jZWxCb29raW5nIiwiY2hhbmdlQm9va2luZyIsInNpZ25JbiIsInNpZ25PdXQiXSksdG49ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtyZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9gaG90ZWw6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BleHRyYXM6Ym9va2luZzoke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YGV4dHJhczoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyJ8fHQ9PT0icG9saWN5LW1pc3NpbmciP2Bwb2xpY3k6JHtlLmhvdGVsPy5pZD8/IiJ9OiR7ZS50b3BpYz8/IiJ9YDp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij9gY2FuY2VsOiR7ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iY2hhbmdlLXByZXZpZXciP2BjaGFuZ2U6JHtlLmNvbmZpcm1hdGlvbkNvZGU/P2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImRlc3RpbmF0aW9ucyI/YGRlc3RpbmF0aW9uczoke2Uuc2NvcGU/Lm5hbWU/PyIifWA6dD09PSJob3RlbHMifHx0PT09Im5vLWhvdGVscyI/YGhvdGVsczoke2UuYXNrPy5jaXR5Pz8iIn06JHtlLmFzaz8ucXVlcnk/P2UucXVlcnk/PyIifWA6dH0sX289ZT0+eyFxfHx3Xy5oYXMoU3RyaW5nKHEudmlldykpfHx0bihlKSE9PXRuKHEpJiYoaGU9Wy4uLmhlLHtwYXlsb2FkOnEsbGFiZWw6JF8ocSksdmVyc2lvbjpBb31dLnNsaWNlKC02KSl9LGtfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbHMifHx0PT09ImRlc3RpbmF0aW9ucyJ8fHQ9PT0ibm8taG90ZWxzIiYmZS5hc2spJiZlLmFzaylyZXR1cm57a2V5OiJsaXN0SG90ZWxzIixhcmdzOnsuLi5lLmFza319O2lmKHQ9PT0iY29tcGFyaXNvbiImJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5zKSlyZXR1cm57a2V5OiJjb21wYXJlIixhcmdzOnsuLi5uLC4uLmUudGl0bGU/e3RpdGxlOmUudGl0bGV9Ont9LC4uLmUucmVjb21tZW5kZWQ/e3JlY29tbWVuZGVkOmUucmVjb21tZW5kZWR9Ont9LGVudHJpZXM6ZS5jb2x1bW5zLm1hcChvPT4oe2hvdGVsOm8uaG90ZWw/LmlkLC4uLm8uYmVzdEZvcj97YmVzdEZvcjpvLmJlc3RGb3J9Ont9LC4uLm8ucHJvcz8ubGVuZ3RoP3twcm9zOm8ucHJvc306e30sLi4uby5jb25zPy5sZW5ndGg/e2NvbnM6by5jb25zfTp7fX0pKX19O2lmKCh0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyIpJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJnZXRIb3RlbCIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5uLC4uLmUucm9vbXNfd2FudGVkP3tyb29tczplLnJvb21zX3dhbnRlZH06e319fTtpZih0PT09ImV4dHJhcyImJmUuZm9yQm9va2luZylyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntib29raW5nOmUuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfX07aWYodD09PSJleHRyYXMiJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm59fTtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJue2tleToiaXRpbmVyYXJ5IixhcmdzOnt0aXRsZTplLnRpdGxlLC4uLm4sZGF5czooZS5kYXlzPz9bXSkubWFwKG89Pih7bGFiZWw6by5sYWJlbCwuLi5vLm5vdGU/e25vdGU6by5ub3RlfTp7fSxpdGVtczooby5pdGVtcz8/W10pLm1hcChyPT5yLmlkKX0pKX19fSxPdT1lPT57aGU9aGUuZmlsdGVyKHQ9PiFlLmluY2x1ZGVzKFN0cmluZyh0LnBheWxvYWQ/LnZpZXcpKSl9LHdfPW5ldyBTZXQoWyJmaW5kLWJvb2tpbmciLCJib29raW5nIiwiY2FuY2VsbGVkIiwiY2hhbmdlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0IiwibWVtYmVyLXNpZ24taW4iLCJtZW1iZXItbm90LWZvdW5kIl0pLCRfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJkZXN0aW5hdGlvbnMiKXJldHVybiBlLnNjb3BlPy5uYW1lP1N0cmluZyhlLnNjb3BlLm5hbWUpOiJhbGwgZGVzdGluYXRpb25zIjtpZih0PT09ImhvdGVscyIpe2lmKGUuYXNrPy5jaXR5KXJldHVybiBTdHJpbmcoZS5hc2suY2l0eSk7Y29uc3Qgbj1bLi4ubmV3IFNldCgoZS5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8uY2l0eSkpKV07cmV0dXJuIG4ubGVuZ3RoPT09MT9TdHJpbmcoblswXSk6YCR7ZS50b3RhbD8/MH0gaG90ZWxzYH1yZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciPyJ0aGUgY2FuY2VsbGF0aW9uIjp0PT09ImNoYW5nZS1wcmV2aWV3Ij8idGhlIGNoYW5nZSI6dD09PSJtZW1iZXIiPyJ5b3VyIG1lbWJlcnNoaXAiOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGFkZC1vbnMgZm9yICR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSx3Zj0oKT0+e2NvbnN0IGU9cGUoImJhY2tidG4iKSx0PWhlLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IEt0PSIiLElzPSIiLG5uPTAsQmM9ITE7Y29uc3QgJGY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihJcz10LnRyaXBJZCksbm49TnVtYmVyKHQuY291bnQ/PzApLEFycmF5LmlzQXJyYXkodC5saW5lcykmJihfdD10LmxpbmVzLEJjPSEwKSl9LFNfPWU9PklzP3suLi5lLHRyaXA6SXN9OmUsel89ZT0+eWZbZV0/PyIiO2xldCBVdD0hMTtjb25zdCBSdT1lPT57VXQ9ZSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY2FyZCIpPy5jbGFzc0xpc3QudG9nZ2xlKCJidXN5IixlKX07bGV0IE9vPTAsU2Y9IiIsemY9IiI7Y29uc3QgWWU9KCk9Pntjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5oZWFkIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9KCk9PmUuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSk7dCgpLHNldFRpbWVvdXQodCwxODApfSxNPShlLHQ9e30sbj17fSk9Pntjb25zdCBvPXpfKGUpO2lmKCFvKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYG5vIHRvb2wgZm9yICR7ZX1gKSk7aWYoVXQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtSdSghMCk7Y29uc3Qgcj1PbztyZXR1cm4gRWUuY2FsbFNlcnZlclRvb2woe25hbWU6byxhcmd1bWVudHM6U18odCl9KS5maW5hbGx5KCgpPT5SdSghMSkpLnRoZW4ocz0+eyRmKHM/Ll9tZXRhKTtjb25zdCBhPXM/LnN0cnVjdHVyZWRDb250ZW50LGk9YSYmbi5mb2xkP24uZm9sZChhKTphLHU9X18uaGFzKGUpJiZpJiZpLnZpZXchPT0iZXJyb3IiO2lmKHI9PT1PbyYmaSl7U2Y9YT9KU09OLnN0cmluZ2lmeShhKToiIix6Zj1KU09OLnN0cmluZ2lmeShpKTtjb25zdCBsPXRuKGkpIT09dG4ocSk7bi5wdXNoIT09ITEmJl9vKGkpLHUmJihBbys9MSksaS52aWV3PT09ImJvb2tpbmciJiYoT3UoWyJ0cmlwIiwibmVlZHMtZGF0ZXMiLCJuZWVkcy1ndWVzdCJdKSxDZT1udWxsKSwoaS52aWV3PT09ImNhbmNlbGxlZCJ8fGkudmlldz09PSJjaGFuZ2VkIikmJk91KFsiY2FuY2VsbGF0aW9uLXByZXZpZXciLCJjaGFuZ2UtcHJldmlldyJdKSx4ZShpKSxsJiZZZSgpfWVsc2UgdSYmKEFvKz0xKTtyZXR1cm4gVF8ocyxuLm5vdGUpLHN9KX0sVF89KGUsdCk9Pntjb25zdCBuPShlPy5jb250ZW50Pz9bXSkuZmluZChvPT5vPy50eXBlPT09InRleHQiKT8udGV4dDshbnx8IUVlLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8udXBkYXRlTW9kZWxDb250ZXh0fHxFZS51cGRhdGVNb2RlbENvbnRleHQoe2NvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OnQ/YCR7dH0gJHtTdHJpbmcobil9YDpTdHJpbmcobil9XX0pLmNhdGNoKCgpPT57fSl9O2xldCBycz0hMTtjb25zdCBJXz0iKFRoZSBjYXJkIHByaWNlZCBpdHMgb3duIGRlZmF1bHQgZGF0ZXMsIHRvbmlnaHQsIHRvIHNob3cgdGhlIHJvb21zOyB0aGUgZ3Vlc3QgaGFzIG5vdCBjaG9zZW4gdGhlbS4pIixGdD1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxIdD1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksUF89Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+Jyx4Xz1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke1BffSR7YyhlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7YyhlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixuZT0oKT0+X2Y/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtjKGtmfHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsb249ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LFBzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxXZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtvbihlLmNoZWNrSW4pfSDigJMgJHtvbihlLmNoZWNrT3V0KX0gwrcgJHtQcyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7UHMoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsQ189KGUsdCxuKT0+e2NvbnN0IG89X3QuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LEVfPShlLHQpPT57Y29uc3Qgbj1fdC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sUm89KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7YyhuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7YyhuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Mobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsVGY9KGUsdCk9Pntjb25zdCBuPXR8fElmKCk7cmV0dXJuKCFULmNoZWNrSW58fFQuY2hlY2tJbjxuKSYmKFQuY2hlY2tJbj1uKSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PVZlKFQuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7YyhULmNoZWNrSW4pfSIgbWluPSIke2Mobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhWZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke2Moc3MoKSl9PC9zcGFuPgogIDwvZGl2PmB9LHNzPSgpPT57Y29uc3QgZT1ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/UHMoVC5jaGVja0luLFQuY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj1ZPjE/YCR7WX0gcm9vbXNgOiIiO3JldHVyblt0LG5dLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIil9LFZlPShlLHQpPT5uZXcgRGF0ZShEYXRlLnBhcnNlKGAke2V9VDEyOjAwOjAwWmApK3QqODY0ZTUpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksSWY9KCk9Pm5ldyBEYXRlKERhdGUubm93KCktbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKjZlNCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxQZj1lPT57Y29uc3QgdD1bLi4uZT8udG9kYXk/W2UudG9kYXkubWluLGUudG9kYXkubWF4XTpbXSwuLi4oZT8uaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLnRvZGF5VGhlcmU/PyIiKSldLmZpbHRlcihvPT4vXlxkezR9LVxkezJ9LVxkezJ9JC8udGVzdChvKSkuc29ydCgpLG49SWYoKTtyZXR1cm57bWluOlt0WzBdPz9uLG5dLnNvcnQoKVswXT8/bixzdGFydDp0LmF0KC0xKT8/bn19LEFfPWU9Pntjb25zdHttaW46dCxzdGFydDpufT1QZihlKTsoIVQuY2hlY2tJbnx8VC5jaGVja0luPHQpJiYoVC5jaGVja0luPW4pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9VmUoVC5jaGVja0luLDEpKTtjb25zdCBvPWA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgICAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImRjaSIgdmFsdWU9IiR7YyhULmNoZWNrSW4pfSIgbWluPSIke2ModCl9Ij48L2xhYmVsPgogICAgICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImRjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKFZlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHtlLnNjb3BlPyIiOic8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZCI+U2VhcmNoPC9idXR0b24+J30KICAgICAgPC9kaXY+YCxyPWA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICA8bGFiZWwgY2xhc3M9IndoZXJlIj5XaGVyZSB0bzxpbnB1dCBpZD0id2hlcmUiIHR5cGU9InNlYXJjaCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBIGNpdHksIGEgY291bnRyeSBvciBhIGhvdGVsIiBhcmlhLWxhYmVsPSJXaGVyZSB0byI+PC9sYWJlbD4KICAgICAgJHtvfQogICAgPC9kaXY+YCxzPWw9PmA8ZGl2IGNsYXNzPSJwbGFjZXMiPiR7bC5tYXAoKGQsbSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhkLm5hbWUpfSIke20+PVhlPyIgaGlkZGVuIjoiIn0+JHtjKGQubmFtZSl9IDxzbWFsbD4ke2MoZC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0ke2wubGVuZ3RoPlhlP2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7bC5sZW5ndGgtWGV9IG1vcmU8L2J1dHRvbj5gOiIifTwvZGl2PmAsYT1lLnNjb3BlO2lmKGEpcmV0dXJuW25lKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoYS5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS50b3RhbCl9ICR7YyhlLnZvY2FiPy5ub3VuUGx1cmFsPz8iaG90ZWxzIil9IGluICR7YygoYS5jaXRpZXM/P1tdKS5sZW5ndGgpfSBjaXRpZXM8L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzZWFyY2giPiR7b308L2Rpdj5gLHMoYS5jaXRpZXM/P1tdKSxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZS1hbGw9IiR7YyhhLm5hbWUpfSI+QWxsICR7YyhlLnRvdGFsKX0gaW4gJHtjKGEubmFtZSl9PC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3QgaT1lLnJlZ2lvbnM/P1tdLHU9aS5mbGF0TWFwKGw9PmwuY291bnRyaWVzPz9bXSkuZmxhdE1hcChsPT5sLmNpdGllcz8/W10pLm1hcCgobCxkKT0+KHtjOmwsaTpkfSkpLnNvcnQoKGwsZCk9Pk51bWJlcihkLmMuY291bnQpLU51bWJlcihsLmMuY291bnQpfHxsLmktZC5pKS5zbGljZSgwLFhlKS5tYXAoKHtjOmx9KT0+bCk7cmV0dXJuW25lKCkscix1Lmxlbmd0aD9gPGRpdiBjbGFzcz0icmVnaW9uIj48ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+VG9wIGNpdGllczwvZGl2PiR7cyh1KX08L2Rpdj5gOiIiLGkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJyZWdpb24iPjxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj5CeSByZWdpb248L2Rpdj48ZGl2IGNsYXNzPSJwbGFjZXMiPiR7aS5tYXAoKGwsZCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHRhYiIgdHlwZT0iYnV0dG9uIiBkYXRhLXJlZ2lvbj0iJHtkfSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPiR7YyhsLm5hbWUpfSA8c21hbGw+JHtjKGwuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+PC9kaXY+YDoiIiwuLi5pLm1hcCgobCxkKT0+YAogICAgICA8ZGl2IGNsYXNzPSJyZWdpb24iIGRhdGEtcmVnaW9uLWJvZHk9IiR7ZH0iIGhpZGRlbj4KICAgICAgICAkeyhsLmNvdW50cmllcz8/W10pLm1hcCgobSxiKT0+e2NvbnN0IHY9bS5jaXRpZXM/P1tdLF89di5sZW5ndGg9PT0xP3ZbMF06dm9pZCAwO3JldHVybmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc3QiJHtiPj1ocz8iIGhpZGRlbiI6IiJ9PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0LWNvdW50cnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKG0ubmFtZSl9Ij4ke2MobS5uYW1lKX0ke18mJl8ubmFtZSE9PW0ubmFtZT9gPHNtYWxsPiDCtyAke2MoXy5uYW1lKX08L3NtYWxsPmA6IiJ9IDxzbWFsbCBjbGFzcz0ibiI+JHtjKG0uY291bnQpfTwvc21hbGw+PC9idXR0b24+CiAgICAgICAgICAgICR7di5sZW5ndGg+MT9zKHYpOiIifQogICAgICAgICAgPC9kaXY+YH0pLmpvaW4oIiIpfQogICAgICAgICR7KGwuY291bnRyaWVzPz9bXSkubGVuZ3RoPmhzP2A8ZGl2IGNsYXNzPSJwbGFjZXMiPjxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtY291bnRyaWVzIj4rJHsobC5jb3VudHJpZXM/P1tdKS5sZW5ndGgtaHN9IG1vcmUgY291bnRyaWVzPC9idXR0b24+PC9kaXY+YDoiIn0KICAgICAgPC9kaXY+YCksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFsbC1ob3RlbHMiPkJyb3dzZSBhbGwgJHtjKGUudG90YWwpfTwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQtYm9va2luZyI+RmluZCBhIGJvb2tpbmc8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sWGU9OCxocz02LHhmPWU9Pntjb25zdCB0PWUuZm9yU3RheTtyZXR1cm4gdD9gPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtjKHQudG90YWwpfTxzbWFsbCBjbGFzcz0idC1zdWIiPiR7TnVtYmVyKHQucm9vbXMpPjE/YCR7Yyh0LnJvb21zKX0gcm9vbXMgw5cgYDoiIn0ke2ModC5uaWdodHMpfSAke051bWJlcih0Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IMK3IHRheGVzIGluPC9zbWFsbD48L3NwYW4+YDplLm5vUm9vbXNGb3JTdGF5P2A8c3BhbiBjbGFzcz0idC1mcm9tIHQtbm9uZSI+JHsvc2xlZXBzLy50ZXN0KFN0cmluZyhlLm5vUm9vbXNGb3JTdGF5KSk/YE5vIHJvb20gc2xlZXBzICR7YyhULmd1ZXN0cyl9YDoiTm8gcm9vbSBmb3IgdGhlc2UgZGF0ZXMifTwvc3Bhbj5gOmA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2UuZnJvbU5pZ2h0bHk/YCR7YyhlLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPmB9LE9fPWU9Pntjb25zdCB0PWUuZm9yU3RheTtpZighdClyZXR1cm4iIjtjb25zdCBuPVt0LmZyZWVDYW5jZWxsYXRpb24/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5GcmVlIGNhbmNlbGxhdGlvbjwvc3Bhbj4nOiIiLE51bWJlcih0LnJvb21zTGVmdCk8PTM/YDxzcGFuIGNsYXNzPSJiYWRnZSI+JHtjKHQucm9vbXNMZWZ0KX0gbGVmdDwvc3Bhbj5gOiIiXS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIG4ubGVuZ3RoP2A8c3BhbiBjbGFzcz0idC10YWdzIj4ke24uam9pbigiIil9PC9zcGFuPmA6IiJ9LFd0PSgpPT5ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/e2NoZWNrSW46VC5jaGVja0luLGNoZWNrT3V0OlQuY2hlY2tPdXQsZ3Vlc3RzOlQuZ3Vlc3RzLC4uLlk+MT97cm9vbXM6WX06e319Ont9LFJfPWU9Pntjb25zdHtjaGVja0luOnQsY2hlY2tPdXQ6bixndWVzdHM6byxyb29tczpyLC4uLnN9PWU/P3t9O3JldHVybiBzfSxaXz0oZSx0KT0+e2NvbnN0e21pbjpuLHN0YXJ0Om99PVBmKHQpO3JldHVybighVC5jaGVja0lufHxULmNoZWNrSW48bikmJihULmNoZWNrSW49byksKCFULmNoZWNrT3V0fHxULmNoZWNrT3V0PD1ULmNoZWNrSW4pJiYoVC5jaGVja091dD1WZShULmNoZWNrSW4sMSkpLGAKICA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibGNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7YyhuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhWZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtbGlzdC1yb29tcz0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9ImxybiI+JHtjKFkpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvZGl2PgogICAgJHtlP2A8c3BhbiBjbGFzcz0ibmlnaHRzIj4ke2Moc3MoKSl9PC9zcGFuPmA6JzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwcmljZS1saXN0Ij5TaG93IHByaWNlczwvYnV0dG9uPid9CiAgPC9kaXY+YH07bGV0IEllPSJkYXRlcyI7Y29uc3QgQ2Y9ImRhdGVzIixrbz1lPT57Y29uc3QgdD1lPz97fTtyZXR1cm57Li4udC5icmFuZD97YnJhbmQ6dC5icmFuZH06e30sLi4uQXJyYXkuaXNBcnJheSh0LmZhY2lsaXRpZXMpJiZ0LmZhY2lsaXRpZXMubGVuZ3RoP3tmYWNpbGl0aWVzOnQuZmFjaWxpdGllc306e30sLi4udC5mcmVlQ2FuY2VsbGF0aW9uP3tmcmVlQ2FuY2VsbGF0aW9uOiEwfTp7fSwuLi50LmJyZWFrZmFzdD97YnJlYWtmYXN0OiEwfTp7fX19LFp1PWU9Pntjb25zdHticmFuZDp0LGZhY2lsaXRpZXM6bixmcmVlQ2FuY2VsbGF0aW9uOm8sYnJlYWtmYXN0OnIsLi4uc309ZT8/e307cmV0dXJuIHN9LE5fPWU9Pntjb25zdCB0PWtvKGUpO3JldHVybih0LmJyYW5kPzE6MCkrKHQuZmFjaWxpdGllcz8ubGVuZ3RoPz8wKSsodC5mcmVlQ2FuY2VsbGF0aW9uPzE6MCkrKHQuYnJlYWtmYXN0PzE6MCl9LGpfPWU9Pntjb25zdCB0PWUucmVmaW5lO2lmKCF0KXJldHVybiIiO2NvbnN0IG49KHIscyxhLGkpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtZmlsdGVyPSIke2Mocil9IiBhcmlhLXByZXNzZWQ9IiR7aT8idHJ1ZSI6ImZhbHNlIn0iPiR7YyhzKX0gPHNtYWxsPiR7YyhhKX08L3NtYWxsPjwvYnV0dG9uPmAsbz0ocixzKT0+cy5sZW5ndGg/YDxkaXYgY2xhc3M9ImZncm91cCI+PHNwYW4gY2xhc3M9InNvcnRzLWsiPiR7YyhyKX08L3NwYW4+JHtzLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW28oIkJyYW5kIiwodC5icmFuZHM/P1tdKS5tYXAocj0+bihgYnJhbmQ6JHtyLm5hbWV9YCxyLm5hbWUsci5jb3VudCxyLm9uKSkpLG8oIkhhcyIsKHQuZmFjaWxpdGllcz8/W10pLm1hcChyPT5uKGBmYWNpbGl0eToke3Iua2V5fWAsci5sYWJlbCxyLmNvdW50LHIub24pKSksbygiUm9vbSIsKHQucm9vbT8/W10pLm1hcChyPT5uKHIua2V5LHIubGFiZWwsci5jb3VudCxyLm9uKSkpXS5qb2luKCIiKX0sTV89KGUsdCk9Pntjb25zdCBuPXI9Pk51bWJlcihyLnNsaWNlKDgsMTApKSxvPXI9Pm5ldyBEYXRlKGAke3J9VDEyOjAwOjAwWmApLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHttb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSk7cmV0dXJuIG8oZSk9PT1vKHQpP2Ake24oZSl94oCTJHtuKHQpfSAke28odCl9YDpgJHtuKGUpfSAke28oZSl9IOKAkyAke24odCl9ICR7byh0KX1gfSxFZj0oZSx0LG4pPT57Y29uc3Qgbz0hIWUuc3RheT8uY2hlY2tJbixyPU5fKGUuYXNrKSxzPWpfKGUpLGE9QWYuZmluZCgoW2xdKT0+bD09PW4pPy5bMV0/PyJEZWZhdWx0IixpPW8/YCR7TV8oZS5zdGF5LmNoZWNrSW4sZS5zdGF5LmNoZWNrT3V0KX0ke1k+MT9gIMK3ICR7WX0gcm9vbXNgOiIifWA6IkFkZCBkYXRlcyIsdT0obCxkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UgdG9vbCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBhbmVsPSIke2x9IiBhcmlhLWV4cGFuZGVkPSIke0llPT09bD8idHJ1ZSI6ImZhbHNlIn0iPiR7ZH08L2J1dHRvbj5gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InBsYWNlcyB0b29sYmFyIj4KICAgICAgJHt1KCJkYXRlcyIsYyhpKSl9CiAgICAgICR7dD91KCJzb3J0IixuPT09Imdyb3VwIj8iU29ydCI6YyhhKSk6IiJ9CiAgICAgICR7c3x8cj91KCJmaWx0ZXJzIixgRmlsdGVycyR7cj9gIMK3ICR7cn1gOiIifWApOiIifQogICAgICAke3I/JzxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJjbGVhci1maWx0ZXJzIj5DbGVhcjwvYnV0dG9uPic6IiJ9CiAgICA8L2Rpdj4KICAgIDxkaXYgZGF0YS1wYW5lbC1ib2R5PSJkYXRlcyIke0llPT09ImRhdGVzIj8iIjoiIGhpZGRlbiJ9PiR7Wl8obyxlKX08L2Rpdj4KICAgICR7dD9gPGRpdiBjbGFzcz0iZmlsdGVyLXBhbmVsIiBkYXRhLXBhbmVsLWJvZHk9InNvcnQiJHtJZT09PSJzb3J0Ij8iIjoiIGhpZGRlbiJ9PiR7dH08L2Rpdj5gOiIifQogICAgJHtzP2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0iZmlsdGVycyIke0llPT09ImZpbHRlcnMiPyIiOiIgaGlkZGVuIn0+JHtzfTwvZGl2PmA6IiJ9YH0sQWY9W1siZ3JvdXAiLCJEZWZhdWx0Il0sWyJwcmljZS1sb3ciLCJMb3dlc3QgcHJpY2UiXSxbInByaWNlLWhpZ2giLCJIaWdoZXN0IHByaWNlIl0sWyJyYXRpbmciLCJSYXRpbmciXV0scV89MztsZXQgcm49ImlubGluZSIsT2Y9W107Y29uc3Qgc249KCk9PnJuPT09ImZ1bGxzY3JlZW4iLFZjPSgpPT57Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY29udGVudCAudGlsZXMiKTtpZihlPy5vZmZzZXRXaWR0aCl7Y29uc3Qgcz1nZXRDb21wdXRlZFN0eWxlKGUpLmdyaWRUZW1wbGF0ZUNvbHVtbnMuc3BsaXQoIiAiKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO2lmKHM+MClyZXR1cm4gc31jb25zdCB0PXBlKCJjb250ZW50IikuY2xpZW50V2lkdGh8fHdpbmRvdy5pbm5lcldpZHRofHwwLG49dDw9NDYwLG89bj8xNTA6MTk2LHI9bj84OjEwO3JldHVybiBNYXRoLm1heCgxLE1hdGguZmxvb3IoKHQrcikvKG8rcikpKXx8Mn07bGV0IEpjPTA7Y29uc3QgaXM9KCk9Pk1hdGgubWF4KDIsKEpjfHxWYygpKSpxXyk7bGV0IFpvPTA7Y29uc3QgRF89ZT0+e1pvPWlzKCk7Y29uc3QgdD1zbigpP2UuaG90ZWxzPz9bXTooZS5ob3RlbHM/P1tdKS5zbGljZSgwLFpvKSxuPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNpdHkpKSldLG89dz0+e2NvbnN0ICQ9dC5maW5kKE49Pk4uY2l0eT09PXcpPy5jb3VudHJ5O3JldHVybiAkJiYhU3RyaW5nKCQpLnN0YXJ0c1dpdGgodyk/U3RyaW5nKCQpOiIifSxyPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNvdW50cnk/PyIiKSkpXSxzPXIubGVuZ3RoPjEsYT13PT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke2Modyl9JHshcyYmbyh3KT9gPHNtYWxsPiDCtyAke2Mobyh3KSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKCQ9PiQuY2l0eT09PXcpLm1hcCgkPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YygkLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtGdChTdHJpbmcoJC5pZCkpfSI+CiAgICAgICAgICAgICAgJHskLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKCQuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEh0KFN0cmluZygkLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7JC5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7YygkLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2MoJC5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7YyhuLmxlbmd0aD4xPyQuYXJlYT8/JC5jaXR5OlskLmFyZWEsJC5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICAke3hmKCQpfQogICAgICAgICAgICAgICAgJHt4XygkLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICR7T18oJCl9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAsaT1OdW1iZXIoZS50b3RhbD8/dC5sZW5ndGgpLHU9TnVtYmVyKGUub2Zmc2V0Pz8wKSxsPWktdS10Lmxlbmd0aCxkPWUucGxhY2VzPz9bXTtlLmFzaz8uY2l0eTtjb25zdCBtPWQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJXaGVyZSI+CiAgICAgICAgICAgJHtkLm1hcCgodywkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKHcucGxhY2UpfSIkeyQ+PVhlPyIgaGlkZGVuIjoiIn0+JHtjKHcubGFiZWwpfSA8c21hbGw+JHtjKHcuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9CiAgICAgICAgICAgJHtkLmxlbmd0aD5YZT9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1wbGFjZXMiPiske2QubGVuZ3RoLVhlfSBtb3JlPC9idXR0b24+YDoiIn0KICAgICAgICAgPC9kaXY+YDoiIixiPVN0cmluZyhlLnNvcnQ/PyJncm91cCIpLHY9ISgoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjEpLF89dC5sZW5ndGg+MT9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iT3JkZXIiPiR7QWYuZmlsdGVyKChbd10pPT52fHwhdy5zdGFydHNXaXRoKCJwcmljZSIpKS5tYXAoKFt3LCRdKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2Ugc29ydCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNvcnQ9IiR7d30iIGFyaWEtcHJlc3NlZD0iJHt3PT09Yj8idHJ1ZSI6ImZhbHNlIn0iPiR7JH08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiO3JldHVybltuZSgpLG0sRWYoZSxfLGIpLGUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfS4gVGhlc2UgYXJlICR7YyhlLndpZGVuZWQudG8pfS48L2Rpdj5gOiIiLGA8ZGl2PiR7cz9yLm1hcCh3PT5gPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7Yyh3KX08L2Rpdj4ke24uZmlsdGVyKCQ9PnQuc29tZShOPT5OLmNpdHk9PT0kJiZTdHJpbmcoTi5jb3VudHJ5Pz8iIik9PT13KSkubWFwKGEpLmpvaW4oIiIpfWApLmpvaW4oIiIpOm4ubWFwKGEpLmpvaW4oIiIpfTwvZGl2PmAsKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5RdW90ZWQgaW4gJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0g4oCUIG5vIHJhdGUgaXMgYXBwbGllZCBoZXJlLCBzbyB0aGlzIGlzIG5vdCBhIHByaWNlIG9yZGVyLiBPbmUgY2l0eSBvciBvbmUgY291bnRyeSBnaXZlcyBvbmUgY3VycmVuY3kuPC9kaXY+YDoiIixlLm92ZXJCdWRnZXQ/YDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLm92ZXJCdWRnZXQpfSBtb3JlIG1hdGNoZWQgYW5kIGNhbWUgaW4gb3ZlciB0aGUgcHJpY2UgY2VpbGluZy48L2Rpdj5gOiIiLHNuKCk/bD4wP2A8ZGl2IGNsYXNzPSJub3RlIj5TaG93aW5nICR7dT9gJHt1KzF94oCTJHt1K3QubGVuZ3RofWA6dC5sZW5ndGh9IG9mICR7aX0uPC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMTIsbCl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiOnU+MHx8bD4wP2A8ZGl2IGNsYXNzPSJwYWdlciIgcm9sZT0ibmF2aWdhdGlvbiIgYXJpYS1sYWJlbD0iUGFnZXMiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InBhZ2UtcHJldiIke3U+MD8iIjoiIGRpc2FibGVkIn0gYXJpYS1sYWJlbD0iUHJldmlvdXMgaG90ZWxzIj7igLkgUHJldmlvdXM8L2J1dHRvbj4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3UrMX3igJMke3UrdC5sZW5ndGh9IG9mICR7aX08L3NwYW4+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGFnZS1uZXh0IiR7bD4wPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJOZXh0IGhvdGVscyI+TmV4dCDigLo8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj4ke09mLmluY2x1ZGVzKCJmdWxsc2NyZWVuIik/YDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmdWxsc2NyZWVuIj5WaWV3IGFsbCAke2MoaSl9PC9idXR0b24+PC9kaXY+YDoiIn1gOiIiXS5qb2luKCIiKX0sTF89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXSxuPWUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfSwgc28gdGhpcyBsb29rZWQgaW4gJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiI7cmV0dXJuIGUuYmVmb3JlRmlsdGVycz8oSWU9ImZpbHRlcnMiLFtuZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj4ke2MoZS53aHk/P2BOb25lIG9mIHRoZSAke2UuYmVmb3JlRmlsdGVyc30gaGVyZSBoYXMgYWxsIG9mIHRob3NlIHRvZ2V0aGVyLmApfTwvZGl2PmAsRWYoZSwiIixTdHJpbmcoZS5hc2s/LnNvcnQ/PyJncm91cCIpKV0uam9pbigiIikpOnQubGVuZ3RoP1tuZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7Yyh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobz0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7RnQoU3RyaW5nKG8uaWQpKX0iPgogICAgICAgICAgJHtvLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKG8uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoSHQoU3RyaW5nKG8ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtjKG8ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7Yyhbby5hcmVhLG8uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICR7eGYobyl9CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YCR7bn08ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKGUud2h5Pz9gTm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZS5xdWVyeX0iYDoiIn0uIFRyeSBhIGNpdHkuYCl9PC9kaXY+YH0sUmY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke0Z0KFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEh0KFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke2MoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHtjKGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7YyhlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHtjKHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsVV89KGUsdCxuKT0+e2NvbnN0IG89Q18oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtGdChgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2ModC5pbWFnZVVybCl9IiBhbHQ9IiI+YDpjKEh0KFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7YyhTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7Yyh0LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2ModC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2ModC5uaWdodGx5KX0gLyBuaWdodCR7WT4xP2AgwrcgJHtZfSByb29tc2A6IiJ9IMK3IGluY2wuIHRheDwvZGl2PgogICAgICAgICR7dC5tZW1iZXJSYXRlP2A8ZGl2IGNsYXNzPSJwLW1lbWJlciI+JHtjKHQubWVtYmVyUmF0ZS50aWVyKX0gcmF0ZTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Um8oYGRhdGEtYWRkLXJvb209IiR7Yyh0LmlkKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmlkKX0iYCxvLFN0cmluZyh0Lm5hbWUpLFkpfTwvZGl2PgogICAgPC9kaXY+YH0sRl89KGUsdCk9PiFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyPyIiOmAKICA8ZGl2IGNsYXNzPSJmbGV4LWRhdGVzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iTmVhcmJ5IGFycml2YWwgZGF0ZXMiPgogICAgJHt0Lm1hcChuPT5gPGJ1dHRvbiBjbGFzcz0iZmQke24uY2hvc2VuPyIgb24iOiIifSR7bi5mcm9tPyIiOiIgb3V0In0ke24uYmVzdD8iIGJlc3QiOiIifSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2MoZSl9IiBkYXRhLWNpPSIke2Mobi5jaGVja0luKX0iIGRhdGEtY289IiR7YyhuLmNoZWNrT3V0KX0iIGFyaWEtbGFiZWw9IkFycml2ZSAke2Mob24oU3RyaW5nKG4uY2hlY2tJbikpKX0ke24uZnJvbT9gLCBmcm9tICR7YyhuLmZyb20pfWA6Iiwgbm90aGluZyBsZWZ0In0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1kYXkiPiR7YyhvbihTdHJpbmcobi5jaGVja0luKSkpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtcHJpY2UiPiR7bi5mcm9tP2Mobi5mcm9tKToiRnVsbCJ9PC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gLE51PWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5yb29tcz8/W10sbz1lLnN0YXk/P1Q7cmV0dXJuW25lKCksUmYodCksVGYoU3RyaW5nKHQuaWQpLHQudG9kYXlUaGVyZSksRl8oU3RyaW5nKHQuaWQpLGUuZGF0ZXMpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PlVfKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke2ModC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke2Moci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij4ke2Moci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LEhfPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdLG89ZS5mb3JCb29raW5nO3JldHVybiBvP1tuZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+QWRkLW9ucyBmb3IgJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKHQubmFtZSl9IMK3ICR7YyhXZShvLnN0YXkpKX08L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke2Moci5wZXIpfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Um8oYGRhdGEtYm9va2luZy1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ib29raW5nPSIke2Moby5jb25maXJtYXRpb25Db2RlKX0iYCxOdW1iZXIoby5oZWxkPy5bci5pZF0/PzApLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLCc8ZGl2IGNsYXNzPSJub3RlIj5FYWNoIGNoYW5nZSBpcyBzaG93biB3aXRoIGl0cyBuZXcgdG90YWwgYmVmb3JlIGFueXRoaW5nIG1vdmVzLiBOb3RoaW5nIGlzIGNoYXJnZWQgaGVyZS48L2Rpdj4nLCc8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkJhY2sgdG8geW91ciBib29raW5nczwvYnV0dG9uPiddLmpvaW4oIiIpOltuZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Moci5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke2Moci5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtSbyhgZGF0YS1hZGQtZXh0cmE9IiR7YyhyLmlkKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iYCxFXyhTdHJpbmcodC5pZCksU3RyaW5nKHIuaWQpKSxTdHJpbmcoci5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPkJhY2sgdG8gJHtjKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LEJfPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHtjKGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke2MoZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7YyhlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHtjKGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7YyhlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIke2UuZGF5P2AgZGF0YS1kYXk9IiR7YyhlLmRheSl9ImA6IiJ9YDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtXZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7YyhlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtSbyh0LE51bWJlcihlLmtpbmQ9PT0iZXh0cmEiP2Uub3JkZXJlZD8/ZS5xdWFudGl0eT8/MTplLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0sanU9KGUsdCk9PmA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7YyhlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke2MoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHtjKGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHtjKGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7Yyh0KX08L3NwYW4+PHNwYW4+JHtjKGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIGVhcm5zPC9zcGFuPjxzcGFuPiR7YyhOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgIDwvZGl2PmAsVl89ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVybltuZSgpLCc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlIHRyaXAgaXMgZW1wdHkuPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkJyb3dzZSAke2MoZHQpfSBob3RlbHM8L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBuPVsuLi5uZXcgU2V0KHQubWFwKG89PlN0cmluZyhvLmRheT8/IiIpKSldLnNvcnQoKTtyZXR1cm5bbmUoKSxuLm1hcChvPT5gCiAgICAgICR7bz9gPGRpdiBjbGFzcz0iZGF5Ij4ke2Mob24obykpfTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InJvd3MiPiR7dC5maWx0ZXIocj0+U3RyaW5nKHIuZGF5Pz8iIik9PT1vKS5tYXAoQl8pLmpvaW4oIiIpfTwvZGl2PmApLmpvaW4oIiIpLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG89PmAke2Moby50aXRsZSl9OiAke2Moby53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLC4uLkFycmF5LmlzQXJyYXkoZS5ncm91cHMpJiZlLmdyb3Vwcy5sZW5ndGg+MT9bYDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlZCBpbiAke2MoKGUuY3VycmVuY2llcz8/W10pLmpvaW4oIiBhbmQgIikpfSwgc2VwYXJhdGVseS4gTm90aGluZyBoZXJlIGNvbnZlcnRzIG9uZSBpbnRvIHRoZSBvdGhlcjsgZWFjaCBob3RlbCBpcyBib29rZWQgYW5kIHBhaWQgaW4gaXRzIG93bi48L2Rpdj5gLC4uLmUuZ3JvdXBzLm1hcChvPT5qdShvLG8uZ29lc1dpdGhBU3RheT9gSW4gJHtvLmN1cnJlbmN5fSwgZ29lcyB3aXRoIGEgc3RheSAtIG5vdCBpbiB0aGUgdG90YWxgOmBUb3RhbCBpbiAke28uY3VycmVuY3l9YCkpXTpbanUoZSwiVG90YWwiKV0sLi4uQXJyYXkuaXNBcnJheShlLm5lZWRzUm9vbSkmJmUubmVlZHNSb29tLmxlbmd0aD9lLm5lZWRzUm9vbS5tYXAobz0+YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICAgIDxiPkdvZXMgd2l0aCBhIHN0YXk8L2I+CiAgICAgICAgICAgICA8c3Bhbj4ke2MoKG8uZXh0cmFzPz9bXSkuam9pbigiIGFuZCAiKSl9IGlzICR7YyhvLmhvdGVsTmFtZSl9J3Mgc2VydmljZSBmb3IgaXRzIGd1ZXN0cywgc28gaXQgaXMgYm9va2VkIHdpdGggYSByb29tIHRoZXJlIC0gb3IgYWRkZWQgdG8gYSBib29raW5nIHlvdSBhbHJlYWR5IGhhdmUuPC9zcGFuPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhvLmhvdGVsSWQpfSI+Um9vbXMgYXQgJHtjKG8uaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPC9kaXY+YCk6Wyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siPlJlcXVlc3QgYm9va2luZzwvYnV0dG9uPjwvZGl2PicsYDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBSZXF1ZXN0aW5nIGEgYm9va2luZyBhc2tzICR7YyhkdCl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLFpmKCldLFg/IiI6YDxkaXYgY2xhc3M9Im5vdGUiPkEgJHtjKGR0KX0gQ2lyY2xlIG1lbWJlcj8gPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj5TaWduIGluIGZvciB0aGUgbWVtYmVyIHJhdGU8L2J1dHRvbj4uPC9kaXY+JHtObygpfWBdLmpvaW4oIiIpfSxLYz1be2lkOiJraW5nLWJlZCIsbGFiZWw6IktpbmcgYmVkIn0se2lkOiJ0d2luLWJlZHMiLGxhYmVsOiJUd2luIGJlZHMifSx7aWQ6ImhpZ2gtZmxvb3IiLGxhYmVsOiJIaWdoIGZsb29yIn0se2lkOiJsb3ctZmxvb3IiLGxhYmVsOiJMb3cgZmxvb3IifSx7aWQ6InF1aWV0LXJvb20iLGxhYmVsOiJRdWlldCByb29tIn0se2lkOiJjb25uZWN0aW5nLXJvb21zIixsYWJlbDoiQ29ubmVjdGluZyByb29tcyJ9LHtpZDoiZWFybHktY2hlY2staW4iLGxhYmVsOiJFYXJseSBjaGVjay1pbiJ9LHtpZDoibGF0ZS1hcnJpdmFsIixsYWJlbDoiTGF0ZSBhcnJpdmFsIn0se2lkOiJhY2Nlc3NpYmxlLXJvb20iLGxhYmVsOiJBY2Nlc3NpYmxlIHJvb20ifV0sSl89eyJraW5nLWJlZCI6InR3aW4tYmVkcyIsInR3aW4tYmVkcyI6ImtpbmctYmVkIiwiaGlnaC1mbG9vciI6Imxvdy1mbG9vciIsImxvdy1mbG9vciI6ImhpZ2gtZmxvb3IifTtsZXQgQ2U9bnVsbDtjb25zdCBaZj0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0iZ3Vlc3QiJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+R3Vlc3QgbmFtZTxpbnB1dCBpZD0iZ25hbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgYm9va2luZyIgdmFsdWU9IiR7YyhDZT8ubmFtZT8/IiIpfSI+PC9sYWJlbD4KICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJnbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBjb25maXJtYXRpb24iIHZhbHVlPSIke2MoQ2U/LmVtYWlsPz8iIil9Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke0tjLm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7Yyh0LmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoQ2U/Q2UucmVxdWVzdHM6WD8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7Yyh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7YyhDZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHtjKENlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke2MoZHQpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7WD9gPGxhYmVsIGNsYXNzPSJyZW1lbWJlciI+PGlucHV0IGlkPSJncmVtZW1iZXIiIHR5cGU9ImNoZWNrYm94IiR7Q2U/LnJlbWVtYmVyPyIgY2hlY2tlZCI6IiJ9PiBSZW1lbWJlciB0aGUgYmVkLCBmbG9vciBhbmQgcm9vbSByZXF1ZXN0cyBvbiBteSAke2MoWC5wcm9ncmFtbWU/PyJtZW1iZXJzaGlwIil9IGZvciBuZXh0IHRpbWU8L2xhYmVsPmA6IiJ9CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj5Ib2xkIHRoZXNlIHJvb21zPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4KICA8L2Rpdj5gLEtfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke2MoKGUubWlzc2luZz8/W10pLmpvaW4oIiBhbmQgIil8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsWmYoITApLCc8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4nXS5qb2luKCIiKSxXXz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW25lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgICR7dC5uYW1lP2A8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+YDonPGRpdiBjbGFzcz0id2hlcmUiPlNpZ25lZCBpbjwvZGl2Pid9CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgJHt0eXBlb2YgdC5wb2ludHM9PSJudW1iZXIiP2A8ZGl2IGNsYXNzPSJ3aGVuIj4ke2ModC5wb2ludHMudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHtjKE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke2ModC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLCh0LnByZWZlcmVuY2VzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgPGI+U2F2ZWQgZm9yIHlvdXIgbmV4dCBzdGF5czwvYj4KICAgICAgICAgICA8c3Bhbj4ke2ModC5wcmVmZXJlbmNlcy5tYXAobj0+S2MuZmluZChvPT5vLmlkPT09bik/LmxhYmVsPz9uKS5qb2luKCIsICIpKX0gLSB0aWNrZWQgb24gdGhlIGJvb2tpbmcgZm9ybSwgYW5kIGFza2VkIGZvciBvbmx5IHdoZW4geW91IGJvb2sgd2l0aCB0aGVtLjwvc3Bhbj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZm9yZ2V0LXByZWZzIj5Gb3JnZXQgdGhlbTwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sR189KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLE5vKCEwKV0uam9pbigiIiksTm89KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxRXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RlZD8/W107cmV0dXJuIHQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCR7ZS5hY2Nlc3NpYmlsaXR5PyIgZmxhZyI6IiJ9Ij4KICAgIDxiPlJlcXVlc3RlZCwgbm90IGhlbGQ8L2I+CiAgICAke3QubWFwKG49PmA8c3Bhbj4ke2Mobil9PC9zcGFuPmApLmpvaW4oIiIpfQogIDwvZGl2PmA6IiJ9LE11PWU9PlN0cmluZyhlLmhvbGRVbnRpbD8/IiIpLnNsaWNlKDAsMTYpLnJlcGxhY2UoIlQiLCIgIiksWV89ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmJvb2tpbmdzKSYmZS5ib29raW5ncy5sZW5ndGg/ZS5ib29raW5nczpbZS5ib29raW5nPz97fV0sbj10Lmxlbmd0aD4xLG89KHIscyxhKT0+W2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+Q29uZmlybWF0aW9uIGNvZGU8L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKHIuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke2Moci5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke2MoV2Uoci5zdGF5KSl9IMK3ICR7YyhyLmd1ZXN0Py5uYW1lPz8iIil9PC9kaXY+CiAgICAgICA8L2Rpdj5gLG4/YDxkaXYgY2xhc3M9Im5vdGUiPkhlbGQgdW50aWwgJHtjKE11KHIpKX0gVVRDLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7YyhzKX08L3NwYW4+PC9kaXY+YCxRXyhhKSxgPGRpdiBjbGFzcz0icm93cyI+JHsoci5xdW90ZT8ubGluZXM/P1tdKS5tYXAoZWspLmpvaW4oIiIpfTwvZGl2PmAsbj9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2Moci5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2Moci5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCAke2Moci5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpO3JldHVybltuZSgpLG4/YDxkaXYgY2xhc3M9Im5vdGUiPiR7dC5sZW5ndGh9IGJvb2tpbmdzLCBvbmUgZm9yIGVhY2ggc3RheS4gRWFjaCBob3RlbCBob2xkcyBpdHMgb3duIG5pZ2h0cyB1bmRlciBpdHMgb3duIGNvZGUsIGFuZCBlYWNoIGlzIGNoYW5nZWQgb3IgY2FuY2VsbGVkIG9uIGl0cyBvd24uPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCB0aGUgdGltZSB1bmRlciBlYWNoIGNvZGUuIjpgVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7YyhNdSh0WzBdKSl9IFVUQy5gfSBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCwuLi50Lm1hcChyPT5uP28ocixTdHJpbmcoci50b3RhbD8/IiIpLHIpOm8ocixTdHJpbmcoZS50b3RhbD8/IiIpLGUpKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAke24/IiI6YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPmB9CiAgICAgPC9kaXY+YF0uam9pbigiIil9LFhfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5kZXRhaWw/P2Uud2h5Pz8iVGhhdCBjb3VsZCBub3QgYmUgZG9uZS4iKX08L2Rpdj5gLG5uPjA/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIj5WaWV3IHRoZSB0cmlwPC9idXR0b24+PC9kaXY+JzoiIl0uam9pbigiIiksZWs9ZT0+YAogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoZS5raW5kPT09InJvb20iP1dlKGUuc3RheSk6ZS5kZXRhaWw/PyIiKX08L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj48L2Rpdj4KICA8L2Rpdj5gLHRrPXtyZXF1ZXN0ZWQ6Indhcm4iLGNvbmZpcm1lZDoiZ29vZCIsY2FuY2VsbGVkOiJiYWQiLGV4cGlyZWQ6ImJhZCJ9LG5rPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5LYy5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke2Mobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LG9rPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdLG49ZS5ub3RGb3VuZD9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS50b29NYW55P2Uubm90Rm91bmRMaW5lOmBObyBib29raW5nIG1hdGNoZXMgJHtlLm5vdEZvdW5kfSB3aXRoIHRoYXQgZW1haWwuIEJvdGggaGF2ZSB0byBiZSBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLmApfTwvZGl2PmA6IiI7cmV0dXJuIGUubm90Rm91bmQmJnQubGVuZ3RoPT09MD9gJHtufQogICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5UcnkgYWdhaW48L2J1dHRvbj48L2Rpdj5gOnQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOltuZSgpLG4sYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKG8uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2MoV2Uoby5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke25rKG8pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHt0a1tTdHJpbmcoby5zdGF0dXMpXT8/IiJ9Ij4ke2Moby5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKG8ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke28uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG8uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0scXU9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxEdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89ZS5mcm9tPz97fSxyPWUudG8scz0hIXImJihyLmNoZWNrSW4hPT1vLmNoZWNrSW58fHIuY2hlY2tPdXQhPT1vLmNoZWNrT3V0fHxOdW1iZXIoci5yb29tcykhPT1OdW1iZXIoby5yb29tcyl8fHIucm9vbU5hbWUhPT1vLnJvb21OYW1lKSxhPShpLHUsbCk9PnU/YDxkaXYgY2xhc3M9ImxlZyR7bD8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke2MoaSl9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHtjKHUuY2hlY2tJbil9IOKGkiAke2ModS5jaGVja091dCl9IMK3ICR7Yyh1Lm5pZ2h0cyl9ICR7TnVtYmVyKHUubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke2ModS5yb29tTmFtZSl9JHtOdW1iZXIodS5yb29tcyk+MT9gIMK3ICR7Yyh1LnJvb21zKX0gcm9vbXNgOiIifSDCtyAke2ModS50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW25lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDaGFuZ2VkIjoiQ2hhbmdpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlLmhvdGVsTmFtZT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKGUuaG90ZWxOYW1lKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJsZWdzIj4ke2EodD8iV2FzIjoiTm93IixlLmZyb20scyl9JHthKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtjKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7YyhlLmFkZE9uLmZyb20pfSDihpIgJHtjKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sZnM9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7YyhlLnRpdGxlKX08L2g0PiR7YyhlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtjKG8udGl0bGUpfTwvaDQ+JHtjKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0scms9ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXQuc29tZShzPT5zLnJlY29tbWVuZGVkKSxyPXM9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtzLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9JHtvPyIgbWFya2VkIjoiIn0iPgogICAgICAke28/YDxkaXYgY2xhc3M9InBpY2ttYXJrJHtzLnJlY29tbWVuZGVkPyIiOiIgbm9uZSJ9Ij4ke3MucmVjb21tZW5kZWQ/IlJlY29tbWVuZGVkIjoiIn08L2Rpdj5gOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHMuaG90ZWwuaWQpfSIgc3R5bGU9IiR7RnQoU3RyaW5nKHMuaG90ZWwuaWQpKX0iPgogICAgICAgICR7cy5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhzLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhIdChTdHJpbmcocy5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1uYW1lIj4ke2Mocy5ob3RlbC5uYW1lKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29sLXByaWNlIj4ke3MucHJpY2U/YCR7YyhzLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsIGNsYXNzPSJzdWIiPnRvdGFsIMK3ICR7YyhzLnByaWNlLm5pZ2h0bHkpfS9uaWdodDwvc21hbGw+YDpzLmZyb20/YDxzbWFsbD5Gcm9tIDwvc21hbGw+JHtjKHMuZnJvbSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ3aHkke3MuYmVzdEZvcj8iIjoiIG5vbmUifSI+JHtzLmJlc3RGb3I/YyhzLmJlc3RGb3IpOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHMucHJvcz8/W10pLm1hcChhPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2MoYSl9PC9zcGFuPjwvZGl2PmApLC4uLihzLmNvbnM/P1tdKS5tYXAoYT0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2MoYSl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW25lKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhXZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCR7dC5sZW5ndGg+PTQ/IiBmb3VyIjoiIn0iIHN0eWxlPSItLWNvbHM6JHt0Lmxlbmd0aH07LS1oZWFkLXJvd3M6JHtvPzY6NX0iPgogICAgICAgPGRpdiBjbGFzcz0iY21wLWNvcm5lciI+PC9kaXY+CiAgICAgICAke3QubWFwKHIpLmpvaW4oIiIpfQogICAgICAgJHtuLm1hcCgocyxhKT0+YDxkaXYgY2xhc3M9ImsiPiR7YyhzKX08L2Rpdj4ke3QubWFwKGk9PmA8ZGl2IGNsYXNzPSJ2JHthJTI/IiBhbHQiOiIifSI+JHtjKGkucm93cz8uW2FdPy52YWx1ZT8/IuKAlCIpfTwvZGl2PmApLmpvaW4oIiIpfWApLmpvaW4oIiIpfQogICAgIDwvZGl2PjwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAocz0+YCR7YyhzLm5hbWUpfTogJHtjKHMud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+T3BlbiBhICR7YyhlLnZvY2FiPy5ub3VuPz8iaG90ZWwiKX0gdG8gc2VlIGl0cyByb29tcyR7ZS5zdGF5Py5jaGVja0luPyIgZm9yIHRoZXNlIG5pZ2h0cyI6IiJ9LjwvZGl2PmBdLmpvaW4oIiIpfSxzaz1lPT57Y29uc3QgdD1lLmRheXM/P1tdLG49aT0+YDxzcGFuIGNsYXNzPSJpbnN0YXRlICR7aS5ib29rZWR8fGkuaW5UcmlwPyJ5ZXMiOiJubyJ9Ij4ke2kuYm9va2VkP2BCb29rZWQgwrcgJHtjKGkuYm9va2VkKX1gOmkuaW5UcmlwPyJJbiB0aGUgdHJpcCI6IlBsYW4gb25seSJ9PC9zcGFuPmAsbz1pPT5gIGRhdGEtaG90ZWw9IiR7YyhpLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtpLmNoZWNrSW4/YCBkYXRhLWNpPSIke2MoaS5jaGVja0luKX0iIGRhdGEtY289IiR7YyhpLmNoZWNrT3V0KX0iYDoiIn1gLHI9aT0+aS5jaGVja291dD9gPGRpdiBjbGFzcz0icGxhbi1uaWdodCIke28oaSl9PjxzcGFuPkNoZWNrIG91dCDCtyAke2MoaS5uYW1lKX08L3NwYW4+PC9kaXY+YDpOdW1iZXIoaS5uaWdodD8/MSk+MT9gPGRpdiBjbGFzcz0icGxhbi1uaWdodCIke28oaSl9PgogICAgICAgICAgIDxzcGFuPk5pZ2h0ICR7YyhpLm5pZ2h0KX0gb2YgJHtjKGkubmlnaHRzKX0gwrcgJHtjKGkubmFtZSl9PC9zcGFuPiR7bihpKX0KICAgICAgICAgPC9kaXY+YDpgPGRpdiBjbGFzcz0icGxhbi1zdGF5IiR7byhpKX0+CiAgICAgICAgICAgPHNwYW4gY2xhc3M9InBzLXNob3QiIHN0eWxlPSIke0Z0KFN0cmluZyhpLmlkKSl9Ij4ke2kuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2MoaS5pbWFnZVVybCl9IiBhbHQ9IiI+YDpgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEh0KFN0cmluZyhpLm5hbWUpKSl9PC9zcGFuPmB9PC9zcGFuPgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcy1ib2R5Ij4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4ke2MoaS5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YSI+JHtjKFtpLmRldGFpbCxpLm5pZ2h0cz9gJHtpLm5pZ2h0c30gJHtpLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICR7aS5wcmljZT9gPHNwYW4gY2xhc3M9InBzLXByaWNlIj4ke2MoaS5wcmljZSl9PC9zcGFuPmA6IiJ9CiAgICAgICAgICAgICAke24oaSl9CiAgICAgICAgICAgPC9zcGFuPgogICAgICAgICA8L2Rpdj5gLHM9aT0+YAogICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoaS5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoW2kuZGV0YWlsLGkucHJpY2VdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHtuKGkpfQogICAgPC9kaXY+YCxhPWk9PihpLnBsYW4/P1tdKS5sZW5ndGg/YDxvbCBjbGFzcz0ibW9tZW50cyI+JHtpLnBsYW4ubWFwKHU9PmA8bGk+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndoZW4iPiR7Yyh1LnRpbWU/PyIiKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndoYXQiPjxiPiR7Yyh1LndoYXQpfTwvYj4ke3Uubm90ZT9gPHNtYWxsPiR7Yyh1Lm5vdGUpfTwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDwvbGk+YCkuam9pbigiIil9PC9vbD5gOiIiO3JldHVybltuZSgpLGA8ZGl2PgogICAgICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgICAke2Uuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFdlKGUuc3RheSkpfTwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0iZ2FwIj48Yj4ke2MoTnVtYmVyKGUuaW5UcmlwPz8wKStOdW1iZXIoZS5ib29rZWQ/PzApKX0vJHtjKGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7YyhlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChpLHUpPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke3UrMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7YyhpLmxhYmVsKX0ke2kuZGF0ZT9gPHNtYWxsPiDCtyAke2MoaWsoU3RyaW5nKGkuZGF0ZSkpKX08L3NtYWxsPmA6IiJ9PC9kaXY+CiAgICAgICAgICAke2kubm90ZT9gPGRpdiBjbGFzcz0iZGF5bm90ZSI+JHtjKGkubm90ZSl9PC9kaXY+YDoiIn0KICAgICAgICAgICR7YShpKX0KICAgICAgICAgICR7KGkuaXRlbXM/P1tdKS5tYXAobD0+bC5raW5kPT09ImhvdGVsIj9yKGwpOnMobCkpLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKGk9PmAke2MoaS5uYW1lKX06ICR7YyhpLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxpaz1lPT5uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKS50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7d2Vla2RheToic2hvcnQiLGRheToibnVtZXJpYyIsbW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pLHhlPShlLHQ9ITEpPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47Y29uc3Qgbj10JiZlLnZpZXc9PT0ibWVtYmVyIiYmWD97Li4uZSxtZW1iZXI6WH06ZTtuLnRvb2xOYW1lcyYmKHlmPW4udG9vbE5hbWVzKSxuLmJyYW5kJiYoZHQ9U3RyaW5nKG4uYnJhbmQpKSxuLmxvZ29VcmwmJihwcz1TdHJpbmcobi5sb2dvVXJsKSksdHlwZW9mIG4uZGVtbz09ImJvb2xlYW4iJiYoX2Y9bi5kZW1vKSxuLmRlbW9Ob3RlJiYoa2Y9U3RyaW5nKG4uZGVtb05vdGUpKSx0eXBlb2Ygbi5yb29tc193YW50ZWQ9PSJudW1iZXIiP1k9bi5yb29tc193YW50ZWQ6KG4udmlldz09PSJob3RlbHMifHxuLnZpZXc9PT0iZGVzdGluYXRpb25zInx8bi52aWV3PT09Im5vLWhvdGVscyIpJiZuLnN0YXk/LmNoZWNrSW4mJiFwdCYmKFk9TWF0aC5tYXgoMSxOdW1iZXIobi5hc2s/LnJvb21zPz8xKXx8MSkpLHR8fChuLnZpZXc9PT0ibWVtYmVyIiYmbi5tZW1iZXI/LnRpZXI/Lm5hbWU/WD1uLm1lbWJlcjpuLm1lbWJlcj8udGllcj8ubmFtZSYmKFg9WD8ucHJvZ3JhbW1lPT09bi5tZW1iZXIucHJvZ3JhbW1lJiZYPy50aWVyPy5uYW1lPT09bi5tZW1iZXIudGllci5uYW1lP3suLi5YLC4uLm4ubWVtYmVyLHByZWZlcmVuY2VzOm4ubWVtYmVyLnByZWZlcmVuY2VzfTpuLm1lbWJlciksKG4udmlldz09PSJzaWduZWQtb3V0Inx8bi5zaWduZWRJbj09PSExKSYmKFg9bnVsbCkpLG4uc3RheT8uY2hlY2tJbiYmIUd0JiYhcHQmJihUPXtjaGVja0luOm4uc3RheS5jaGVja0luLGNoZWNrT3V0Om4uc3RheS5jaGVja091dCxndWVzdHM6bi5zdGF5Lmd1ZXN0cz8/Mn0pLCFCYyYmKG4udmlldz09PSJ0cmlwInx8bi52aWV3PT09Im5lZWRzLWRhdGVzIikmJihfdD1uLmxpbmVzPz9bXSksKG4udmlldz09PSJib29raW5nInx8bi52aWV3PT09ImVtcHR5LXRyaXAiKSYmKF90PVtdLG5uPTApLExlPVN0cmluZyhuLnZpZXc/PyIiKSx3ZigpO2NvbnN0IG89cGUoImJyYW5kIik7cHM/KG8uc3JjPXBzLG8uaGlkZGVuPSExLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KG8uaGlkZGVuPSEwLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMSxwZSgidGl0bGUiKS50ZXh0Q29udGVudD1kdHx8IkhvdGVscyIpLHBlKCJzdWIiKS50ZXh0Q29udGVudD11ayhuKSxkaygpLGxrKCk7Y29uc3Qgcj17aG90ZWxzOkRfLGRlc3RpbmF0aW9uczpBXywibm8taG90ZWxzIjpMXyxob3RlbDpOdSwibm8tcm9vbXMiOk51LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOkhfLHRyaXA6Vl8sIm5lZWRzLWRhdGVzIjpjayxib29raW5nOllfLCJuZWVkcy1ndWVzdCI6S18sbWVtYmVyOldfLCJtZW1iZXItbm90LWZvdW5kIjpHXywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpvaywiY2FuY2VsbGF0aW9uLXByZXZpZXciOnF1LGNhbmNlbGxlZDpxdSwiY2hhbmdlLXByZXZpZXciOkR1LGNoYW5nZWQ6RHUsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOnJrLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpzaywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpmcyxwb2xpY2llczpmcywicG9saWN5LW1pc3NpbmciOmZzLGVycm9yOlhfLCJmaW5kLWJvb2tpbmciOigpPT5bbmUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+QSBib29raW5nIG1hZGUgaW4gYW5vdGhlciBjb252ZXJzYXRpb24gaXMgZm91bmQgd2l0aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCBpdCB3YXMgbWFkZSB3aXRoIC0gYm90aCwgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb3JtIj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgICAgICAgPGxhYmVsPkNvbmZpcm1hdGlvbiBjb2RlPGlucHV0IGlkPSJmY29kZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJTTC3igKYiPjwvbGFiZWw+CiAgICAgICAgICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImZtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgb25lIG9uIHRoZSBib29raW5nIj48L2xhYmVsPgogICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJsb29rdXAtYm9va2luZyI+RmluZCBpdDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gXS5qb2luKCIiKSwibm8tbWVtYmVyIjooKT0+YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob2JvZHkgaXMgc2lnbmVkIGluLCBzbyB0aGVyZSBpcyBub3RoaW5nIHNhdmVkIHRvIGZvcmdldC48L2Rpdj4ke05vKCEwKX1gLCJtZW1iZXItc2lnbi1pbiI6KCk9PltuZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5TaWduIGluIHdpdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBwcmludGVkIG9uIHRoZSBjYXJkIHRvIHNlZSB0aGUgbWVtYmVyIHJhdGUgb24gZXZlcnkgcHJpY2UgaGVyZS48L2Rpdj4nLE5vKCEwKV0uam9pbigiIil9OyhMZT09PSJob3RlbCJ8fExlPT09Im5vLXJvb21zInx8TGU9PT0ibmVlZHMtZGF0ZXMiKSYmbi5ob3RlbD8uaWQ/KEt0PVN0cmluZyhuLmhvdGVsLmlkKSxuLm5lZWRzRGF0ZXMmJnNldFRpbWVvdXQoKCk9PmFzKDAsIXJzKSwwKSk6KEt0PSIiLFdjKCkpLHE9bjtjb25zdCBzPXJbTGVdO3BlKCJjb250ZW50IikuaW5uZXJIVE1MPShzP3Mobik6YDxkaXYgY2xhc3M9ImVyciI+JHtjKG4uZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtuLmRldGFpbD9gPGJyPiR7YyhuLmRldGFpbCl9YDoiIn08L2Rpdj5gKSthayhuKSxMZT09PSJob3RlbHMiJiYhc24oKSYmKEpjPVZjKCksaXMoKSE9PVpvJiZ4ZShuLHQpKX0sYWs9ZT0+e2NvbnN0IHQ9ISFFZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2Usbj0oZS5zdWdnZXN0aW9ucz8/W10pLm1hcCgobyxyKT0+bz8uYXNrfHxvPy5hc2tzPy5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zdWdnZXN0PSIke3J9Ij4ke2Moby5sYWJlbCl9PC9idXR0b24+YDpvPy5zYXkmJnQ/YDxidXR0b24gY2xhc3M9ImNoaXAgc2F5IiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfSA8c21hbGw+wrcgaW4gdGhlIGNoYXQ8L3NtYWxsPjwvYnV0dG9uPmA6IiIpLmpvaW4oIiIpO3JldHVybiBuP2A8ZGl2IGNsYXNzPSJzdWdnZXN0Ij4ke259PC9kaXY+YDoiIn0sY2s9ZT0+W25lKCksZS5ob3RlbD9SZihlLmhvdGVsKToiIixgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS53aHk/PyJXaGljaCBuaWdodHM/IEEgcm9vbSBuZWVkcyBhIGNoZWNrLWluIGFuZCBhIGNoZWNrLW91dCBkYXRlLiIpfTwvZGl2PmAsVGYoU3RyaW5nKGUuaG90ZWw/LmlkPz8iIiksZS5ob3RlbD8udG9kYXlUaGVyZSldLmpvaW4oIiIpLHVrPWU9PmUudmlldz09PSJob3RlbHMiP2Ake2UudG90YWw/PzB9ICR7TnVtYmVyKGUudG90YWwpPT09MT8iaG90ZWwiOiJob3RlbHMifWA6ZS52aWV3PT09ImhvdGVsInx8ZS52aWV3PT09Im5vLXJvb21zIj9XZShlLnN0YXkpOmUudmlldz09PSJ0cmlwIj8oZS5saW5lcz8/W10pLmxlbmd0aD9TdHJpbmcoZS50b3RhbD8/IiIpOiIiOmUudmlldz09PSJjb21wYXJpc29uIj9gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgOmUudmlldz09PSJpdGluZXJhcnkiP051bWJlcihlLmJvb2tlZCk+MD9gJHtlLmJvb2tlZH0vJHtlLnBsYW5uZWR9IGJvb2tlZGA6YCR7ZS5pblRyaXB9LyR7ZS5wbGFubmVkfSBpbiB0aGUgdHJpcGA6ZS52aWV3PT09ImJvb2tpbmdzIj9gJHtlLmNvdW50Pz8wfSBib29raW5nJHtOdW1iZXIoZS5jb3VudCk9PT0xPyIiOiJzIn1gOiIiLGxrPSgpPT57Y29uc3QgZT1wZSgibWVtYmVyY2hpcCIpO1g/KGUuaGlkZGVuPSExLGUudGV4dENvbnRlbnQ9YCR7WC50aWVyPy5uYW1lPz8iTWVtYmVyIn0gwrcgJHtNYXRoLnJvdW5kKChYLnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApfSUgb2ZmYCxlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJtZW1iZXIiKSxlLnNldEF0dHJpYnV0ZSgidGl0bGUiLFtYLm5hbWUsWC5wcm9ncmFtbWVdLmZpbHRlcih0PT50eXBlb2YgdD09InN0cmluZyImJnQpLmpvaW4oIiDCtyAiKSkpOihlLmhpZGRlbj1MZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LGRrPSgpPT57Y29uc3QgZT1wZSgiaGVhZHRyaXAiKSx0PUJjP25uOm5ufHxfdC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fExlPT09InRyaXAiLHBlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LHBrPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7VD17Y2hlY2tJbjplPy52YWx1ZT8/VC5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9ULmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P1QuZ3Vlc3RzKXx8Mn19LHdvPShlPXt9KT0+VC5jaGVja0luJiZULmNoZWNrT3V0P3tjaGVja0luOlQuY2hlY2tJbixjaGVja091dDpULmNoZWNrT3V0LGd1ZXN0czpULmd1ZXN0cywuLi5lfTplO2xldCB4cyxHdD0hMTtjb25zdCBXYz0oKT0+e2NsZWFyVGltZW91dCh4cyksR3Q9ITF9LGFzPShlPTAsdD0hMSk9PntLdCYmKGNsZWFyVGltZW91dCh4cyksR3Q9ITAseHM9c2V0VGltZW91dCgoKT0+e2lmKCFLdCl7R3Q9ITE7cmV0dXJufWlmKFV0KXthcygxNTAsdCk7cmV0dXJufUd0PSExLE0oImdldEhvdGVsIix7aG90ZWw6S3Qscm9vbXM6WSwuLi53bygpfSx0P3tub3RlOklffTp7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIG5pZ2h0cy4iKSl9LGUpKX0sUj1lPT57cGUoImNvbnRlbnQiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlKX08L2Rpdj5gKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1ob3RlbF0sW2RhdGEtYWN0XSxbZGF0YS1wb2xpY3ldLFtkYXRhLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2hhbmdlXSxbZGF0YS1leHRyYXNdLFtkYXRhLXJvb21zLW5dLFtkYXRhLWFza10sW2RhdGEtYm9va2luZy1leHRyYXNdLFtkYXRhLWJvb2tpbmctZXh0cmFdLFtkYXRhLXN1Z2dlc3RdLFtkYXRhLXBsYWNlXSxbZGF0YS1wbGFjZS1hbGxdLFtkYXRhLXNvcnRdLFtkYXRhLWxpc3Qtcm9vbXNdLFtkYXRhLWZpbHRlcl0sW2RhdGEtcGFuZWxdLFtkYXRhLXJlZ2lvbl0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKGspKTtjb25zdCB6PUpfW25dO2smJnomJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7en0iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksTmYoKTtyZXR1cm59Y29uc3Qgbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1saXN0LXJvb21zIik7aWYobyE9PW51bGwpe1k9TWF0aC5taW4oQXUsTWF0aC5tYXgoMSxZK051bWJlcihvKSkpO2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxybiIpO2smJihrLnRleHRDb250ZW50PVN0cmluZyhZKSksam8oNDUwKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYociE9PW51bGwpe3BrKCksWT1NYXRoLm1pbihBdSxNYXRoLm1heCgxLFkrTnVtYmVyKHIpKSk7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcoWSkpO2NvbnN0IHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO3omJih6LnRleHRDb250ZW50PXNzKCkpLGFzKDQ1MCk7cmV0dXJufWNvbnN0IHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihzIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix6PXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhZGQiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/WTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxLPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06d28oKTtNKCJhZGRUb1RyaXAiLHtob3RlbDprLHJvb206cyxyb29tczp6LC4uLkt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLWV4dHJhIik7aWYoYSE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZGF5Iik7TSgiYWRkVG9UcmlwIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZXh0cmE6YSxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSwuLi5rP3tkYXk6a306e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UiKTtpZihpIT09bnVsbCl7Y29uc3Qgaz1xPy5hc2s/LnNvcnQsej1xPy52aWV3PT09ImhvdGVscyI/cT8uYXNrPy5xdWVyeTp2b2lkIDA7Q3MoKTtjb25zdCBLPXE/LnZpZXc9PT0iZGVzdGluYXRpb25zInx8ISFxPy5zdGF5Py5jaGVja0luO00oImxpc3RIb3RlbHMiLHsuLi5pP3tjaXR5Oml9Ont9LC4uLms/e3NvcnQ6a306e30sLi4uaSYmej97cXVlcnk6en06e30sLi4ucT8udmlldz09PSJob3RlbHMiP2tvKHE/LmFzayk6e30sLi4uSz9XdCgpOnt9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZmlsdGVyIik7aWYodSE9PW51bGwpe2NvbnN0IGs9cT8uYXNrPz97fSx6PWtvKGspO2lmKHUuc3RhcnRzV2l0aCgiYnJhbmQ6Iikpe2NvbnN0IHJlPXUuc2xpY2UoNik7ei5icmFuZD16LmJyYW5kPT09cmU/dm9pZCAwOnJlfWVsc2UgaWYodS5zdGFydHNXaXRoKCJmYWNpbGl0eToiKSl7Y29uc3QgcmU9dS5zbGljZSg5KSxPZT16LmZhY2lsaXRpZXM/P1tdO3ouZmFjaWxpdGllcz1PZS5pbmNsdWRlcyhyZSk/T2UuZmlsdGVyKGN0PT5jdCE9PXJlKTpbLi4uT2UscmVdfWVsc2UodT09PSJmcmVlQ2FuY2VsbGF0aW9uInx8dT09PSJicmVha2Zhc3QiKSYmKHpbdV09IXpbdV0pO2NvbnN0IEs9a28oeik7TSgibGlzdEhvdGVscyIsey4uLlp1KGspLC4uLkt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGZpbHRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc29ydCIpO2lmKGwhPT1udWxsKXtJZT1DZjtjb25zdHtzb3J0OmssLi4uen09cT8uYXNrPz97fTtNKCJsaXN0SG90ZWxzIix7Li4ueiwuLi5sIT09Imdyb3VwIj97c29ydDpsfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgcmVvcmRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UtYWxsIik7aWYoZCE9PW51bGwpe00oImxpc3RIb3RlbHMiLHtjaXR5OmQsYWxsOiEwLC4uLld0KCl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgbT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKG0hPT1udWxsKXtNKCJsaXN0RXh0cmFzIix7Ym9va2luZzptfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgYj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYoYiE9PW51bGwpe00oInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6YixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCB2PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHYhPT1udWxsKXtNKCJsaXN0RXh0cmFzIix7aG90ZWw6diwuLi53bygpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgXz10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZihfIT09bnVsbCl7TSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzpffSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZih3IT09bnVsbCl7TSgicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6d30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0ICQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZigkIT09bnVsbCl7TSgiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6JCxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBOPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoTiE9PW51bGwpe2NvbnN0IGs9cT8udG8/P3t9LHo9cT8uZnJvbT8/e30sSz1xPy5hZGRPbixyZT1rLmNoZWNrSW4mJihrLmNoZWNrSW4hPT16LmNoZWNrSW58fGsuY2hlY2tPdXQhPT16LmNoZWNrT3V0KTtNKCJjaGFuZ2VCb29raW5nIix7Ym9va2luZzpOLGNvbmZpcm1lZDohMCwuLi5yZT97Y2hlY2tJbjprLmNoZWNrSW4sY2hlY2tPdXQ6ay5jaGVja091dH06e30sLi4uSz8uaWQ/e2V4dHJhOksuaWQscXVhbnRpdHk6TnVtYmVyKEsudG8pfTp7fSwuLi5rLnJvb21zIT09dm9pZCAwJiZOdW1iZXIoay5yb29tcykhPT1OdW1iZXIoei5yb29tcyk/e3Jvb21zOk51bWJlcihrLnJvb21zKX06e30sLi4uay5yb29tTmFtZSYmay5yb29tTmFtZSE9PXoucm9vbU5hbWU/e3Jvb206ay5yb29tTmFtZX06e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNoYW5nZSB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBJPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKEk9PT0iYmFjayIpe0x1KCk7cmV0dXJufWNvbnN0IEc9ST09PSJib29raW5ncyI/ImJvb2tpbmdzIjp0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpJiYhdC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT9gaG90ZWw6JHt0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpfWA6IiI7aWYoRyYmaGUubGVuZ3RoJiZ0bihoZS5hdCgtMSk/LnBheWxvYWQpPT09Ryl7THUoKTtyZXR1cm59Y29uc3Qgb2U9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcmVnaW9uIik7aWYob2UhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikhPT0idHJ1ZSI7Zm9yKGNvbnN0IHogb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmVnaW9uXSIpKXouc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoayYmej09PXQpKTtmb3IoY29uc3QgeiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yZWdpb24tYm9keV0iKSl6LmhpZGRlbj0ha3x8ei5nZXRBdHRyaWJ1dGUoImRhdGEtcmVnaW9uLWJvZHkiKSE9PW9lO3JldHVybn1pZihJPT09Im1vcmUtY291bnRyaWVzIil7Zm9yKGNvbnN0IGsgb2YodC5jbG9zZXN0KCJbZGF0YS1yZWdpb24tYm9keV0iKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZXN0W2hpZGRlbl0iKSlrLmhpZGRlbj0hMTt0LmNsb3Nlc3QoIi5wbGFjZXMiKT8ucmVtb3ZlKCk7cmV0dXJufWlmKEk9PT0ibW9yZS1wbGFjZXMiKXtmb3IoY29uc3QgayBvZih0LmNsb3Nlc3QoIi5wbGFjZXMiKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jaGlwLnBsYWNlW2hpZGRlbl0iKSlrLmhpZGRlbj0hMTt0LnJlbW92ZSgpO3JldHVybn1jb25zdCBKPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsIik7aWYoSiE9PW51bGwpe0llPUllPT09Sj8iIjpKO2Zvcihjb25zdCBrIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsLWJvZHldIikpay5oaWRkZW49ay5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwtYm9keSIpIT09SWU7Zm9yKGNvbnN0IGsgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcGFuZWxdIikpay5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLFN0cmluZyhrLmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpPT09SWUpKTtyZXR1cm59aWYoST09PSJjbGVhci1maWx0ZXJzIil7TSgibGlzdEhvdGVscyIsWnUocT8uYXNrKSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjbGVhciB0aGUgZmlsdGVycy4iKSk7cmV0dXJufWlmKEk9PT0iYWxsLWhvdGVscyIpe0NzKCksTSgibGlzdEhvdGVscyIse2FsbDohMCwuLi5XdCgpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09InByaWNlLWxpc3QiKXtqbygwKTtyZXR1cm59aWYoST09PSJmaW5kLWJvb2tpbmciKXtjb25zdCBrPXt2aWV3OiJmaW5kLWJvb2tpbmcifTtfbyhrKSx4ZShrKSxZZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09Imxvb2t1cC1ib29raW5nIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwhei5pbmNsdWRlcygiQCIpKXtSKCJCb3RoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIHRoZSBib29raW5nIHdhcyBtYWRlIHdpdGgsIHBsZWFzZS4iKTtyZXR1cm59TSgibGlzdEJvb2tpbmdzIix7Ym9va2luZzprLGVtYWlsOnp9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvb2sgdGhhdCB1cC4iKSk7cmV0dXJufWlmKEk9PT0iZmluZCIpe2pmKCk7cmV0dXJufWlmKEk9PT0icGFnZS1uZXh0Inx8ST09PSJwYWdlLXByZXYiKXtjb25zdCBrPXE7aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtjb25zdCB6PWlzKCksSz1OdW1iZXIoay5vZmZzZXQ/PzApLHJlPU1hdGgubWluKHosKGsuaG90ZWxzPz9bXSkubGVuZ3RoKTtNKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDpJPT09InBhZ2UtbmV4dCI/SytyZTpNYXRoLm1heCgwLEsteiksbGltaXQ6en0pLnRoZW4oWWUpLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09ImZ1bGxzY3JlZW4iKXtFZS5yZXF1ZXN0RGlzcGxheU1vZGUoe21vZGU6ImZ1bGxzY3JlZW4ifSkudGhlbihrPT57cm49U3RyaW5nKGs/Lm1vZGU/P3JuKTtjb25zdCB6PXE7aWYoIXopcmV0dXJuO2NvbnN0IEs9TnVtYmVyKHoudG90YWw/PzApO3NuKCkmJnoudmlldz09PSJob3RlbHMiJiYoTnVtYmVyKHoub2Zmc2V0Pz8wKT4wfHwoei5ob3RlbHM/P1tdKS5sZW5ndGg8TWF0aC5taW4oMTIsSykpP00oImxpc3RIb3RlbHMiLHsuLi56LmFzaz8/e30sbGltaXQ6MTJ9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk6eGUoeil9KS5jYXRjaCgoKT0+UigiVGhpcyBhcHAgY2Fubm90IG9wZW4gZnVsbCBzY3JlZW4gaGVyZS4iKSk7cmV0dXJufWlmKEk9PT0ibW9yZS1ob3RlbHMiKXtjb25zdCBrPXE7aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtNKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDpOdW1iZXIoay5vZmZzZXQ/PzApKyhrLmhvdGVscz8/W10pLmxlbmd0aCxsaW1pdDoxMn0se2ZvbGQ6ej0+ej8udmlldz09PSJob3RlbHMiP3suLi56LGhvdGVsczpbLi4uay5ob3RlbHM/P1tdLC4uLnouaG90ZWxzPz9bXV0sc2hvd246KGsuaG90ZWxzPz9bXSkubGVuZ3RoKyh6LmhvdGVscz8/W10pLmxlbmd0aCxvZmZzZXQ6TnVtYmVyKGsub2Zmc2V0Pz8wKSxwbGFjZXM6ay5wbGFjZXMsLi4uay53aWRlbmVkP3t3aWRlbmVkOmsud2lkZW5lZH06e319Onp9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgbW9yZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09ImhvbWUiKXtNKCJsaXN0SG90ZWxzIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZigoST09PSJtZW1iZXIifHxJPT09ImZpbmQtYm9va2luZyJ8fEk9PT0iYXNrLXNpZ24taW4iKSYmVXQpcmV0dXJuO2lmKEk9PT0ibWVtYmVyIil7aWYoIVgpcmV0dXJuO2NvbnN0IGs9e3ZpZXc6Im1lbWJlciIsbWVtYmVyOlh9O19vKGspLHhlKGspLFllKCk7cmV0dXJufWlmKEk9PT0iYXNrLXNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtpZihrKWsuaGlkZGVuPSExO2Vsc2V7Y29uc3Qgej17dmlldzoibWVtYmVyLXNpZ24taW4ifTtfbyh6KSx4ZSh6KSxZZSgpfWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0ic2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCF6KXtSKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59TSgic2lnbkluIix7bnVtYmVyOmssc3VybmFtZTp6fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzaWduIGluLiIpKTtyZXR1cm59aWYoST09PSJmb3JnZXQtcHJlZnMiKXtNKCJmb3JnZXRQcmVmZXJlbmNlcyIse30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgZm9yZ2V0IHRoZW0uIikpO3JldHVybn1jb25zdCBCPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXN1Z2dlc3QiKTtpZihCIT09bnVsbCl7Y29uc3Qgaz0ocT8uc3VnZ2VzdGlvbnM/P1tdKVtOdW1iZXIoQildO2s/LmFzaz8udG9vbD9NKFN0cmluZyhrLmFzay50b29sKSxrLmFzay5hcmdzPz97fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBkbyB0aGF0IGp1c3Qgbm93LiIpKTpBcnJheS5pc0FycmF5KGs/LmFza3MpJiZrLmFza3MubGVuZ3RoPyhhc3luYygpPT57Zm9yKGNvbnN0W3osS11vZiBrLmFza3MuZW50cmllcygpKWF3YWl0IE0oU3RyaW5nKEsudG9vbCksSy5hcmdzPz97fSx7cHVzaDp6PT09MH0pfSkoKS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHB1dCBhbGwgb2YgdGhlbSBpbiB0aGUgdHJpcCBqdXN0IG5vdy4iKSk6az8uc2F5JiZFZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKGsuc2F5KX1dfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZihJPT09InNpZ24tb3V0Iil7WD1udWxsLE0oInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoST09PSJhc2stYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7ayYmKGsuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJib29rIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLEs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiIscmU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd0aW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsT2U9Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKExmPT5MZi5kYXRhc2V0LmFzaz8/IiIpLGN0PSEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkO2lmKENlPXtuYW1lOmssZW1haWw6eixub3RlczpLLGFycml2aW5nQXQ6cmUscmVxdWVzdHM6T2UscmVtZW1iZXI6Y3R9LCFrfHwhei5pbmNsdWRlcygiQCIpKXtSKGs/J1RoYXQgZW1haWwgaGFzIG5vICJAIiBpbiBpdCAtIHRoZSBjb25maXJtYXRpb24gbmVlZHMgYW4gYWRkcmVzcyBpdCBjYW4gcmVhY2guJzoiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufU0oInJlcXVlc3RCb29raW5nIix7bmFtZTprLGVtYWlsOnosLi4uSz97bm90ZXM6S306e30sLi4ucmU/e2Fycml2aW5nQXQ6cmV9Ont9LC4uLk9lLmxlbmd0aD97cmVxdWVzdHM6T2V9Ont9LC4uLmN0P3tyZW1lbWJlclJlcXVlc3RzOiEwfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKEk9PT0iYm9va2luZ3MiKXtNKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKEk9PT0idHJpcCIpe00oInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgZ2U9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihnZSl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLHo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTtrJiZ6JiYoVC5jaGVja0luPWssVC5jaGVja091dD16KSxNKCJnZXRIb3RlbCIse2hvdGVsOmdlLC4uLndvKCksLi4uVC5jaGVja0luJiZZPjE/e3Jvb21zOll9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfX0pO2NvbnN0IE5mPSgpPT57aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpKXJldHVybjtjb25zdCBlPXQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpPy52YWx1ZT8/IiI7Q2U9e25hbWU6ZSgiZ25hbWUiKSxlbWFpbDplKCJnbWFpbCIpLG5vdGVzOmUoImdub3RlIiksYXJyaXZpbmdBdDplKCJndGltZSIpLHJlcXVlc3RzOlsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcCh0PT50LmRhdGFzZXQuYXNrPz8iIikscmVtZW1iZXI6ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWR9fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmlkPz8iIjtbImduYW1lIiwiZ21haWwiLCJnbm90ZSIsImd0aW1lIiwiZ3JlbWVtYmVyIl0uaW5jbHVkZXModCkmJk5mKCl9KTtjb25zdCBMdT0oKT0+e2Zvcig7aGUuYXQoLTEpPy5wYXlsb2FkPy52aWV3PT09Im1lbWJlciImJiFYOyloZT1oZS5zbGljZSgwLC0xKTtjb25zdCBlPWhlLmF0KC0xKTtpZighZXx8VXQpe3dmKCk7cmV0dXJufWhlPWhlLnNsaWNlKDAsLTEpLE9vKz0xLFdjKCksTWYoKTtjb25zdCB0PWUudmVyc2lvbj09PUFvP3ZvaWQgMDprXyhlLnBheWxvYWQpO3Q/KHE9ZS5wYXlsb2FkLE0odC5rZXksdC5hcmdzLHtwdXNoOiExfSkuY2F0Y2goKCk9PnhlKGUucGF5bG9hZCwhMCkpLmZpbmFsbHkoWWUpKTooeGUoZS5wYXlsb2FkLCEwKSxZZSgpKX0samY9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aGVyZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFlKXtSKCJXaGVyZSB0bz8gQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbC4iKTtyZXR1cm59Q3MoKTtjb25zdCBuPShxPy5yZWdpb25zPz9bXSkuZmxhdE1hcChvPT4oby5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKHI9PltyLm5hbWUsLi4uKHIuY2l0aWVzPz9bXSkubWFwKHM9PnMubmFtZSldKSkuZmluZChvPT5vLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpO00oImxpc3RIb3RlbHMiLHsuLi5uP3tjaXR5Om59OntxdWVyeTplfSwuLi5XdCgpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzZWFyY2gganVzdCBub3cuIikpfSxDcz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjbyIpO2U/LnZhbHVlJiYoVC5jaGVja0luPWUudmFsdWUpLHQ/LnZhbHVlJiYoVC5jaGVja091dD10LnZhbHVlKSxlPy52YWx1ZSYmKHJzPSEwKX07bGV0IEVzLHB0PSExO2NvbnN0IE1mPSgpPT57Y2xlYXJUaW1lb3V0KEVzKSxwdD0hMX0saGs9ZT0+ZT8udmlldz09PSJob3RlbHMifHxlPy52aWV3PT09Im5vLWhvdGVscyImJiEhZT8uYXNrLGpvPShlPTApPT57Y2xlYXJUaW1lb3V0KEVzKSxwdD0hMCxFcz1zZXRUaW1lb3V0KCgpPT57aWYoIWhrKHEpKXtwdD0hMTtyZXR1cm59aWYoVXQpe2pvKDE1MCk7cmV0dXJufXB0PSExLE0oImxpc3RIb3RlbHMiLHsuLi5SXyhxPy5hc2spLC4uLld0KCl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHByaWNlIHRob3NlIG5pZ2h0cy4iKSl9LGUpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57aWYoZS50YXJnZXQ/LmlkPT09IndoZXJlIiYmZS5rZXk9PT0iRW50ZXIiJiYhZS5pc0NvbXBvc2luZyl7ZS5wcmV2ZW50RGVmYXVsdCgpLGpmKCk7cmV0dXJufWNvbnN0IHQ9ZS50YXJnZXQ7IXR8fHQuZ2V0QXR0cmlidXRlKCJyb2xlIikhPT0iYnV0dG9uInx8ZS5rZXkhPT0iRW50ZXIiJiZlLmtleSE9PSIgInx8KGUucHJldmVudERlZmF1bHQoKSx0LmNsaWNrKCkpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDt0Py50eXBlPT09ImRhdGUiJiYocnM9ITApO2NvbnN0IG89e2RjaTpbImRjaSIsImRjbyJdLGRjbzpbImRjaSIsImRjbyJdLGxjaTpbImxjaSIsImxjbyJdLGxjbzpbImxjaSIsImxjbyJdfVt0Py5pZD8/IiJdO2lmKG8pe2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1swXSksdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzFdKTtpZighaXx8IXUpcmV0dXJuO2lmKHQuaWQ9PT1vWzBdJiZpLnZhbHVlKXtjb25zdCBsPVZlKGkudmFsdWUsMSk7dS5taW49bCwoIXUudmFsdWV8fHUudmFsdWU8PWkudmFsdWUpJiYodS52YWx1ZT1sKX1ULmNoZWNrSW49aS52YWx1ZXx8VC5jaGVja0luLFQuY2hlY2tPdXQ9dS52YWx1ZXx8VC5jaGVja091dCxvWzBdPT09ImxjaSImJmpvKDMwMCk7cmV0dXJufWlmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIXJ8fCFzKXJldHVybjtpZih0LmlkPT09ImNpIiYmci52YWx1ZSl7Y29uc3QgaT1WZShyLnZhbHVlLDEpO3MubWluPWksKCFzLnZhbHVlfHxzLnZhbHVlPD1yLnZhbHVlKSYmKHMudmFsdWU9aSl9VC5jaGVja0luPXIudmFsdWV8fFQuY2hlY2tJbixULmNoZWNrT3V0PXMudmFsdWV8fFQuY2hlY2tPdXQ7Y29uc3QgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7YSYmKGEudGV4dENvbnRlbnQ9c3MoKSksYXMoKX0pO2NvbnN0IHFmPShlLHQpPT57dHJ5eyRmKHQpO2NvbnN0IG49ZT9KU09OLnN0cmluZ2lmeShlKToiIjtpZihuJiZuPT09U2YmJkpTT04uc3RyaW5naWZ5KHEpPT09emYpcmV0dXJuO2U/LnN0YXk/LmNoZWNrSW4mJihycz0hMCksaGU9W10sT28rPTEsV2MoKSxNZigpLEllPUNmLHhlKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxwZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07RWUub250b29scmVzdWx0PWU9PnFmKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtjb25zdCBEZj1lPT57QXJyYXkuaXNBcnJheShlPy5hdmFpbGFibGVEaXNwbGF5TW9kZXMpJiYoT2Y9ZS5hdmFpbGFibGVEaXNwbGF5TW9kZXMubWFwKFN0cmluZykpLHR5cGVvZiBlPy5kaXNwbGF5TW9kZT09InN0cmluZyImJmUuZGlzcGxheU1vZGUhPT1ybiYmKHJuPWUuZGlzcGxheU1vZGUscT8udmlldz09PSJob3RlbHMiJiZ4ZShxKSl9O2xldCBVdTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e2NsZWFyVGltZW91dChVdSksVXU9c2V0VGltZW91dCgoKT0+e3E/LnZpZXchPT0iaG90ZWxzInx8c24oKXx8KEpjPVZjKCksaXMoKSE9PVpvJiZ4ZShxKSl9LDE1MCl9KTtFZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT57YmYoZSx2ZiksRGYoZSl9O0VlLmNvbm5lY3QoKS50aGVuKCgpPT57Y29uc3QgZT1FZS5nZXRIb3N0Q29udGV4dCgpO2JmKGUsdmYpLERmKGUpO2NvbnN0IHQ9ZT8udG9vbEluZm8/LnJlc3VsdD8uc3RydWN0dXJlZENvbnRlbnQ7dCYmcWYodCxlPy50b29sSW5mbz8ucmVzdWx0Py5fbWV0YSl9KS5jYXRjaCgoKT0+e3BlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+Q291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGhvc3QuPC9kaXY+J30pOzwvc2NyaXB0PgogICAgPHN0eWxlIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4+OnJvb3R7LS1raXQtYmc6ICNmZmZmZmY7LS1raXQtYmctc29mdDogI2Y2ZjdmOTstLWtpdC1mZzogIzFhMWYyYjstLWtpdC1mZy1zb2Z0OiAjNjI2YjdhOy0ta2l0LWZnLWZhaW50OiAjOGE5M2ExOy0ta2l0LWxpbmU6ICNlM2U3ZWQ7LS1raXQtYWNjZW50OiAjMWExZjJiOy0ta2l0LWFjY2VudC1mZzogI2ZmZmZmZjstLWtpdC1saW5rOiAjMjU2M2ViOy0ta2l0LWdvb2Q6ICMxYTdmNWE7LS1raXQtZ29vZC1iZzogI2RkZjNlNDstLWtpdC1iYWQ6ICNiMzI2MWU7LS1raXQtYmFkLWJnOiAjZmJlNmU0Oy0ta2l0LXdhcm46ICM4YTVhMDA7LS1raXQtd2Fybi1iZzogI2ZkZjBkNTstLWtpdC1yaW5nOiAjMjU2M2VifVtkYXRhLXRoZW1lPWRhcmtdey0ta2l0LWJnOiAjMWQxZjIzOy0ta2l0LWJnLXNvZnQ6ICMyNjI5MmU7LS1raXQtZmc6ICNlY2VlZjE7LS1raXQtZmctc29mdDogI2E0YWJiNjstLWtpdC1mZy1mYWludDogIzdjODQ5MTstLWtpdC1saW5lOiAjMzYzYTQxOy0ta2l0LWFjY2VudDogI2VjZWVmMTstLWtpdC1hY2NlbnQtZmc6ICMxZDFmMjM7LS1raXQtbGluazogIzdhYTdmZjstLWtpdC1nb29kOiAjNmZkM2EyOy0ta2l0LWdvb2QtYmc6ICMxZjNhMmQ7LS1raXQtYmFkOiAjZmY4YTgwOy0ta2l0LWJhZC1iZzogIzNkMjMyMjstLWtpdC13YXJuOiAjZjJjNDZiOy0ta2l0LXdhcm4tYmc6ICMzYTMwMjA7LS1raXQtcmluZzogIzdhYTdmZn06cm9vdHstLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnksIHZhcigtLWtpdC1iZykpOy0tYmctc29mdDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnksIHZhcigtLWtpdC1iZy1zb2Z0KSk7LS1mZzogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5LCB2YXIoLS1raXQtZmcpKTstLWZnLXNvZnQ6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtZmctc29mdCkpOy0tZmctZmFpbnQ6IHZhcigtLWNvbG9yLXRleHQtdGVydGlhcnksIHZhcigtLWtpdC1mZy1mYWludCkpOy0tbGluZTogdmFyKC0tY29sb3ItYm9yZGVyLXByaW1hcnksIHZhcigtLWtpdC1saW5lKSk7LS1hY2NlbnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudCkpOy0tYWNjZW50LWZnOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQtZmcpKTstLWxpbms6IHZhcigtLWNvbG9yLXRleHQtaW5mbywgdmFyKC0ta2l0LWxpbmspKTstLWdvb2Q6IHZhcigtLWNvbG9yLXRleHQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QpKTstLWdvb2QtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QtYmcpKTstLWJhZDogdmFyKC0tY29sb3ItdGV4dC1kYW5nZXIsIHZhcigtLWtpdC1iYWQpKTstLWJhZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIsIHZhcigtLWtpdC1iYWQtYmcpKTstLXdhcm46IHZhcigtLWNvbG9yLXRleHQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4pKTstLXdhcm4tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4tYmcpKTstLXJpbmc6IHZhcigtLWNvbG9yLXJpbmctcHJpbWFyeSwgdmFyKC0ta2l0LXJpbmcpKTstLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sZywgMTRweCk7LS1yYWRpdXMtc206IHZhcigtLWJvcmRlci1yYWRpdXMtc20sIDlweCk7LS1mb250OiB2YXIoLS1mb250LXNhbnMsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBzYW5zLXNlcmlmKTstLW1vbm86IHZhcigtLWZvbnQtbW9ubywgdWktbW9ub3NwYWNlLCAiU0YgTW9ubyIsIE1lbmxvLCBtb25vc3BhY2UpOy0tc2hhZG93OiB2YXIoLS1zaGFkb3ctc20sIDAgMXB4IDJweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCksIDAgMnB4IDVweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCkpfSp7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uY2FyZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3gtc2hhZG93OnZhcigtLXNoYWRvdyk7bWF4LXdpZHRoOjU2MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0taW5zZXQtbGVmdCwgMHB4KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWluc2V0LXJpZ2h0LCAwcHgpfS5oZWFke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjE0cHggMThweCAwfS5oZWFkIC50aXRsZXtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC50aXRsZVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0jY29udGVudHtwYWRkaW5nOjEwcHggMThweCAxOHB4fS5yZWZyZXNoe21hcmdpbi1sZWZ0OjhweDthbGlnbi1zZWxmOmNlbnRlcjtmbGV4Om5vbmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O3BhZGRpbmc6MDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjEycyxjb2xvciAuMTJzfS5yZWZyZXNoOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLWZnKTtib3JkZXItY29sb3I6dmFyKC0tZmctc29mdCl9LnJlZnJlc2g6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNn0ucmVmcmVzaFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ucmVmcmVzaCBzdmd7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtkaXNwbGF5OmJsb2NrfS5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpraXQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMga2l0LXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uZW1wdHl7cGFkZGluZzoxOHB4IDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHh9LmhpbnR7bWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vdGV7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nOjAgMCAxMHB4fS5tb25ve2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctZmFpbnQpfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcH0uYmFkZ2Uub2t7Y29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uYmFkZ2Uud2FybiwuYmFkZ2UudG9kb3tjb2xvcjp2YXIoLS13YXJuKTtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpfS5iYWRnZS5lcnJ7Y29sb3I6dmFyKC0tYmFkKTtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyl9LmJ1eXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ0cHg7cGFkZGluZzoxMXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NTA7Y3Vyc29yOnBvaW50ZXJ9LmJ1eTpkaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1jb2xvcjp2YXIoLS1saW5lKTtjb2xvcjp2YXIoLS1mZy1mYWludCk7Y3Vyc29yOmRlZmF1bHR9LmJ1eS5hbHQsLmdob3N0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSl9Lmdob3N0e2ZsZXg6MTttaW4taGVpZ2h0OjQwcHg7cGFkZGluZzo5cHggMTBweDtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXJ9Lmxpbmt7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6NnB4IDAgMDtjb2xvcjp2YXIoLS1saW5rKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnF0eXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHh9LnF0eSBidXR0b257d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0ucXR5IHNwYW57bWluLXdpZHRoOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTB9YnV0dG9uOmZvY3VzLXZpc2libGUsYTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLXJpbmcpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEobWF4LXdpZHRoOjQzMHB4KXsuY2FyZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LmhlYWR7cGFkZGluZzoxMnB4IDE0cHggMH0jY29udGVudHtwYWRkaW5nOjhweCAxNHB4IDE0cHh9LmJ1eXttaW4taGVpZ2h0OjQ4cHg7Zm9udC1zaXplOjE1cHh9Lmdob3N0e21pbi1oZWlnaHQ6NDRweDtmb250LXNpemU6MTMuNXB4fS5xdHkgYnV0dG9ue3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7Zm9udC1zaXplOjE5cHh9LnJlZnJlc2h7d2lkdGg6MzRweDtoZWlnaHQ6MzRweH0uaGludCwubm90ZSwuZW1wdHl7Zm9udC1zaXplOjEzcHh9fUBtZWRpYShwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOm5vbmV9Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSNjb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHh9LmhlYWR7bWluLWhlaWdodDoyOHB4fS5ob21le2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MH0uaG9tZTpob3ZlcntvcGFjaXR5Oi43Mn0uaGVhZCAuYnJhbmR7bWF4LWhlaWdodDozNHB4O21heC13aWR0aDoxNTBweDtvYmplY3QtZml0OmNvbnRhaW59LmhlYWQgLnRpdGxle2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTVweDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmJhY2tidG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDExcHggNHB4IDhweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDttYXgtd2lkdGg6NDIlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2N1cnNvcjpwb2ludGVyfS5iYWNrYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmcpfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uY2FyZC5idXN5e29wYWNpdHk6LjYyfS5jYXJkLmJ1c3kgYnV0dG9uLC5jYXJkLmJ1c3kgaW5wdXQsLmNhcmQuYnVzeSBzZWxlY3R7cG9pbnRlci1ldmVudHM6bm9uZX0ubWVtYmVyY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5tZW1iZXJjaGlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lmxpbmt5e2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2NvbG9yOnZhcigtLWxpbmspO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LnAtd2Fze2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucC1tZW1iZXJ7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uc3VtLmdvb2Qgc3BhbjpsYXN0LWNoaWxke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmRlbW97ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LmRlbW8gYntmb250LXdlaWdodDo3MDB9LmNpdHlncm91cCsuY2l0eWdyb3Vwe21hcmdpbi10b3A6MTRweH0uY2l0eW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tYm90dG9tOjhweH0uY2l0eW5hbWUgc21hbGx7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwO29wYWNpdHk6Ljc1fS50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE5NnB4LDFmcikpO2dhcDoxMHB4fS50aWxle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tYmcpO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7cGFkZGluZzowfS50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1mZy1mYWludCl9LnQtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTthc3BlY3QtcmF0aW86MTYgLyAxMDtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnQtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnQtbWFya3tmb250LXNpemU6MzBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07b3BhY2l0eTouOTI7dGV4dC1zaGFkb3c6MCAxcHggMTJweCByZ2IoMCAwIDAgLyAyMiUpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udC1zaG90IGltZywuaGVybyBpbWd7ei1pbmRleDoxfS50LWJyYW5ke3otaW5kZXg6Mjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgxMTJweCwxZnIpIG1pbm1heCgxMTJweCwxZnIpIGF1dG8gMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbCwuc3RheSAuZ3Vlc3Rze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0uZmxleC1kYXRlc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZzoycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmZke2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O21pbi13aWR0aDo3OHB4O3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9LmZkOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mZC1kYXl7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtO2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOm5vd3JhcH0uZmQtcHJpY2V7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2NTA7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZmQub257YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Y3Vyc29yOmRlZmF1bHR9LmZkLm9uIC5mZC1kYXl7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtvcGFjaXR5Oi44NX0uZmQuYmVzdHtib3JkZXItY29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uZmQuYmVzdCAuZmQtcHJpY2UsLmZkLmJlc3QgLmZkLWRheXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5mZC5vdXQgLmZkLXByaWNle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtd2VpZ2h0OjUwMH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LnBhZ2Vye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweH0ucGFnZXIgLm57Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTU7Y3Vyc29yOmRlZmF1bHR9LmdvLnF1aWV0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NjIwfS5nby5kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1iYWQpO2NvbG9yOnZhcigtLWJnKX0ubm90ZXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNX0uZm9ybXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMXB4O21hcmdpbi10b3A6MTBweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZm9ybSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo4cHggOXB4fS5mb3JtIC50d297ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHh9LmNvbmZ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjE2cHggMTJweH0uY29uZiAuY29kZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MjA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb25mIC53aGVyZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMH0uY29uZiAud2hlbntmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS51bnBhaWR7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS51bnBhaWQgYntmb250LXdlaWdodDo3MjB9Lndhcm5ub3Rle2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6OXB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnRpbGUub3ZlcntvcGFjaXR5Oi44Mn0uYXNrZWQtbGluZXtmb250LXN0eWxlOml0YWxpY30uYXNrZWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmFza2VkIGJ7Zm9udC13ZWlnaHQ6NzIwO2NvbG9yOnZhcigtLWZnKX0uYXNrZWQuZmxhZ3tiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS13YXJuKX0uYXNrZWQuZmxhZyBie2NvbG9yOnZhcigtLXdhcm4pfS5hc2tze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0uYXNrcy10e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXAuYXNre2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4fS5jaGlwLmFza1thcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9Lm1vbmV5LW91dHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjYwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucHJvc2V7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOnByZS13cmFwfS5wcm9zZSBoNHttYXJnaW46MTRweCAwIDRweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmVtcHR5e2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MThweCA0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVycntiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey50aWxlc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjhweH0udC1tYXJre2ZvbnQtc2l6ZToyNHB4fS5zdGF5e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zdGF5IC5ndWVzdHN7Z3JpZC1jb2x1bW46MX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uc3RheSAuZ297Z3JpZC1jb2x1bW46Mjt3aWR0aDoxMDAlfS5yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgYWN0aW9uIiAicHJpY2UgYWN0aW9uIjtyb3ctZ2FwOjZweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IGFjdGlvbiIgInRodW1iIHByaWNlIGFjdGlvbiJ9LnJvdy53aXRodGh1bWIgLnRodW1ie3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7YWxpZ24tc2VsZjpzdGFydH0ucm93IC5wcmljZXt0ZXh0LWFsaWduOnN0YXJ0fS5mb3JtIC50d297Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19LmNtcC13cmFwe292ZXJmbG93LXg6YXV0bzttYXJnaW4taW5saW5lOi0ycHg7cGFkZGluZzoycHh9LmNtcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg3NnB4LDk2cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTEycHgsMWZyKSk7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOjhweH0uY21wLmZvdXJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg1NnB4LDcycHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoOTZweCwxZnIpKX0uY21wLWNvcm5lcntncmlkLWNvbHVtbjoxO2dyaWQtcm93OjEgLyBzcGFuIHZhcigtLWhlYWQtcm93cywgNSl9LmNtcC1oZWFke2Rpc3BsYXk6Z3JpZDtncmlkLXJvdzoxIC8gc3BhbiB2YXIoLS1oZWFkLXJvd3MsIDUpO2dyaWQtdGVtcGxhdGUtcm93czpzdWJncmlkO3Jvdy1nYXA6NnB4O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO21pbi13aWR0aDowO3BhZGRpbmctYm90dG9tOjEycHh9LmNtcC1oZWFkPi5jb2wtbmFtZSwuY21wLWhlYWQ+LmNvbC1wcmljZSwuY21wLWhlYWQ+LndoeSwuY21wLWhlYWQ+LnBje21hcmdpbi1pbmxpbmU6MTFweH0uY21wLWhlYWQ+LmNvbC1uYW1le21hcmdpbi10b3A6NHB4fS53aHkubm9uZXtib3JkZXI6MDtwYWRkaW5nOjB9LnBpY2ttYXJrLm5vbmV7dmlzaWJpbGl0eTpoaWRkZW59LmNtcCAua3ttYXJnaW4tdG9wOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtbmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmNvbC1wcmljZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb2wtcHJpY2Ugc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jb2wtcHJpY2Ugc21hbGwuc3Vie2Rpc3BsYXk6YmxvY2t9LndoeXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItaW5saW5lLXN0YXJ0OjJweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nLWlubGluZS1zdGFydDo4cHh9LnBje2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweDtmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDV9LnBjIGRpdntkaXNwbGF5OmZsZXg7Z2FwOjVweH0ucGMgLm17ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo3MDB9LnBjIC5wcm8gLm17Y29sb3I6dmFyKC0tZ29vZCl9LnBjIC5jb24gLm17Y29sb3I6dmFyKC0tZmctc29mdCl9LmNtcCAuaywuY21wIC52e2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NTtwYWRkaW5nOjZweCA4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY21wIC5re2dyaWQtY29sdW1uOjE7Y29sb3I6dmFyKC0tZmctc29mdCk7cG9zaXRpb246c3RpY2t5O2luc2V0LWlubGluZS1zdGFydDowO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5jbXAgLnZ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jbXAgLnYuYWx0LC5jbXAgLms6aGFzKCsudi5hbHQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czo2cHh9LnBpY2ttYXJre2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjNweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fS5kYXlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoyOHB4IDFmcjtnYXA6MTBweH0uZGF5bnVte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHh9LmRheW51bSBie2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5bnVtIGl7ZmxleDoxO3dpZHRoOjFweDtiYWNrZ3JvdW5kOnZhcigtLWxpbmUpfS5kYXlyb3c6bGFzdC1jaGlsZCAuZGF5bnVtIGl7ZGlzcGxheTpub25lfS5kYXlib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxNHB4O21pbi13aWR0aDowfS5kYXlsYWJlbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmRheW5vdGV7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9Lm1vbWVudHN7bGlzdC1zdHlsZTpub25lO21hcmdpbjoycHggMCAwO3BhZGRpbmc6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHh9Lm1vbWVudHMgbGl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczo4NHB4IDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5tb21lbnRzIC53aGVue292ZXJmbG93LXdyYXA6YW55d2hlcmU7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubW9tZW50cyAud2hhdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjR9Lm1vbWVudHMgLndoYXQgYntmb250LXdlaWdodDo2MjB9Lm1vbWVudHMgLndoYXQgc21hbGx7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6OTZweCAxZnI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpwb2ludGVyfS5wbGFuLXN0YXkgLnBzLXNob3R7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0Ojg0cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0ucGxhbi1zdGF5IC5wcy1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ucGxhbi1zdGF5IC5wcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6M3B4O3BhZGRpbmc6OXB4IDEwcHggOXB4IDA7bWluLXdpZHRoOjB9LnBsYW4tc3RheSAubmFtZXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLXN0YXkgLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4tc3RheSAucHMtcHJpY2V7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjIwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucGxhbi1uaWdodHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXRvcDoxcHggZGFzaGVkIHZhcigtLWxpbmUpO3BhZGRpbmctdG9wOjZweDtjdXJzb3I6cG9pbnRlcn0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fS5zdWdnZXN0e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21hcmdpbi10b3A6MTRweH0uc3VnZ2VzdCAuY2hpcHtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHggMTFweDtjb2xvcjp2YXIoLS1mZyl9LnN1Z2dlc3QgLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LnN1Z2dlc3QgLmNoaXA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZm9ybSBsYWJlbC5yZW1lbWJlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZvbnQtd2VpZ2h0OjQwMDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MH0uZm9ybSBsYWJlbC5yZW1lbWJlciBpbnB1dHttYXJnaW46MnB4IDAgMH0ucGxhY2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwLnBsYWNle2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweCAxMHB4O2NvbG9yOnZhcigtLWZnKX0uY2hpcC5wbGFjZSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNoaXAucGxhY2U6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmNoaXAucGxhY2UudGFie2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC5wbGFjZS50YWJbYXJpYS1leHBhbmRlZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5jaGlwLnBsYWNlOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LnN1Z2dlc3QgLmNoaXAuc2F5IHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpfS5maW5kZXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHh9LmZpbmRlciBpbnB1dHtmbGV4OjE7bWluLXdpZHRoOjA7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OXB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpfS5maW5kZXIgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0ucmVnaW9ue2Rpc3BsYXk6Z3JpZDtnYXA6MTBweH0uY291bnRyeW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjZweH0uY291bnRyeW5hbWUgc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0e2Rpc3BsYXk6Z3JpZDtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSl9LmRlc3Q6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOjB9LmRlc3QtY291bnRyeXtqdXN0aWZ5LXNlbGY6c3RhcnQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDpub25lO2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmxlZnR9LmRlc3QtY291bnRyeSBzbWFsbHtmb250LXdlaWdodDo0MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmRlc3QtY291bnRyeSAubntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3QtY291bnRyeTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5kZXN0LWNvdW50cnk6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZmluZGVyIC5nb3tmbGV4Om5vbmU7cGFkZGluZzo5cHggMThweDtmb250LXNpemU6MTNweH0uc29ydHMta3thbGlnbi1zZWxmOmNlbnRlcjtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1yaWdodDoycHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9LnNlYXJjaHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnNlYXJjaCAuc3RheXtwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lfS5zZWFyY2ggLndoZXJle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zZWFyY2ggLndoZXJlIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo5cHggMTFweH0uc2VhcmNoIC53aGVyZSBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5zZWFyY2ggLnN0YXkgLmdve3BhZGRpbmc6OXB4IDE0cHg7Zm9udC1zaXplOjEzcHh9LnQtdGFnc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjRweDttYXJnaW4tdG9wOjRweH0udC1mcm9tLnQtbm9uZXtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHh9LnN0YXkgLmdvLnF1aWV0e3BhZGRpbmc6OHB4IDEycHg7Zm9udC1zaXplOjEyLjVweH0uZmlsdGVyLXBhbmVse2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uZmdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udC1mcm9tIC50LXN1YntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MXB4fS5jaGlwLnNvcnRbYXJpYS1wcmVzc2VkPXRydWVdIHNtYWxse2NvbG9yOmluaGVyaXR9LmNoaXAudG9vbHtmb250LXdlaWdodDo2MDB9LmNoaXAudG9vbFthcmlhLWV4cGFuZGVkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgPGRpdiBjbGFzcz0iaGVhZCI+CiAgICAgICAgPCEtLSBUaGUgZ3JvdXAncyB3b3JkbWFyayBhcnJpdmVzIFdJVEggVEhFIERBVEEgYXMgYGxvZ29VcmxgLiBOb3RoaW5nIGlzCiAgICAgICAgICAgICBiYWtlZCBpbiBoZXJlOiBhIGxvZ28gY29tcGlsZWQgaW50byB0aGUgY2FyZCBpcyB0aGUgZmlyc3QgYnJhbmQncywKICAgICAgICAgICAgIGFuZCBldmVyeSBob3RlbCBncm91cCBhZnRlciB0aGVtIHdvdWxkIHdlYXIgaXQuIC0tPgogICAgICAgIDwhLS0gVGhlIHdheSBiYWNrLCBvbiBldmVyeSB2aWV3LiBXaXRob3V0IGl0IHRoZSB0cmlwLCB0aGUgYm9va2luZ3MgbGlzdAogICAgICAgICAgICAgYW5kIGEgY2FuY2VsbGVkIGJvb2tpbmcgYXJlIGFsbCBwbGFjZXMgYSBndWVzdCBjYW4gcmVhY2ggYW5kIG5vdAogICAgICAgICAgICAgbGVhdmUgKHJvYmluLCAyMDI2LTA5LTE4KS4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaG9tZSIgaWQ9ImhvbWUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiIGFyaWEtbGFiZWw9IkJhY2sgdG8gdGhlIGhvdGVscyI+CiAgICAgICAgICA8aW1nIGNsYXNzPSJicmFuZCIgaWQ9ImJyYW5kIiBhbHQ9IiIgaGlkZGVuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRpdGxlIiBpZD0idGl0bGUiPjwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8IS0tIE9uZSBzdGVwIGJhY2sgSU5TSURFIHRoZSBjYXJkLiBUaGUgYnJhbmQgYWJvdmUgZ29lcyBob21lLCB3aGljaCBpcyBhCiAgICAgICAgICAgICBkaWZmZXJlbnQgYW5zd2VyOyB0aGlzIGNvbWVzIGJhY2sgdG8gdGhlIG9uZSB0aGV5IHdlcmUgcmVhZGluZyAtIHRoZQogICAgICAgICAgICAgdGhyZWUgaG90ZWxzIHRoZXkgd2VyZSBjb21wYXJpbmcgd2hlbiB0aGV5IHRhcHBlZCBvbmUgKHJvYmluLAogICAgICAgICAgICAgMjAyNi0wOS0yMSkuIEhpZGRlbiB1bmxlc3MgdGhlcmUgaXMgc29tZXdoZXJlIHRvIGdvIGJhY2sgdG8sIGFuZAogICAgICAgICAgICAgY2xlYXJlZCB3aGVuZXZlciB0aGUgY29udmVyc2F0aW9uIHNlbmRzIGEgbmV3IGFuc3dlci4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFja2J0biIgaWQ9ImJhY2tidG4iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJhY2siIGhpZGRlbj48L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic3ViIiBpZD0ic3ViIj48L3NwYW4+CiAgICAgICAgPCEtLSBUaGUgdGllciwgb3IgdGhlIHdheSBpbi4gQSBtZW1iZXIgcmF0ZSBpcyBhIGZhY3QgYWJvdXQgZXZlcnkgcHJpY2UKICAgICAgICAgICAgIG9uIHRoZSBjYXJkLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBoZWFkZXIgcmF0aGVyIHRoYW4gb24gb25lIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbWJlcmNoaXAiIGlkPSJtZW1iZXJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+PC9idXR0b24+CiAgICAgICAgPCEtLSBUaGUgdHJpcCwgZnJvbSB0aGUgdG9wLiBUaGUgc2hvcHBpbmcgY2FyZCBsZWFybmVkIG9uIDIwMjYtMDktMTcgdGhhdAogICAgICAgICAgICAgYSBmb290ZXItb25seSBjYXJ0IG1lYW5zIHNjcm9sbGluZyBwYXN0IHR3ZW50eSB0aWxlcyB0byByZWFjaCBpdC4KICAgICAgICAgICAgIFNob3duIG9uY2UgdGhlIHRyaXAgaGFzIHNvbWV0aGluZyBpbiBpdCwgaGlkZGVuIG9uIHRoZSB0cmlwIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhlYWR0cmlwIiBpZD0iaGVhZHRyaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiIGhpZGRlbiBhcmlhLWxhYmVsPSJWaWV3IHRoZSB0cmlwIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIgogICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNCA4LjVoMTZ2MTFhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0xM0ExLjUgMS41IDAgMCAxIDQgMTkuNXoiIC8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDguNVY2YTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAydjIuNSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gaWQ9ImhlYWR0cmlwbiI+MDwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjxkaXYgY2xhc3M9ImVtcHR5Ij5Mb2FkaW5n4oCmPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K', 'base64').toString('utf8');
|
|
5
|
+
export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgQmY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLEhmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxYYz17fSxWZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9SGYoZCxvKSxkIGluIFhjKXJldHVybjtYY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1pLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCAkPWlbd107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOkJmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBKZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBLZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBEbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIFdmKGUpe31mdW5jdGlvbiBHZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIFFmKGUpe31mdW5jdGlvbiBicyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiB2cyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+TnMobikpLmpvaW4odCl9ZnVuY3Rpb24gem8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIFlme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIG5ldyBZZihlKX1mdW5jdGlvbiBScyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBGZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gVnUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgZXU9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gSnUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1ldSlyZXR1cm4gbz09PXZvaWQgMCYmKG89ZXUsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFhmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gaXQoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBMbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBaZShlKXtyZXR1cm4gTG8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gS3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBpdCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBXdShlLHQsbil7dCBpbiBlP2l0KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gdHQoZSx0LG4sbyl7Y29uc3Qgcj1aZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD9LdShlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTpXdShlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiBlbShlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/S3UoZSxuLCgpPT50W25dKTpXdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiB0bShlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gbm0oZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gb20oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIHJtKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gR3UoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIFF1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgWnM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IFl1PXVuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gSGUoZSl7aWYoZnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKGZ0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIEhlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gc20oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgaW09ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LFRvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksWHU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBRKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBhbShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBOcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBlbChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IHRsPXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxubD17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gb2woZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gdHQocyxlLEZvKGUsdCkpLFEoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBGbyhlLHQpe2NvbnN0IG49WmUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBybChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoRm8oZSx0KSksYT17fTtyZXR1cm4gdHQoYSxlLFJlZmxlY3Qub3duS2V5cyhaZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLFEoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBzbChlLHQpe2lmKCFIZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1aZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gUShlLHVlKGUuX3pvZC5kZWYse3NoYXBlOmlsKGUsdCl9KSl9ZnVuY3Rpb24gaWwoZSx0KXtjb25zdCBuPXt9O3JldHVybiB0dChuLGUsUmVmbGVjdC5vd25LZXlzKFplKGUpKSksZW0obix0KSxufWZ1bmN0aW9uIGFsKGUsdCl7aWYoIUhlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBRKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6aWwoZSx0KX0pKX1mdW5jdGlvbiBjbChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTt0dChuLGUsUmVmbGVjdC5vd25LZXlzKFplKGUpKSksdHQobix0LFJlZmxlY3Qub3duS2V5cyhaZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBRKGUsbyl9ZnVuY3Rpb24geXMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KEZvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiB0dCh1LHQsUmVmbGVjdC5vd25LZXlzKFplKHQpKSxlJiYoKGwsZCk9PmkmJiFpLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiB1bChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoRm8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIHR0KHIsdCxSZWZsZWN0Lm93bktleXMoWmUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGZlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbGwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIGx0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIF9zKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBTZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOmx0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9sdChzPy4oZSkpPz9sdCh0Py5lcnJvcj8uKGUpKT8/bHQobi5jdXN0b21FcnJvcj8uKGUpKT8/bHQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGlbdV09ZVt1XSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGNtPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIEhvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWNtLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gVm8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIGRsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gbXQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiB1bShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gcGwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIGhsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gbG0oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gcGwodCtuKX1mdW5jdGlvbiBkbShlKXtyZXR1cm4gaGwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIHBtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBobShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBmbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIGZsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6bW0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBqZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBKbyhlLHQsbil7cmV0dXJuIGplKGUsdCxuLCExKX1mdW5jdGlvbiBsbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gamUodGhpcyxuLG8odGhpcykpfSxzZXQocil7amUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIG1tKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpqZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe2plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBnbShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGxzLExlPSExO2NvbnN0IGJtPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7TGU9ITB9fTtmdW5jdGlvbiBPKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmbHMhPT1lLl96b2Qpe2xzPXZvaWQgMDtyZXR1cm59bHM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LGJtKTtjb25zdCByPUxlO0xlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIExlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksTGU9TGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxMZT1MZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gbWwoZSx0LG4sbyl7Y29uc3Qgcj1nbShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IGdsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24ganMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtnbF09ITAsdH1jb25zdCBNcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6bmwsQ09OU1RBTlRfQ0FUQ0g6Z2wsQ2xhc3M6Zm0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6dGwsYWJvcnRlZDpmZSxhbGxvd3NFdmFsOll1LGFzc2VydDpRZixhc3NlcnRFcXVhbDpKZixhc3NlcnRJczpXZixhc3NlcnROZXZlcjpHZixhc3NlcnROb3RFcXVhbDpLZixhc3NpZ25Qcm9wOml0LGF0dGFjaFNjaGVtYTpfcyxiYXNlNjRUb1VpbnQ4QXJyYXk6cGwsYmFzZTY0dXJsVG9VaW50OEFycmF5OmxtLGNhY2hlZDp1bixjYXB0dXJlU3RhY2tUcmFjZTpacyxjbGVhbkVudW06dW0sY2xlYW5SZWdleDpGZSxjbG9uZTpRLGNsb25lRGVmOnRtLGNvZGVQb2ludExlbmd0aDpIbyxjb25zdGFudENhdGNoOmpzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6YW0sZGVmaW5lTGF6eTpKdSxkZWZpbmVMYXp5SW50ZXJuYWw6TyxkZXJpdmVkOmxuLGVzYzpHdSxlc2NhcGVSZWdleDpOZSxleHBsaWNpdGx5QWJvcnRlZDpsbCxleHRlbmQ6c2wsZmluYWxpemVJc3N1ZTpTZSxmbG9hdFNhZmVSZW1haW5kZXI6VnUsZ2V0RWxlbWVudEF0UGF0aDpubSxnZXRFbnVtVmFsdWVzOmJzLGdldExlbmd0aGFibGVPcmlnaW46Vm8sZ2V0UGFyc2VkVHlwZTppbSxnZXRTaXphYmxlT3JpZ2luOkJvLGhleFRvVWludDhBcnJheTpwbSxoaWRlOkpvLGluc3RhbGxMYXp5UHJvcDptbCxpc09iamVjdDpmdCxpc1BsYWluT2JqZWN0OkhlLGlzc3VlOm10LGpvaW5WYWx1ZXM6dnMsanNvblN0cmluZ2lmeVJlcGxhY2VyOnpvLG1lbWJlcnM6ZmwsbWVyZ2U6Y2wsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6UnMsbnVtS2V5czpzbSxvYmplY3RDbG9uZTpYZixvbWl0OnJsLG9wdGlvbmFsS2V5czplbCxvd246amUscGFyc2VkVHlwZTpkbCxwYXJ0aWFsOnlzLHBpY2s6b2wscHJlZml4SXNzdWVzOmtlLHByaW1pdGl2ZVR5cGVzOlh1LHByb21pc2VBbGxPYmplY3Q6b20scHJvcGVydHlLZXlUeXBlczpUbyxyYW5kb21TdHJpbmc6cm0scmF3U2hhcGU6TG8scmVxdWlyZWQ6dWwsc2FmZUV4dGVuZDphbCxzaGFsbG93Q2xvbmU6VW8sc2x1Z2lmeTpRdSxzdHJpbmdpZnlQcmltaXRpdmU6TnMsdG9ab2Q6RG8sdWludDhBcnJheVRvQmFzZTY0OmhsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpkbSx1aW50OEFycmF5VG9IZXg6aG0sdW53cmFwTWVzc2FnZTpsdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgdHU7Y29uc3QgcXM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLGRzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IG51PSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIHZtKGUpe2NvbnN0IHQ9bnU7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBudT1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7ZHMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixkcyl9ZmluYWxseXtkcy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxpKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBOPXc7Zm9yKDtOJiZOIT09JDspTj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoTik7Y29uc3QgST1OPz93O2kuaGFzKEkpfHwoaS5hZGQoSSksZmwoSSxhKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBifHwoYlt3XT1fW3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P3ZtKGQpOnRoaXM7dSh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBEcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIEJlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIEtvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fSh0dT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/Pyh0dS5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIHRlKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIHltKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZix6bywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIF9tKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3Qga209e2dldDp5bSxzZXQ6X20sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHBzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sb3U9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksYmw9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIscHMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixwcykscHMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixrbSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7b3UuaGFzKG4pfHwob3UuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LHZsPXAoIiRab2RFcnJvciIsYmwpLHllPXAoIiRab2RFcnJvciIsYmwsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiB3bShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIFdvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/d20obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIEdvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IHU9bixsPTA7Zm9yKDtsPGkubGVuZ3RoOyl7Y29uc3QgZD1pW2xdLG09bD09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmdS5fZXJyb3JzLnB1c2godChhKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPXVbZF07bSYmYi5fZXJyb3JzLnB1c2godChhKSksdT1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBMcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAodT0+byh7aXNzdWVzOnV9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCB1PVsuLi5zLC4uLmkucGF0aF07aWYodS5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDx1Lmxlbmd0aDspe2NvbnN0IG09dVtkXSxiPWQ9PT11Lmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGE9bC5pdGVtcylbbV0/PyhhW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24geWwoZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIFVzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke3lsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIFFvKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgZG49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBCZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHU9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKGw9PlNlKGwsYSx0ZSgpKSkpO3Rocm93IFpzKHUscz8uY2FsbGVlPz90KSx1fXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0sa3M9ZG4oeWUpLHBuPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCB1PW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcChsPT5TZShsLGEsdGUoKSkpKTt0aHJvdyBacyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LHdzPXBuKHllKSxobj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBCZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP2tsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sX2w9aG4oeWUpO2Z1bmN0aW9uIGtsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+U2UocixuLHRlKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBmbj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP2tsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sJG09Zm4oeWUpLFNtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSx6bT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLFlvPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09U20pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBUbShlLHQsbil9KTtmdW5jdGlvbiBUbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1t6bV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBCZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBYbz1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LEZzPWU9Pntjb25zdCB0PWRuKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLFFvKG4sYSkpfTtyZXR1cm4gbn0sSW09RnMoeWUpLEJzPWU9Pntjb25zdCB0PWRuKGUpLG49KG8scixzLGEpPT50KG8scixzLFFvKG4sYSkpO3JldHVybiBufSxQbT1Ccyh5ZSksSHM9ZT0+e2NvbnN0IHQ9cG4oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxRbyhuLGEpKX07cmV0dXJuIG59LHhtPUhzKHllKSxWcz1lPT57Y29uc3QgdD1wbihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLFFvKG4sYSkpO3JldHVybiBufSxDbT1Wcyh5ZSksSnM9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gaG4oZSkodCxuLHIpfSxFbT1Kcyh5ZSksS3M9ZT0+KHQsbixvKT0+aG4oZSkodCxuLG8pLEFtPUtzKHllKSxXcz1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGZuKGUpKHQsbixyKX0sT209V3MoeWUpLEdzPWU9PmFzeW5jKHQsbixvKT0+Zm4oZSkodCxuLG8pLFJtPUdzKHllKSx3bD0vXltjQ11bMC05YS16XXs2LH0kLywkbD0vXlswLTlhLXpdKyQvLFNsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLHpsPS9eWzAtOWEtdkEtVl17MjB9JC8sVGw9L15bQS1aYS16MC05XXsyN30kLyxJbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gUGwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IHhsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLFptPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sQ2w9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLGd0PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyxObT1ndCg0KSxqbT1ndCg2KSxNbT1ndCg3KSxFbD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxxbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxEbT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxBbD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxMbT1BbCxVbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxGbT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIE9sKCl7cmV0dXJuIG5ldyBSZWdFeHAoRm0sInUiKX1jb25zdCBSbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sWmw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxObD1lPT57Y29uc3QgdD1OZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxqbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sTWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sQm09L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sSG09L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLHFsPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxEbD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sUXM9L15odHRwcz8kLyxMbD0vXlwrWzEtOV1cZHs2LDE0fSQvLFlzPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxVbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxYcz0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxGbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gVm0oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IEJsPVZtKEZsKTtmdW5jdGlvbiAkcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIEhsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHskcyhlKX0kYCl9ZnVuY3Rpb24gVmwoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAkeyRzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7JHMoe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7Rmx9VCg/OiR7b30pJGApfWNvbnN0IEpsPS9eW1xzXFNdezAsfSQvLEtsPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LFdsPS9eLT9cZCtuPyQvLEdsPS9eLT9cZCskLyxlcj0vXi0/XGQrKD86XC5cZCspPyQvLFFsPS9eKD86dHJ1ZXxmYWxzZSkkL2ksWWw9L15udWxsJC9pLFhsPS9edW5kZWZpbmVkJC9pLGVkPS9eW15BLVpdKiQvLHRkPS9eW15hLXpdKiQvLG5kPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gbW4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIGduKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBKbT0vXlswLTlhLWZBLUZdezMyfSQvLEttPW1uKDIyLCI9PSIpLFdtPWduKDIyKSxHbT0vXlswLTlhLWZBLUZdezQwfSQvLFFtPW1uKDI3LCI9IiksWW09Z24oMjcpLFhtPS9eWzAtOWEtZkEtRl17NjR9JC8sZWc9bW4oNDMsIj0iKSx0Zz1nbig0Myksbmc9L15bMC05YS1mQS1GXXs5Nn0kLyxvZz1tbig2NCwiIikscmc9Z24oNjQpLHNnPS9eWzAtOWEtZkEtRl17MTI4fSQvLGlnPW1uKDg2LCI9PSIpLGFnPWduKDg2KSx0cj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOkpsLGJhc2U2NDpCbSxiYXNlNjR1cmw6SG0sYmlnaW50OldsLGJvb2xlYW46UWwsYnJvd3NlckVtYWlsOlVtLGNpZHJ2NDpqbCxjaWRydjY6TWwsY3JlZGl0Q2FyZDpZcyxjdWlkOndsLGN1aWQyOiRsLGN1cnJlbmN5Q29kZTpVbCxkYXRlOkJsLGRhdGV0aW1lOlZsLGRvbWFpbjpEbCxkdXJhdGlvbjp4bCxlMTY0OkxsLGVtYWlsOkVsLGVtb2ppOk9sLGV4dGVuZGVkRHVyYXRpb246Wm0sZ3VpZDpDbCxoZXg6bmQsaG9zdG5hbWU6cWwsaHRtbDVFbWFpbDpxbSxodHRwUHJvdG9jb2w6UXMsaWJhbjpYcyxpZG5FbWFpbDpMbSxpbnRlZ2VyOkdsLGlwdjQ6UmwsaXB2NjpabCxrc3VpZDpUbCxsb3dlcmNhc2U6ZWQsbWFjOk5sLG1kNV9iYXNlNjQ6S20sbWQ1X2Jhc2U2NHVybDpXbSxtZDVfaGV4OkptLG5hbm9pZDpJbCxuYW5vaWRPZkxlbmd0aDpQbCxudWxsOllsLG51bWJlcjplcixyZmM1MzIyRW1haWw6RG0sc2hhMV9iYXNlNjQ6UW0sc2hhMV9iYXNlNjR1cmw6WW0sc2hhMV9oZXg6R20sc2hhMjU2X2Jhc2U2NDplZyxzaGEyNTZfYmFzZTY0dXJsOnRnLHNoYTI1Nl9oZXg6WG0sc2hhMzg0X2Jhc2U2NDpvZyxzaGEzODRfYmFzZTY0dXJsOnJnLHNoYTM4NF9oZXg6bmcsc2hhNTEyX2Jhc2U2NDppZyxzaGE1MTJfYmFzZTY0dXJsOmFnLHNoYTUxMl9oZXg6c2csc3RyaW5nOktsLHRpbWU6SGwsdWxpZDpTbCx1bmRlZmluZWQ6WGwsdW5pY29kZUVtYWlsOkFsLHVwcGVyY2FzZTp0ZCx1dWlkOmd0LHV1aWQ0Ok5tLHV1aWQ2OmptLHV1aWQ3Ok1tLHhpZDp6bH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxXPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxlaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFScyh0KSYmdC5zaXplIT09dm9pZCAwfSx0aT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFScyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LElvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LG5pPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49SW9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOklvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG9pPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49SW9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOklvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksb2Q9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6VnUobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxyZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Vy5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPXRsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHNkPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdFtuLG9dPW5sW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksaWQ9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWVpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkJvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGFkPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1laSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpCbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGNkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1laSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Qm8ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx1ZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj10aSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9IbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPVZvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGxkPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPXRpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9IbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPVZvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksZGQ9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1cuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49dGkpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP0hvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPVZvKHIpLHU9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi51P3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxibj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztXLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSxwZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pntibi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxoZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWVkKSxibi5pbml0KGUsdCl9KSxmZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXRkKSxibi5pbml0KGUsdCl9KSxtZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPU5lKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxnZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7TmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxiZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtOZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBQbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmtlKG4sZS5pc3N1ZXMpKX1jb25zdCB2ZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5QbyhyLG4sdC5wcm9wZXJ0eSkpO1BvKG8sbix0LnByb3BlcnR5KX19KSx5ZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e1cuaW5pdChlLHQpLEpvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTt1IGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaCh1LnRoZW4obD0+UG8obCxvLGEpKSkpOlBvKHUsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksX2Q9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Vy5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxrZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Vy5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3Mgd2R7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCAkZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LHg9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPSRkO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLHUsbCk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9ZmUoaSksbTtmb3IoY29uc3QgYiBvZiB1KXtpZihiLl96b2QuZGVmLndoZW4pe2lmKGxsKGkpfHwhYi5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgQmU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKF9zKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO19zKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+aSk6aX0sYT0oaSx1LGwpPT57aWYoZmUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyh1LHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgQmU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShpLHUpPT57aWYodS5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSx1KTtpZih1LmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLnUsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+YShtLGksdSkpOmEoZCxpLHUpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGksdSk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKHUuYXN5bmM9PT0hMSl0aHJvdyBuZXcgQmU7cmV0dXJuIGwudGhlbihkPT5zKGQscix1KSl9cmV0dXJuIHMobCxyLHUpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBKbyh0aGlzLCJ+c3RhbmRhcmQiLHJpKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7amUodGhpcywifnN0YW5kYXJkIixlKX19KSxTZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PlNlKG4sdCx0ZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBjZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gU2QoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIHJpKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gU2QobyxuKX1jYXRjaHt9cmV0dXJuIGNnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IHZuPXAoIiRab2RTdHJpbmciLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9KbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEI9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pntibi5pbml0KGUsdCksdm4uaW5pdChlLHQpfSksemQ9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUNsKSxCLmluaXQoZSx0KX0pLFRkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Z3QobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWd0KCkpO0IuaW5pdChlLHQpfSksSWQ9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1FbCksQi5pbml0KGUsdCl9KSxzaT0xLFh0PTI7ZnVuY3Rpb24gaWkoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBQZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP2lpKGUpfHxYdDp4ZChlLHQpfWZ1bmN0aW9uIHhkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1Rcy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gc2k7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/WHR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIFh0fX1jb25zdCB1Zz0vW1x0XG5ccl0vZztmdW5jdGlvbiBTcyhlKXtyZXR1cm4gZS5yZXBsYWNlKHVnLCIiKX1mdW5jdGlvbiBDZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBFZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBBZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0IuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1QZChvLHQpO2lmKHI9PT1zaSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1YdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9U3Mobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFDZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhRWQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6U3Mobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksT2Q9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1PbCgpKSxCLmluaXQoZSx0KX0pLFJkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9JbDpQbCh0Lmxlbmd0aCkpLEIuaW5pdChlLHQpfSksWmQ9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXdsKSxCLmluaXQoZSx0KX0pLE5kPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49JGwpLEIuaW5pdChlLHQpfSksamQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVNsKSxCLmluaXQoZSx0KX0pLE1kPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXpsKSxCLmluaXQoZSx0KX0pLHFkPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VGwpLEIuaW5pdChlLHQpfSksRGQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1WbCh0KSksQi5pbml0KGUsdCl9KSxMZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QmwpLEIuaW5pdChlLHQpfSksVWQ9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUhsKHQpKSxCLmluaXQoZSx0KX0pLEZkPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eGwpLEIuaW5pdChlLHQpfSksQmQ9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVJsKSxCLmluaXQoZSx0KX0pLGxnPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBhaShlKXtyZXR1cm4gbGcudGVzdChlKT9paShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IEhkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1abCksQi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PnthaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxWZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ObCh0LmRlbGltaXRlcikpLEIuaW5pdChlLHQpfSksSmQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49amwpLEIuaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2QoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOmFpKG4pfWNvbnN0IFdkPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU1sKSxCLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0tkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gY2koZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBHZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sUWQ9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49R2QpLEIuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y2kobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx1aT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gWWQoZSl7aWYoIXVpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gY2kobil9Y29uc3QgWGQ9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dWkpLEIuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57WWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxlcD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TGwpLEIuaW5pdChlLHQpfSksZGc9L1stIF0vZztmdW5jdGlvbiBwZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiB0cChlKXtyZXR1cm4gWXMudGVzdChlKT9wZyhlLnJlcGxhY2UoZGcsIiIpKTohMX1jb25zdCBucD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49WXMpLEIuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHAobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGhnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIG9wKGUpe3JldHVybiBYcy50ZXN0KGUpP2hnKGUpOiExfWNvbnN0IHJwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1YcyksQi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntvcChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBzcChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IGlwPXAoIiRab2RKV1QiLChlLHQpPT57Qi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntzcChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGFwPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57Qi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbGk9cCgiJFpvZE51bWJlciIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1lcixlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxjcD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3JkLmluaXQoZSx0KSxsaS5pbml0KGUsdCl9KSxkaT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1RbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHBpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49V2wsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSx1cD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e3NkLmluaXQoZSx0KSxwaS5pbml0KGUsdCl9KSxscD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxkcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVhsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHBwPXAoIiRab2ROdWxsIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVlsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxocD1wKCIkWm9kQW55IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksZnA9cCgiJFpvZFVua25vd24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxtcD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxncD1wKCIkWm9kVm9pZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGJwPXAoIiRab2REYXRlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gcnUoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5rZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IHZwPXAoIiRab2RBcnJheSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCB1PTA7dTxzLmxlbmd0aDt1Kyspe2NvbnN0IGw9c1t1XSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4obT0+cnUobSxvLHUpKSk7ZWxzZSBpZihydShkLG8sdSksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmZmUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24geG8oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLmtlKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgZmc9W107ZnVuY3Rpb24geXAoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOmZnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1lbChlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIF9wKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sdT1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihmZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKHUuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IHc9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTt3IGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2gody50aGVuKCQ9PnhvKCQsbixfLHQsbSxiKSkpOnhvKHcsbixfLHQsbSxiKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IGtwPXAoIiRab2RPYmplY3QiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9dW4oKCk9PnlwKHQpKTtPKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHxpdChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPWZ0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCB1PWRlLm1lbW9pemVyO3U/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9dT91LmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IHc9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGkuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoZmUobCx3KSlicmVhazt3PWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTj12WyRdLEk9Ti5fem9kLm9wdGluLEc9Ti5fem9kLm9wdG91dCxvZT1OLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChvZS50aGVuKEo9PnhvKEosbCwkLG0sSSxHKSkpOnhvKG9lLGwsJCxtLEksRyl9cmV0dXJuIGE/X3AoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLHdwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57a3AuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89dW4oKCk9PnlwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSx3PV8uc3ltYm9sS2V5cywkPW5ldyB3ZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6d30pLE49Sj0+YHNoYXBlWyR7Sn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Sn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLEk9KEosSCk9PmAKICAgICAgICAgIGxldCAke0p9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Sn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Sn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7SH0sIC4uLmlzcy5wYXRoXSA6IFske0h9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0p9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0p9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBHPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKUdbSl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKXtpZihKPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgSD1HW0pdLGdlPXR5cGVvZiBKPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihKKX1dYDpHdShKKSxrPWAke2dlfSBpbiBpbnB1dGAsej12W0pdLEs9ej8uX3pvZD8ub3B0aW4scmU9SyE9PXZvaWQgMCxPZT16Py5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7SH0gPSAke04oZ2UpfTtgKSxyZSYmT2Upe2NvbnN0IHV0PUs9PT0ib3B0aW9uYWwiP2Ake0h9X3ByZXNlbnRgOmAke0h9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtIfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0h9X3ByZXNlbnQgPSAke2t9OwogICAgICAgIGlmICghJHtIfS5pc3N1ZXMubGVuZ3RoIHx8ICR7SH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7SShILGdlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHt1dH0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSByZT8oJC53cml0ZShgCiAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7SShILGdlKX0KICAgICAgICB9CiAgICAgIGApLEs9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHtnZX1dID0gJHtIfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtIfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7a30pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOiQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7SH1fcHJlc2VudCA9ICR7a307CiAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7SShILGdlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0h9X3ByZXNlbnQgJiYgISR7SH0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7Z2V9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7SH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuICQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksJC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksJC5jb21waWxlKCl9O2xldCBhO2NvbnN0IGk9ZnQsdT0hZGUuaml0bGVzcyxkPXUmJll1LnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgYjtlLl96b2QucGFyc2U9KHYsXyk9PntiPz8oYj1vLnZhbHVlKTtjb25zdCB3PXYudmFsdWU7cmV0dXJuIGkodyk/dSYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGF8fChhPXModC5zaGFwZSkpLHY9YSh2LF8pLG0/X3AoW10sdyx2LF8sYixlLF8/LmFib3J0RWFybHk9PT0hMCk6dik6bih2LF8pOih2Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OncsaW5zdDplfSksdil9fSk7ZnVuY3Rpb24gc3UoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFmZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGE9PlNlKGEsbyx0ZSgpKSkpfSksdCl9Y29uc3QgbnI9cCgiJFpvZFVuaW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIik/ImRlZmF1bHRlZCI6by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbiE9PXZvaWQgMCk/Im9wdGlvbmFsIjp2b2lkIDApLE8oZSwib3B0b3V0IixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpPyJvcHRpb25hbCI6dm9pZCAwKSxPKGUsInZhbHVlcyIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnZhbHVlcykpcmV0dXJuIG5ldyBTZXQoby5kZWYub3B0aW9ucy5mbGF0TWFwKHI9PkFycmF5LmZyb20oci5fem9kLnZhbHVlcykpKX0pLE8oZSwicGF0dGVybiIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnBhdHRlcm4pKXtjb25zdCByPW8uZGVmLm9wdGlvbnMubWFwKHM9PnMuX3pvZC5wYXR0ZXJuKTtyZXR1cm4gbmV3IFJlZ0V4cChgXigke3IubWFwKHM9PkZlKHMuc291cmNlKSkuam9pbigifCIpfSkkYCl9fSk7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgaSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaCh1KSxzPSEwO2Vsc2V7aWYodS5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdTthLnB1c2godSl9fXJldHVybiBzP1Byb21pc2UuYWxsKGEpLnRoZW4oaT0+c3UoaSxvLGUscikpOnN1KGEsbyxlLHIpfX0pO2Z1bmN0aW9uIGl1KGUsdCxuLG8pe2NvbnN0IHI9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspZVtzXS5pc3N1ZXMubGVuZ3RoPT09MCYmci5wdXNoKHMpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9ZVtyWzBdXS52YWx1ZSx0KTooci5sZW5ndGg9PT0wP3QuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoYT0+U2UoYSxvLHRlKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0ICRwPXAoIiRab2RYb3IiLChlLHQpPT57bnIuaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgdC5vcHRpb25zKXtjb25zdCB1PWkuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTt1IGluc3RhbmNlb2YgUHJvbWlzZT8oYS5wdXNoKHUpLHM9ITApOmEucHVzaCh1KX1yZXR1cm4gcz9Qcm9taXNlLmFsbChhKS50aGVuKGk9Pml1KGksbyxlLHIpKTppdShhLG8sZSxyKX19KTtmdW5jdGlvbiBoaShlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89U3Aobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gU3AoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCB6cD1wKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLG5yLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTtPKGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBhPTA7Zm9yKGNvbnN0IGkgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgdT1pLl96b2QucHJvcFZhbHVlcztpZighdXx8T2JqZWN0LmtleXModSkubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGkpfSJgKTt1W3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmYSsrO2Zvcihjb25zdFtsLGRdb2YgT2JqZWN0LmVudHJpZXModSkpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGwpfHxpdChzLGwsbmV3IFNldCk7Zm9yKGNvbnN0IG0gb2YgZClzW2xdLmFkZChtKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmE+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgYT1MbyhyLl96b2QuZGVmKTtpZihhJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPXVuKCgpPT5TcCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO2lmKCFmdChhKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDphLGluc3Q6ZX0pLHI7Y29uc3QgaT1hPy5bdC5kaXNjcmltaW5hdG9yXSx1PW8udmFsdWUuZ2V0KGkpO3JldHVybiB1JiYoaSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT91Ll96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIobD0+by52YWx1ZS5nZXQobCkhPT1udWxsKSxpbnB1dDphLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksVHA9cCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxhPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGEgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGFdKS50aGVuKChbdSxsXSk9PmF1KG4sdSxsKSk6YXUobixzLGEpfX0pO2Z1bmN0aW9uIENvKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoSGUoZSkmJkhlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBhPUNvKGVbc10sdFtzXSk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWEuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxhPUNvKHIscyk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goYS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uIGF1KGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGE9KGwsZCk9PntsZXQgbTtpZihsLmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhbC5wYXRoPy5sZW5ndGgpcj8/KHI9bCksbT1sLmtleXM7ZWxzZSBpZihsLmNvZGU9PT0iaW52YWxpZF9rZXkiJiZsLm9yaWdpbj09PSJyZWNvcmQiJiZsLnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGI9U3RyaW5nKGwucGF0aFswXSk7cy5oYXMoYil8fHMuc2V0KGIsbCksbT1bYl19ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgYiBvZiBtKW8uaGFzKGIpfHxvLnNldChiLHt9KSxvLmdldChiKVtkXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IGwgb2YgdC5pc3N1ZXMpYShsLCJsIil8fGUuaXNzdWVzLnB1c2gobCk7Zm9yKGNvbnN0IGwgb2Ygbi5pc3N1ZXMpYShsLCJyIil8fGUuaXNzdWVzLnB1c2gobCk7Y29uc3QgaT1bLi4ub10uZmlsdGVyKChbLGxdKT0+bC5sJiZsLnIpLm1hcCgoW2xdKT0+bCk7aWYoaS5sZW5ndGgpe2NvbnN0IGw9cj9pLmZpbHRlcihkPT5yLmtleXMuaW5jbHVkZXMoZCkpOltdO2wubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6bH0pO2Zvcihjb25zdCBkIG9mIGkpIWwuaW5jbHVkZXMoZCkmJnMuaGFzKGQpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGQpKX1jb25zdCB1PUNvKHQudmFsdWUsbi52YWx1ZSk7aWYoIXUudmFsaWQpe2lmKGZlKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkodS5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9dS5kYXRhLGV9Y29uc3QgZmk9cCgiJFpvZFR1cGxlIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPWRlLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBhPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmEsaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGk9W10sdT1jdShuLCJvcHRpbiIpLGw9Y3Uobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoYS5sZW5ndGg8dSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnUsaW5jbHVzaXZlOiEwLGlucHV0OmEsaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjthLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6YSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBkPW5ldyBBcnJheShuLmxlbmd0aCksbT10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGI9ITE7Zm9yKGxldCB2PTA7djxuLmxlbmd0aDt2Kyspe2NvbnN0IF89blt2XS5fem9kLnJ1bih7dmFsdWU6YVt2XSxpc3N1ZXM6W119LHMpO18gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChfLnRoZW4odz0+e2Rbdl09d30pKTooZFt2XT1fLG0mJiFiJiZfLmlzc3Vlcy5sZW5ndGgmJihiPWZlKF8pKSl9aWYodC5yZXN0JiYhYil7bGV0IHY9bi5sZW5ndGgtMTtjb25zdCBfPWEuc2xpY2Uobi5sZW5ndGgpO2xldCB3PXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBfKXtpZihtJiZyLmlzc3Vlcy5sZW5ndGghPT13KXtpZihmZShyLHcpKWJyZWFrO3c9ci5pc3N1ZXMubGVuZ3RofXYrKztjb25zdCBOPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO04gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChOLnRoZW4oST0+dXUoSSxyLHYpKSk6dXUoTixyLHYpfX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+bHUoZCxyLG4sYSxsKSk6bHUoZCxyLG4sYSxsKX19KTtmdW5jdGlvbiBjdShlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIHV1KGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ua2UobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBsdShlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBhPWVbc10saT1zPG8ubGVuZ3RoO2lmKCFpJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGEuaXNzdWVzLmxlbmd0aCl7aWYoIWkmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi5rZShzLGEuaXNzdWVzKSl9dC52YWx1ZVtzXT1hLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IElwPXAoIiRab2RSZWNvcmQiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFIZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgYT1bXSxpPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihpJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgdT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGkpaWYodHlwZW9mIGQ9PSJzdHJpbmcifHx0eXBlb2YgZD09Im51bWJlciJ8fHR5cGVvZiBkPT0ic3ltYm9sIil7aWYodS5hZGQodHlwZW9mIGQ9PSJudW1iZXIiP2QudG9TdHJpbmcoKTpkKSxkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgbT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTtpZihtIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihtLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOm0uaXNzdWVzLm1hcChfPT5TZShfLHIsdGUoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1tLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmtlKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5rZShkLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1sZXQgbDtmb3IoY29uc3QgZCBpbiBzKWlmKCF1LmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgbD1sPz9bXSxsLnB1c2goZCk7bCYmbC5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6bCxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCB1O2Zvcihjb25zdCBsIG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYobD09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsbCkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIGw9PSJzdHJpbmciJiZlci50ZXN0KGwpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIobCksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVtsXT1zW2xdOmk/KHU9dT8/W10sdS5wdXNoKGwpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+U2UoXyxyLHRlKCkpKSxpbnB1dDpsLHBhdGg6W2xdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9ZC52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tsXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh2LnRoZW4oXz0+e18uaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5rZShsLF8uaXNzdWVzKSksby52YWx1ZVtiXT1fLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ua2UobCx2Lmlzc3VlcykpLG8udmFsdWVbYl09di52YWx1ZSl9dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5vKTpvfX0pLFBwPXAoIiRab2RNYXAiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJtYXAiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGE9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBNYXAscik6bmV3IE1hcDtjb25zdCBpPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdFtsLGRdb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpLGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTttIGluc3RhbmNlb2YgUHJvbWlzZXx8YiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFByb21pc2UuYWxsKFttLGJdKS50aGVuKChbdixfXSk9PntkdSh2LF8sbyxsLHMsZSxyKX0pKTpkdShtLGIsbyxsLHMsZSxyKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBkdShlLHQsbixvLHIscyxhKXtlLmlzc3Vlcy5sZW5ndGgmJihUby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ua2UobyxlLmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46Im1hcCIsaW5wdXQ6cixpbnN0OnMsaXNzdWVzOmUuaXNzdWVzLm1hcChpPT5TZShpLGEsdGUoKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFRvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5rZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChpPT5TZShpLGEsdGUoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgeHA9cCgiJFpvZFNldCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgYT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGk9cj8uYWJvcnRFYXJseTtsZXQgdT1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IGwgb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKGQudGhlbihtPT5wdShtLG8pKSk6cHUoZCxvKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBwdShlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgQ3A9cCgiJFpvZEVudW0iLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1icyh0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sTyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1icyhyLmRlZi5lbnRyaWVzKS5maWx0ZXIoYT0+VG8uaGFzKHR5cGVvZiBhKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChhPT5OZShhLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO3JldHVybiBvLmhhcyhhKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6YSxpbnN0OmV9KSxyfX0pLEVwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLE8oZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP05lKHMpOnM/TmUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLEFwPXAoIiRab2RGaWxlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxPcD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLGRlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IEtvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGE9PihuLnZhbHVlPWEsbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBCZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gaHUoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBtaT1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsTyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLE8oZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7RmUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5odShuLHMpKTpodShuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLFJwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e21pLmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLFpwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtGZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksTnA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+ZnUocyx0KSk6ZnUocix0KX19KTtmdW5jdGlvbiBmdShlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBqcD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksTXA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5tdShzLGUpKTptdShyLGUpfX0pO2Z1bmN0aW9uIG11KGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBxcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IEtvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBndShlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PlNlKHIsbyx0ZSgpKSl9LGlucHV0OmUudmFsdWV9KSxlKTooZS52YWx1ZT10LnZhbHVlLHQubWVtbyYmKGUubWVtbz0hMCksZSl9Y29uc3QgRHA9cCgiJFpvZENhdGNoIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pmd1KG4scyx0LG8pKTpndShuLHIsdCxvKX19KSxMcD1wKCIkWm9kTmFOIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KCh0eXBlb2Ygbi52YWx1ZSE9Im51bWJlciJ8fCFOdW1iZXIuaXNOYU4obi52YWx1ZSkpJiZuLmlzc3Vlcy5wdXNoKHtpbnB1dDpuLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoibmFuIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbil9KSxnaT1wKCIkWm9kUGlwZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLE8oZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLE8oZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PmZvKGEsdC5pbixvKSk6Zm8ocyx0LmluLG8pfWNvbnN0IHI9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+Zm8ocyx0Lm91dCxvKSk6Zm8ocix0Lm91dCxvKX19KTtmdW5jdGlvbiBmbyhlLHQsbil7cmV0dXJuIGUuaXNzdWVzLnNvbWUobz0+by5jb2RlIT09InVucmVjb2duaXplZF9rZXlzIik/KGUuYWJvcnRlZD0hMCxlKTp0Ll96b2QucnVuKHt2YWx1ZTplLnZhbHVlLGlzc3VlczplLmlzc3Vlc30sbil9Y29uc3QgYmk9cCgiJFpvZENvZGVjIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKChvLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcz10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT5tbyhhLHQsbykpOm1vKHMsdCxvKX1lbHNle2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9Pm1vKGEsdCxvKSk6bW8ocyx0LG8pfX19KTtmdW5jdGlvbiBtbyhlLHQsbil7aWYoZS5pc3N1ZXMubGVuZ3RoKXJldHVybiBlLmFib3J0ZWQ9ITAsZTtpZigobi5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHI9dC50cmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmdvKGUscyx0Lm91dCxuKSk6Z28oZSxyLHQub3V0LG4pfWVsc2V7Y29uc3Qgcj10LnJldmVyc2VUcmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmdvKGUscyx0LmluLG4pKTpnbyhlLHIsdC5pbixuKX19ZnVuY3Rpb24gZ28oZSx0LG4sbyl7cmV0dXJuIGUuaXNzdWVzLmxlbmd0aD8oZS5hYm9ydGVkPSEwLGUpOm4uX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOmUuaXNzdWVzfSxvKX1jb25zdCBVcD1wKCIkWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntnaS5pbml0KGUsdCl9KSxGcD1wKCIkWm9kUmVhZG9ubHkiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKSxPKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihidSk6YnUocil9fSk7ZnVuY3Rpb24gYnUoZSl7cmV0dXJuIGUubWVtb3x8KGUudmFsdWU9T2JqZWN0LmZyZWV6ZShlLnZhbHVlKSksZX1mdW5jdGlvbiBtZyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7bGV0IG49dC5wYXR0ZXJuLG89ISF0LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLHIscztmb3IoY29uc3QgaSBvZiB0LmNoZWNrcz8/W10pe2NvbnN0IHU9aS5fem9kLmRlZjt1LnBhdHRlcm4mJihuPXUucGF0dGVybiksb3x8KG89ISF1LmZvcm1hdD8uaW5jbHVkZXMoImludCIpKTtjb25zdCBsPXUubWluaW11bT8/dS5sZW5ndGgsZD11Lm1heGltdW0/P3UubGVuZ3RoO2whPT12b2lkIDAmJihyPT09dm9pZCAwfHxsPnIpJiYocj1sKSxkIT09dm9pZCAwJiYocz09PXZvaWQgMHx8ZDxzKSYmKHM9ZCl9aWYobilyZXR1cm4gbi5zb3VyY2U7aWYociE9PXZvaWQgMCYmcyE9PXZvaWQgMCYmcj5zKXJldHVybiIoPyEpIjtpZihyIT09dm9pZCAwfHxzIT09dm9pZCAwKXJldHVybiBLbCh7bWluaW11bTpyLG1heGltdW06c30pLnNvdXJjZTtjb25zdCBhPWUuX3pvZC5wYXR0ZXJuO3JldHVybihvJiZhPT09ZXI/R2w6YSk/LnNvdXJjZX1mdW5jdGlvbiB6cyhlKXtjb25zdCB0PWUuX3pvZC5kZWYsbj1lLl96b2QucGF0dGVybj8uc291cmNlLG89dC5pbm5lclR5cGU/P2UuX3pvZC5pbm5lclR5cGU7aWYobyl7Y29uc3Qgcj1vLl96b2QucGF0dGVybj8uc291cmNlLHM9enMobyk7cmV0dXJuIG4mJnImJnMmJnMhPT1yP24ucmVwbGFjZShGZShyKSwoKT0+RmUocykpOm59aWYodC5vcHRpb25zKXtjb25zdCByPXQub3B0aW9ucy5tYXAoenMpO2lmKHIuZXZlcnkoQm9vbGVhbikpcmV0dXJuYF4oJHtyLm1hcChzPT5GZShzKSkuam9pbigifCIpfSkkYH1yZXR1cm4gbWcoZSl9Y29uc3QgQnA9cCgiJFpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQucGFydHMpaWYodHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCl7Y29uc3Qgcj16cyhvKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5vLl96b2QudHJhaXRzXS5zaGlmdCgpfWApO24ucHVzaChGZShyKSl9ZWxzZSBpZihvPT09bnVsbHx8WHUuaGFzKHR5cGVvZiBvKSluLnB1c2goTmUoYCR7b31gKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke299YCk7ZS5fem9kLnBhdHRlcm49bmV3IFJlZ0V4cChgXiR7bi5qb2luKCIiKX0kYCksZS5fem9kLnBhcnNlPShvLHIpPT50eXBlb2Ygby52YWx1ZSE9InN0cmluZyI/KG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvKTooZS5fem9kLnBhdHRlcm4ubGFzdEluZGV4PTAsZS5fem9kLnBhdHRlcm4udGVzdChvLnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdD8/InRlbXBsYXRlX2xpdGVyYWwiLHBhdHRlcm46ZS5fem9kLnBhdHRlcm4uc291cmNlfSksbyl9KSxIcD1wKCIkWm9kRnVuY3Rpb24iLChlLHQpPT4oeC5pbml0KGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9kZWYiLHt2YWx1ZTp0fSksZS5fem9kLmRlZj10LGUuaW1wbGVtZW50PW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/a3MoZS5fZGVmLmlucHV0LG8pOm8scz1SZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9rcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5pbXBsZW1lbnRBc3luYz1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmMgZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/YXdhaXQgd3MoZS5fZGVmLmlucHV0LG8pOm8scz1hd2FpdCBSZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9hd2FpdCB3cyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5fem9kLnBhcnNlPShuLG8pPT50eXBlb2Ygbi52YWx1ZSE9ImZ1bmN0aW9uIj8obi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoiZnVuY3Rpb24iLGlucHV0Om4udmFsdWUsaW5zdDplfSksbik6KGUuX2RlZi5vdXRwdXQmJmUuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZT09PSJwcm9taXNlIj9uLnZhbHVlPWUuaW1wbGVtZW50QXN5bmMobi52YWx1ZSk6bi52YWx1ZT1lLmltcGxlbWVudChuLnZhbHVlKSxuKSxlLmlucHV0PSguLi5uKT0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuWzBdKT9uZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5ldyBmaSh7dHlwZToidHVwbGUiLGl0ZW1zOm5bMF0scmVzdDpuWzFdfSksb3V0cHV0OmUuX2RlZi5vdXRwdXR9KTpuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5bMF0sb3V0cHV0OmUuX2RlZi5vdXRwdXR9KX0sZS5vdXRwdXQ9bj0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDplLl9kZWYuaW5wdXQsb3V0cHV0Om59KX0sZSkpLFZwPXAoIiRab2RQcm9taXNlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUpLnRoZW4ocj0+dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSl9KSx2aT1wKCIkWm9kTGF6eSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxKdShlLl96b2QsImlubmVyVHlwZSIsKCk9Pntjb25zdCBuPXQ7cmV0dXJuIG4uX2NhY2hlZElubmVyfHwobi5fY2FjaGVkSW5uZXI9dC5nZXR0ZXIoKSksbi5fY2FjaGVkSW5uZXJ9KSxPKGUsInBhdHRlcm4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKSxPKGUsInByb3BWYWx1ZXMiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4/P3ZvaWQgMCksTyhlLCJvcHRvdXQiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQ/P3ZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5lLl96b2QuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxKcD1wKCIkWm9kQ3VzdG9tIiwoZSx0KT0+e1cuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+bixlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89bi52YWx1ZSxyPXQuZm4obyk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHIudGhlbihzPT52dShzLG4sbyxlKSk7dnUocixuLG8sZSl9fSk7ZnVuY3Rpb24gdnUoZSx0LG4sbyl7aWYoIWUpe2NvbnN0IHI9e2NvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om8scGF0aDpbLi4uby5fem9kLmRlZi5wYXRoPz9bXV0sY29udGludWU6IW8uX3pvZC5kZWYuYWJvcnR9O28uX3pvZC5kZWYucGFyYW1zJiYoci5wYXJhbXM9by5fem9kLmRlZi5wYXJhbXMpLHQuaXNzdWVzLnB1c2gobXQocikpfX1jbGFzcyBLcCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwYXJzZSBhIHJlZmVyZW5jZSBjeWNsZSB0aGF0IGNsb3NlcyB0aHJvdWdoIGEgdHJhbnNmb3JtIiksdGhpcy5uYW1lPSJab2RDeWNsaWNFcnJvciJ9fWNvbnN0IFRzPSJ+bWVtbyIseXU9W107ZnVuY3Rpb24gV3AoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCJ9ZnVuY3Rpb24gaHMoZSl7cmV0dXJuIGUubWFwKHQ9PnQucGF0aD97Li4udCxwYXRoOnQucGF0aC5zbGljZSgpfTp7Li4udH0pfWNvbnN0IEdwPW5ldyBXZWFrTWFwLGR0PTAsa289MSxWdD0yO2Z1bmN0aW9uIEp0KGUsdCxuKXtjb25zdCBvPUdwLmdldChlKTtpZihvIT09dm9pZCAwKXJldHVybiBvP1Z0OmR0O2lmKHQuaGFzKGUpKXJldHVybiBWdDt0LmFkZChlKTtsZXQgcj1kdDtjb25zdCBzPWQ9PntpZihyIT09VnQmJmQ/Ll96b2Qpe2NvbnN0IG09SnQoZCx0LG4pO20+ciYmKHI9bSl9fSxhPShkLG0pPT57bGV0IGI9ZHQ7Zm9yKGNvbnN0IHYgb2YgUmVmbGVjdC5vd25LZXlzKGQpKXtjb25zdCBfPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx2KTtpZighXy5lbnVtZXJhYmxlKWNvbnRpbnVlO2NvbnN0IHc9Xy5nZXQ/a286Xy52YWx1ZT8uX3pvZD9KdChfLnZhbHVlLHQsbik6ZHQ7dz5iJiYoYj13KX1yZXR1cm4gYn0saT1kPT57ZD5yJiYocj1kKX0sdT1lLl96b2QuZGVmO3N3aXRjaCh1LnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgZD1Mbyh1KTtpKGQ/YShkKTprbykscyh1LmNhdGNoYWxsKTticmVha31jYXNlImFycmF5IjpzKHUuZWxlbWVudCk7YnJlYWs7Y2FzZSJ0dXBsZSI6Zm9yKGNvbnN0IGQgb2YgdS5pdGVtcylzKGQpO3ModS5yZXN0KTticmVhaztjYXNlInJlY29yZCI6Y2FzZSJtYXAiOnModS5rZXlUeXBlKSxzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInNldCI6cyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJ1bmlvbiI6Zm9yKGNvbnN0IGQgb2YgdS5vcHRpb25zKXMoZCk7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOnModS5sZWZ0KSxzKHUucmlnaHQpO2JyZWFrO2Nhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOnModS5pbm5lclR5cGUpO2JyZWFrO2Nhc2UicGlwZSI6cyh1LmluKSxzKHUub3V0KTticmVhaztjYXNlImZ1bmN0aW9uIjpzKHUuaW5wdXQpLHModS5vdXRwdXQpO2JyZWFrO2Nhc2UibGF6eSI6e2NvbnN0IGQ9dS5fY2FjaGVkSW5uZXI/PyhuP2UuX3pvZC5pbm5lclR5cGU6dm9pZCAwKTtpKGQ/SnQoZCx0LCExKTprbyk7YnJlYWt9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6Zm9yKGNvbnN0IGQgaW4gdSl7Y29uc3QgbT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsZCk7aWYoIW18fG0uZ2V0KWNvbnRpbnVlO2NvbnN0IGI9bS52YWx1ZTtpZighKCFifHx0eXBlb2YgYiE9Im9iamVjdCIpKXtpZihiLl96b2QpcyhiKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYikpZm9yKGNvbnN0IHYgb2YgYilzKHYpfX19cmV0dXJuIHQuZGVsZXRlKGUpLGdnKGUscil9ZnVuY3Rpb24gZ2coZSx0KXtyZXR1cm4gdCE9PWtvJiZHcC5zZXQoZSx0PT09VnQpLHR9ZnVuY3Rpb24gYmcoZSl7cmV0dXJuIEp0KGUsbmV3IFNldCwhMCkhPT1kdH1mdW5jdGlvbiB2ZyhlLHQpe2xldCBuPWUuYnVja2V0cy5nZXQodCk7cmV0dXJuIG58fChuPW5ldyBXZWFrTWFwLGUuYnVja2V0cy5zZXQodCxuKSksbn1sZXQgYm87Y29uc3Qgdm89W10seWc9e2FsbG9jKGUsdCxuKXtjb25zdCBvPWJvO2lmKCFvKXJldHVybiBuO2JvPXZvaWQgMDtjb25zdCByPXt2YWx1ZTpuLGlzc3VlczpudWxsfTtyZXR1cm4gby5zZXQodC52YWx1ZSxyKSx2by5wdXNoKHIpLG59LGd1YXJkKGUpe3ZhciB0Oyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IG49ZS5fem9kLnBhcnNlLG89KHIscyk9PntpZihzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCImJlFwKHMsci52YWx1ZSkpdGhyb3cgbmV3IEtwO3JldHVybiBuKHIscyl9O2UuX3pvZC5wYXJzZT1vLGUuX3pvZC5ydW49PT1uJiYoZS5fem9kLnJ1bj1vKX0pfSxhdHRhY2goZSl7dmFyIHQ7bGV0IG4sbz0hMSxyLHM7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3QgYT1lLl96b2QucGFyc2UsaT0odSxsKT0+e2lmKG49PT12b2lkIDApe2NvbnN0IE49SnQoZSxuZXcgU2V0LCExKTtpZihOPT09ZHQpcmV0dXJuIGUuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKSxhKHUsbCk7Tj09PVZ0fHxvP249ITA6bz0hMH1jb25zdCBkPXUudmFsdWU7aWYoIVdwKGQpKXJldHVybiBhKHUsbCk7bGV0IG09bFtUc107bXx8KG09e2J1Y2tldHM6bmV3IFdlYWtNYXAsYmFja0VkZ2VzOnZvaWQgMH0sbFtUc109bSk7bGV0IGI7cj09PWw/Yj1zOihiPXZnKG0sZSkscj1sLHM9Yik7Y29uc3Qgdj1iLmdldChkKTtpZih2KXJldHVybiB1LnZhbHVlPXYudmFsdWUsdi5pc3N1ZXM/di5pc3N1ZXMubGVuZ3RoJiZ1Lmlzc3Vlcy5wdXNoKC4uLmhzKHYuaXNzdWVzKSk6KHUubWVtbz0hMCxtLmJhY2tFZGdlcz8/KG0uYmFja0VkZ2VzPW5ldyBXZWFrU2V0KSxtLmJhY2tFZGdlcy5hZGQodi52YWx1ZSkpLHU7Ym89Yjtjb25zdCBfPXZvLmxlbmd0aCx3PWEodSxsKTtibz12b2lkIDA7Y29uc3QgJD12by5sZW5ndGg+Xz92by5wb3AoKTp2b2lkIDA7cmV0dXJuIHcgaW5zdGFuY2VvZiBQcm9taXNlP3cudGhlbihOPT4oJCYmKCQuaXNzdWVzPU4uaXNzdWVzLmxlbmd0aD9ocyhOLmlzc3Vlcyk6eXUpLE4pKTooJCYmKCQuaXNzdWVzPXcuaXNzdWVzLmxlbmd0aD9ocyh3Lmlzc3Vlcyk6eXUpLHcpfTtlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSl9KX19O2Z1bmN0aW9uIG9yKCl7cmV0dXJuIHlnfWZ1bmN0aW9uIFFwKGUsdCl7Y29uc3Qgbj1lW1RzXT8uYmFja0VkZ2VzO3JldHVybiBuIT09dm9pZCAwJiZXcCh0KSYmbi5oYXModCl9Y29uc3QgX2c9KCk9Pntjb25zdCBlPXtzdHJpbmc6e3VuaXQ6ImNoYXJhY3RlcnMiLHZlcmI6InRvIGhhdmUifSxmaWxlOnt1bml0OiJieXRlcyIsdmVyYjoidG8gaGF2ZSJ9LGFycmF5Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LHNldDp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxtYXA6e3VuaXQ6ImVudHJpZXMiLHZlcmI6InRvIGhhdmUifX07ZnVuY3Rpb24gdChzKXtyZXR1cm4gZVtzXT8/bnVsbH1jb25zdCBuPXtyZWdleDoiaW5wdXQiLGVtYWlsOiJlbWFpbCBhZGRyZXNzIix1cmw6IlVSTCIsZW1vamk6ImVtb2ppIix1dWlkOiJVVUlEIix1dWlkdjQ6IlVVSUR2NCIsdXVpZHY2OiJVVUlEdjYiLG5hbm9pZDoibmFub2lkIixndWlkOiJHVUlEIixjdWlkOiJjdWlkIixjdWlkMjoiY3VpZDIiLHVsaWQ6IlVMSUQiLHhpZDoiWElEIixrc3VpZDoiS1NVSUQiLGRhdGV0aW1lOiJJU08gZGF0ZXRpbWUiLGRhdGU6IklTTyBkYXRlIix0aW1lOiJJU08gdGltZSIsZHVyYXRpb246IklTTyBkdXJhdGlvbiIsaXB2NDoiSVB2NCBhZGRyZXNzIixpcHY2OiJJUHY2IGFkZHJlc3MiLG1hYzoiTUFDIGFkZHJlc3MiLGNpZHJ2NDoiSVB2NCByYW5nZSIsY2lkcnY2OiJJUHY2IHJhbmdlIixiYXNlNjQ6ImJhc2U2NC1lbmNvZGVkIHN0cmluZyIsYmFzZTY0dXJsOiJiYXNlNjR1cmwtZW5jb2RlZCBzdHJpbmciLGpzb25fc3RyaW5nOiJKU09OIHN0cmluZyIsZTE2NDoiRS4xNjQgbnVtYmVyIixjdXJyZW5jeV9jb2RlOiJjdXJyZW5jeSBjb2RlIixjcmVkaXRfY2FyZDoiY3JlZGl0IGNhcmQgbnVtYmVyIixpYmFuOiJJQkFOIixqd3Q6IkpXVCIsdGVtcGxhdGVfbGl0ZXJhbDoiaW5wdXQifSxvPXtuYW46Ik5hTiJ9O2Z1bmN0aW9uIHIocyxhKXtyZXR1cm4gcz09PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJiFOdW1iZXIuaXNGaW5pdGUoYSk/U3RyaW5nKGEpOm9bc10/P3N9cmV0dXJuIHM9Pntzd2l0Y2gocy5jb2RlKXtjYXNlImludmFsaWRfdHlwZSI6e2NvbnN0IGE9cihzLmV4cGVjdGVkKSxpPWRsKHMuaW5wdXQpLHU9cihpLHMuaW5wdXQpO3JldHVybmBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke2F9LCByZWNlaXZlZCAke3V9YH1jYXNlImludmFsaWRfdmFsdWUiOnJldHVybiBzLnZhbHVlcy5sZW5ndGg9PT0xP2BJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke05zKHMudmFsdWVzWzBdKX1gOmBJbnZhbGlkIG9wdGlvbjogZXhwZWN0ZWQgb25lIG9mICR7dnMocy52YWx1ZXMsInwiKX1gO2Nhc2UidG9vX2JpZyI6e2NvbnN0IGE9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI8PSI6IjwiLGk9dChzLm9yaWdpbik7cmV0dXJuIGk/YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGhhdmUgJHthfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0Pz8iZWxlbWVudHMifWA6YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGJlICR7YX0ke3MubWF4aW11bS50b1N0cmluZygpfWB9Y2FzZSJ0b29fc21hbGwiOntjb25zdCBhPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPj0iOiI+IixpPXQocy5vcmlnaW4pO3JldHVybiBpP2BUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGhhdmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0fWA6YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gYmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9YH1jYXNlImludmFsaWRfZm9ybWF0Ijp7Y29uc3QgYT1zO3JldHVybiBhLmZvcm1hdD09PSJzdGFydHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IHN0YXJ0IHdpdGggIiR7YS5wcmVmaXh9ImA6YS5mb3JtYXQ9PT0iZW5kc193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggIiR7YS5zdWZmaXh9ImA6YS5mb3JtYXQ9PT0iaW5jbHVkZXMiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBpbmNsdWRlICIke2EuaW5jbHVkZXN9ImA6YS5mb3JtYXQ9PT0icmVnZXgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7YS5wYXR0ZXJufWA6YEludmFsaWQgJHtuW2EuZm9ybWF0XT8/cy5mb3JtYXR9YH1jYXNlIm5vdF9tdWx0aXBsZV9vZiI6cmV0dXJuYEludmFsaWQgbnVtYmVyOiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtzLmRpdmlzb3J9YDtjYXNlInVucmVjb2duaXplZF9rZXlzIjpyZXR1cm5gVW5yZWNvZ25pemVkIGtleSR7cy5rZXlzLmxlbmd0aD4xPyJzIjoiIn06ICR7dnMocy5rZXlzLCIsICIpfWA7Y2FzZSJpbnZhbGlkX2tleSI6cmV0dXJuYEludmFsaWQga2V5IGluICR7cy5vcmlnaW59YDtjYXNlImludmFsaWRfdW5pb24iOnJldHVybiBzLm9wdGlvbnMmJkFycmF5LmlzQXJyYXkocy5vcHRpb25zKSYmcy5vcHRpb25zLmxlbmd0aD4wP2BJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7cy5vcHRpb25zLm1hcChpPT5gJyR7aX0nYCkuam9pbigiIHwgIil9YDpzLmluY2x1c2l2ZT09PSExPyJJbnZhbGlkIGlucHV0OiBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVkIjoiSW52YWxpZCBpbnB1dCI7Y2FzZSJpbnZhbGlkX2VsZW1lbnQiOnJldHVybmBJbnZhbGlkIHZhbHVlIGluICR7cy5vcmlnaW59YDtkZWZhdWx0OnJldHVybiJJbnZhbGlkIGlucHV0In19fTtmdW5jdGlvbiBZcCgpe3JldHVybntsb2NhbGVFcnJvcjpfZygpfX1jb25zdCB5aT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW46WXB9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIF91O2NvbnN0IF9pPVN5bWJvbCgiWm9kT3V0cHV0Iiksa2k9U3ltYm9sKCJab2RJbnB1dCIpO2NsYXNzIFhwe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXB9YWRkKHQsLi4ubil7Y29uc3Qgbz1uWzBdO3JldHVybiB0aGlzLl9tYXAuc2V0KHQsbyksbyYmdHlwZW9mIG89PSJvYmplY3QiJiYiaWQiaW4gbyYmdGhpcy5faWRtYXAuc2V0KG8uaWQsdCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcCx0aGlzfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIG4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmImlkImluIG4mJnRoaXMuX2lkbWFwLmRlbGV0ZShuLmlkKSx0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXN9Z2V0KHQpe2NvbnN0IG49dC5fem9kLnBhcmVudDtpZihuKXtjb25zdCBvPXsuLi50aGlzLmdldChuKT8/e319O2RlbGV0ZSBvLmlkO2NvbnN0IHI9ey4uLm8sLi4udGhpcy5fbWFwLmdldCh0KX07cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD9yOnZvaWQgMH1yZXR1cm4gdGhpcy5fbWFwLmdldCh0KX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9fWZ1bmN0aW9uIHJyKCl7cmV0dXJuIG5ldyBYcH0oX3U9Z2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnk/PyhfdS5fX3pvZF9nbG9iYWxSZWdpc3RyeT1ycigpKTtjb25zdCB3ZT1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5LHdpPSgpPT57dGhyb3cgbmV3IEVycm9yKCJ6b2QgY29tcGlsZSgpIGlzIG5vdCBidW5kbGVkIGludG8gY2FyZHMgLSBzZWUgcGFja2FnZXMvaW50ZXJuYWwvY2FyZC1raXQvdml0ZS1zbGltLm1qcyIpfTtjbGFzcyAkaSBleHRlbmRzIEVycm9ye31jbGFzcyBTaSBleHRlbmRzIEVycm9ye31jbGFzcyB6aSBleHRlbmRzIEVycm9ye31jb25zdCBUaT13aSxJaT13aSxrZz13aTtmdW5jdGlvbiBzcihlKXtyZXR1cm4gZS5jaGVja3MmJihlLmNoZWNrcz1bLi4uZS5jaGVja3NdKSxlfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHNyKHt0eXBlOiJzdHJpbmciLC4uLnkodCl9KSl9ZnVuY3Rpb24gdGgoZSx0KXtyZXR1cm4gbmV3IGUoc3Ioe3R5cGU6InN0cmluZyIsY29lcmNlOiEwLC4uLnkodCl9KSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbWFpbCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB4aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imd1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gQ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gQWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjYiLC4uLnkodCl9KX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NyIsLi4ueSh0KX0pfWZ1bmN0aW9uIGlyKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1vamkiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gWmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJuYW5vaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZDIiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1bGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoieGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoia3N1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBuaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im1hYyIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBGaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBCaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBIaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBWaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NHVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBKaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImUxNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gb2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiByaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImliYW4iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gS2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJqd3QiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9Y29uc3QgV2k9e0FueTpudWxsLE1pbnV0ZTotMSxTZWNvbmQ6MCxNaWxsaXNlY29uZDozLE1pY3Jvc2Vjb25kOjZ9O2Z1bmN0aW9uIEdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZXRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixvZmZzZXQ6ITEsbG9jYWw6ITEscHJlY2lzaW9uOm51bGwsLi4ueSh0KX0pfWZ1bmN0aW9uIFFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBZaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gWGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkdXJhdGlvbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBzaChlLHQpe3JldHVybiBuZXcgZShzcih7dHlwZToibnVtYmVyIixjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZShzcih7dHlwZToibnVtYmVyIixjb2VyY2U6ITAsY2hlY2tzOltdLC4uLnkodCl9KSl9ZnVuY3Rpb24gYWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoic2FmZWludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0MzIiLC4uLnkodCl9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gbGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBkaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBwaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGhoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIGZoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLC4uLnkodCl9KX1mdW5jdGlvbiBtaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50Iixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIGdoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gYmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gdmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN5bWJvbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHloKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmRlZmluZWQiLC4uLnkodCl9KX1mdW5jdGlvbiBfaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGtoKGUpe3JldHVybiBuZXcgZSh7dHlwZToiYW55In0pfWZ1bmN0aW9uIHdoKGUpe3JldHVybiBuZXcgZSh7dHlwZToidW5rbm93biJ9KX1mdW5jdGlvbiAkaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmV2ZXIiLC4uLnkodCl9KX1mdW5jdGlvbiBTaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidm9pZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHpoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIiwuLi55KHQpfSl9ZnVuY3Rpb24gVGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gSWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5hbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIG5ldyBuaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIGJlKGUsdCl7cmV0dXJuIG5ldyBuaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIHFlKGUsdCl7cmV0dXJuIG5ldyBvaSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIHZlKGUsdCl7cmV0dXJuIG5ldyBvaSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIGFyKGUpe3JldHVybiBxZSgwLGUpfWZ1bmN0aW9uIGNyKGUpe3JldHVybiBNZSgwLGUpfWZ1bmN0aW9uIHVyKGUpe3JldHVybiBiZSgwLGUpfWZ1bmN0aW9uIGxyKGUpe3JldHVybiB2ZSgwLGUpfWZ1bmN0aW9uIG50KGUsdCl7cmV0dXJuIG5ldyBvZCh7Y2hlY2s6Im11bHRpcGxlX29mIiwuLi55KHQpLHZhbHVlOmV9KX1mdW5jdGlvbiBhdChlLHQpe3JldHVybiBuZXcgaWQoe2NoZWNrOiJtYXhfc2l6ZSIsLi4ueSh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBuZXcgYWQoe2NoZWNrOiJtaW5fc2l6ZSIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBuZXcgY2Qoe2NoZWNrOiJzaXplX2VxdWFscyIsLi4ueSh0KSxzaXplOmV9KX1mdW5jdGlvbiAkdChlLHQpe3JldHVybiBuZXcgdWQoe2NoZWNrOiJtYXhfbGVuZ3RoIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIFZlKGUsdCl7cmV0dXJuIG5ldyBsZCh7Y2hlY2s6Im1pbl9sZW5ndGgiLC4uLnkodCksbWluaW11bTplfSl9ZnVuY3Rpb24gU3QoZSx0KXtyZXR1cm4gbmV3IGRkKHtjaGVjazoibGVuZ3RoX2VxdWFscyIsLi4ueSh0KSxsZW5ndGg6ZX0pfWZ1bmN0aW9uIHluKGUsdCl7cmV0dXJuIG5ldyBwZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoicmVnZXgiLC4uLnkodCkscGF0dGVybjplfSl9ZnVuY3Rpb24gX24oZSl7cmV0dXJuIG5ldyBoZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoibG93ZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24ga24oZSl7cmV0dXJuIG5ldyBmZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoidXBwZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24gd24oZSx0KXtyZXR1cm4gbmV3IG1kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsLi4ueSh0KSxpbmNsdWRlczplfSl9ZnVuY3Rpb24gJG4oZSx0KXtyZXR1cm4gbmV3IGdkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIsLi4ueSh0KSxwcmVmaXg6ZX0pfWZ1bmN0aW9uIFNuKGUsdCl7cmV0dXJuIG5ldyBiZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIiwuLi55KHQpLHN1ZmZpeDplfSl9ZnVuY3Rpb24gZHIoZSx0LG4pe3JldHVybiBuZXcgdmQoe2NoZWNrOiJwcm9wZXJ0eSIscHJvcGVydHk6ZSxzY2hlbWE6dCwuLi55KG4pfSl9ZnVuY3Rpb24gem4oZSx0KXtyZXR1cm4gbmV3IHlkKHtjaGVjazoicHJvcGVydGllcyIsc2hhcGU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gVG4oZSx0KXtyZXR1cm4gbmV3IF9kKHtjaGVjazoibWltZV90eXBlIixtaW1lOmUsLi4ueSh0KX0pfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBuZXcga2Qoe2NoZWNrOiJvdmVyd3JpdGUiLHR4OmV9KX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gQWUodD0+dC5ub3JtYWxpemUoZSkpfWZ1bmN0aW9uIFBuKCl7cmV0dXJuIEFlKGU9PmUudHJpbSgpKX1mdW5jdGlvbiB4bigpe3JldHVybiBBZShlPT5lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIENuKCl7cmV0dXJuIEFlKGU9PmUudG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gRW4oKXtyZXR1cm4gQWUoZT0+UXUoZSkpfWZ1bmN0aW9uIFBoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFycmF5IixlbGVtZW50OnQsLi4ueShuKX0pfWZ1bmN0aW9uIHdnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsLi4ueShuKX0pfWZ1bmN0aW9uICRnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsaW5jbHVzaXZlOiExLC4uLnkobil9KX1mdW5jdGlvbiBTZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOm4sZGlzY3JpbWluYXRvcjp0LC4uLnkobyl9KX1mdW5jdGlvbiB6ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6dCxyaWdodDpufSl9ZnVuY3Rpb24gVGcoZSx0LG4sbyl7Y29uc3Qgcj1uIGluc3RhbmNlb2YgeCxzPXI/bzpuLGE9cj9uOm51bGw7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0dXBsZSIsaXRlbXM6dCxyZXN0OmEsLi4ueShzKX0pfWZ1bmN0aW9uIElnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIFBnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToibWFwIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIHhnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InNldCIsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIENnKGUsdCxuKXtjb25zdCBvPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHI9PltyLHJdKSk6dDtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6bywuLi55KG4pfSl9ZnVuY3Rpb24gRWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczp0LC4uLnkobil9KX1mdW5jdGlvbiBBZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheSh0KT90Olt0XSwuLi55KG4pfSl9ZnVuY3Rpb24geGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImZpbGUiLC4uLnkodCl9KX1mdW5jdGlvbiBPZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06dH0pfWZ1bmN0aW9uIFJnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBaZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gTmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOnQsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKCk6VW8obil9fSl9ZnVuY3Rpb24gamcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBNZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBxZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOnQsY2F0Y2hWYWx1ZTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmpzKG4pfSl9ZnVuY3Rpb24gRGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToicGlwZSIsaW46dCxvdXQ6bn0pfWZ1bmN0aW9uIExnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBVZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czp0LC4uLnkobil9KX1mdW5jdGlvbiBGZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibGF6eSIsZ2V0dGVyOnR9KX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBDaChlLHQsbil7Y29uc3Qgbz15KG4pO3JldHVybiBvLmFib3J0Pz8oby5hYm9ydD0hMCksbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5vfSl9ZnVuY3Rpb24gRWgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLnkobil9KX1mdW5jdGlvbiBBaChlLHQpe2NvbnN0IG49T2gobz0+KG8uYWRkSXNzdWU9cj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIilvLmlzc3Vlcy5wdXNoKG10KHIsby52YWx1ZSxuLl96b2QuZGVmKSk7ZWxzZXtjb25zdCBzPXI7cy5mYXRhbCYmKHMuY29udGludWU9ITEpLHMuY29kZT8/KHMuY29kZT0iY3VzdG9tIiksImlucHV0ImluIHN8fChzLmlucHV0PW8udmFsdWUpLHMuaW5zdD8/KHMuaW5zdD1uKSxzLmNvbnRpbnVlPz8ocy5jb250aW51ZT0hbi5fem9kLmRlZi5hYm9ydCksby5pc3N1ZXMucHVzaChtdChzKSl9fSxlKG8udmFsdWUsbykpLHQpO3JldHVybiBufWZ1bmN0aW9uIE9oKGUsdCl7Y29uc3Qgbj1uZXcgVyh7Y2hlY2s6ImN1c3RvbSIsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuY2hlY2s9ZSxufWZ1bmN0aW9uIFJoKGUpe2NvbnN0IHQ9bmV3IFcoe2NoZWNrOiJkZXNjcmliZSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz13ZS5nZXQobik/P3t9O3dlLmFkZChuLHsuLi5vLGRlc2NyaXB0aW9uOmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBaaChlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoibWV0YSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz13ZS5nZXQobik/P3t9O3dlLmFkZChuLHsuLi5vLC4uLmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBOaChlLHQpe2NvbnN0IG49eSh0KTtsZXQgbz1uLnRydXRoeT8/WyJ0cnVlIiwiMSIsInllcyIsIm9uIiwieSIsImVuYWJsZWQiXSxyPW4uZmFsc3k/P1siZmFsc2UiLCIwIiwibm8iLCJvZmYiLCJuIiwiZGlzYWJsZWQiXTtuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKG89by5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSxyPXIubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikpO2NvbnN0IHM9bmV3IFNldChvKSxhPW5ldyBTZXQociksaT1lLkNvZGVjPz9iaSx1PWUuQm9vbGVhbj8/ZGksbD1lLlN0cmluZz8/dm4sZD1uZXcgbCh7dHlwZToic3RyaW5nIixlcnJvcjpuLmVycm9yfSksbT1uZXcgdSh7dHlwZToiYm9vbGVhbiIsZXJyb3I6bi5lcnJvcn0pLGI9bmV3IGkoe3R5cGU6InBpcGUiLGluOmQsb3V0Om0sdHJhbnNmb3JtOigodixfKT0+e2xldCB3PXY7cmV0dXJuIG4uY2FzZSE9PSJzZW5zaXRpdmUiJiYodz13LnRvTG93ZXJDYXNlKCkpLHMuaGFzKHcpPyEwOmEuaGFzKHcpPyExOihfLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIixleHBlY3RlZDoic3RyaW5nYm9vbCIsdmFsdWVzOlsuLi5zLC4uLmFdLGlucHV0Ol8udmFsdWUsaW5zdDpiLGNvbnRpbnVlOiExfSkse30pfSkscmV2ZXJzZVRyYW5zZm9ybTooKHYsXyk9PnY9PT0hMD9vWzBdfHwidHJ1ZSI6clswXXx8ImZhbHNlIiksZXJyb3I6bi5lcnJvcn0pO3JldHVybiBiLl96b2QuYmFnLnRydXRoeT1vLGIuX3pvZC5iYWcuZmFsc3k9cixiLl96b2QuYmFnLmNhc2U9bi5jYXNlPz8iaW5zZW5zaXRpdmUiLGJ9ZnVuY3Rpb24genQoZSx0LG4sbz17fSl7Y29uc3Qgcj15KG8pLHM9e2NoZWNrOiJzdHJpbmdfZm9ybWF0Iix0eXBlOiJzdHJpbmciLGZvcm1hdDp0LGZuOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246aT0+bi50ZXN0KGkpLC4uLnJ9O3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwJiYocy5wYXR0ZXJuPW4pLG5ldyBlKHMpfWNvbnN0IEhnPSgpPT4oe30pLFZnPSgpPT4oe30pLEpnPSgpPT4oe30pLEtnPSgpPT4oe30pLFdnPSgpPT4oe30pLGpoPSgpPT4oKT0+KHt9KSxJcz0oKT0+KCk9Pih7fSksR2c9KCk9Pih7fSksJGU9KCk9Pih7fSksUWc9KCk9Pih7fSksWWc9KCk9Pih7fSksWGc9KCk9Pih7fSksZWI9KCk9Pih7fSksdGI9KCk9Pih7fSksbmI9KCk9Pih7fSksb2I9KCk9Pih7fSkscmI9KCk9Pih7fSksc2I9KCk9Pih7fSksaWI9KCk9Pih7fSksYWI9KCk9Pih7fSksY2I9KCk9Pih7fSksdWI9KCk9Pih7fSksbGI9KCk9Pih7fSksZGI9KCk9Pih7fSkscGI9KCk9Pih7fSksaGI9KCk9Pih7fSksZmI9KCk9Pih7fSksbWI9KCk9Pih7fSksZ2I9KCk9Pih7fSksYmI9KCk9Pih7fSksdmI9KCk9Pih7fSkseWI9KCk9Pih7fSksX2I9KCk9Pih7fSksa2I9KCk9Pih7fSksTWg9KCk9Pih7fSksd2I9KCk9Pih7fSksJGI9KCk9Pih7fSksU2I9KCk9Pih7fSksemI9KCk9Pih7fSksVGI9KCk9Pih7fSksSWI9KCk9Pih7fSksUGI9KCk9Pih7fSkseGI9KCk9Pih7fSksQ2I9KCk9Pih7fSksRWI9KCk9Pih7fSksQWI9KCk9Pih7fSkscWg9KCk9Pih7fSksT2I9KCk9Pih7fSksZWE9KCk9Pih7fSk7Y2xhc3MgUmJ7fWNvbnN0IFpiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxEaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJFpvZEFueTpocCwkWm9kQXJyYXk6dnAsJFpvZEFzeW5jRXJyb3I6QmUsJFpvZEJhc2U2NDpRZCwkWm9kQmFzZTY0VVJMOlhkLCRab2RCaWdJbnQ6cGksJFpvZEJpZ0ludEZvcm1hdDp1cCwkWm9kQm9vbGVhbjpkaSwkWm9kQ0lEUnY0OkpkLCRab2RDSURSdjY6V2QsJFpvZENVSUQ6WmQsJFpvZENVSUQyOk5kLCRab2RDYXRjaDpEcCwkWm9kQ2hlY2s6VywkWm9kQ2hlY2tCaWdJbnRGb3JtYXQ6c2QsJFpvZENoZWNrRW5kc1dpdGg6YmQsJFpvZENoZWNrR3JlYXRlclRoYW46b2ksJFpvZENoZWNrSW5jbHVkZXM6bWQsJFpvZENoZWNrTGVuZ3RoRXF1YWxzOmRkLCRab2RDaGVja0xlc3NUaGFuOm5pLCRab2RDaGVja0xvd2VyQ2FzZTpoZCwkWm9kQ2hlY2tNYXhMZW5ndGg6dWQsJFpvZENoZWNrTWF4U2l6ZTppZCwkWm9kQ2hlY2tNaW1lVHlwZTpfZCwkWm9kQ2hlY2tNaW5MZW5ndGg6bGQsJFpvZENoZWNrTWluU2l6ZTphZCwkWm9kQ2hlY2tNdWx0aXBsZU9mOm9kLCRab2RDaGVja051bWJlckZvcm1hdDpyZCwkWm9kQ2hlY2tPdmVyd3JpdGU6a2QsJFpvZENoZWNrUHJvcGVydGllczp5ZCwkWm9kQ2hlY2tQcm9wZXJ0eTp2ZCwkWm9kQ2hlY2tSZWdleDpwZCwkWm9kQ2hlY2tTaXplRXF1YWxzOmNkLCRab2RDaGVja1N0YXJ0c1dpdGg6Z2QsJFpvZENoZWNrU3RyaW5nRm9ybWF0OmJuLCRab2RDaGVja1VwcGVyQ2FzZTpmZCwkWm9kQ29kZWM6YmksJFpvZENyZWRpdENhcmQ6bnAsJFpvZEN1c3RvbTpKcCwkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OmFwLCRab2RDeWNsaWNFcnJvcjpLcCwkWm9kRGF0ZTpicCwkWm9kRGVmYXVsdDpOcCwkWm9kRGlzY3JpbWluYXRlZFVuaW9uOnpwLCRab2RFMTY0OmVwLCRab2RFbWFpbDpJZCwkWm9kRW1vamk6T2QsJFpvZEVuY29kZUVycm9yOktvLCRab2RFbnVtOkNwLCRab2RFcnJvcjp2bCwkWm9kRXhhY3RPcHRpb25hbDpScCwkWm9kRmlsZTpBcCwkWm9kRnVuY3Rpb246SHAsJFpvZEdVSUQ6emQsJFpvZElCQU46cnAsJFpvZElQdjQ6QmQsJFpvZElQdjY6SGQsJFpvZElTT0RhdGU6TGQsJFpvZElTT0RhdGVUaW1lOkRkLCRab2RJU09EdXJhdGlvbjpGZCwkWm9kSVNPVGltZTpVZCwkWm9kSW50ZXJzZWN0aW9uOlRwLCRab2RKV1Q6aXAsJFpvZEtTVUlEOnFkLCRab2RMYXp5OnZpLCRab2RMaXRlcmFsOkVwLCRab2RNQUM6VmQsJFpvZE1hcDpQcCwkWm9kTmFOOkxwLCRab2ROYW5vSUQ6UmQsJFpvZE5ldmVyOm1wLCRab2ROb25PcHRpb25hbDpNcCwkWm9kTnVsbDpwcCwkWm9kTnVsbGFibGU6WnAsJFpvZE51bWJlcjpsaSwkWm9kTnVtYmVyRm9ybWF0OmNwLCRab2RPYmplY3Q6a3AsJFpvZE9iamVjdEpJVDp3cCwkWm9kT3B0aW9uYWw6bWksJFpvZFBpcGU6Z2ksJFpvZFByZWZhdWx0OmpwLCRab2RQcmVwcm9jZXNzOlVwLCRab2RQcm9taXNlOlZwLCRab2RSZWFkb25seTpGcCwkWm9kUmVhbEVycm9yOnllLCRab2RSZWNvcmQ6SXAsJFpvZFJlZ2lzdHJ5OlhwLCRab2RTZXQ6eHAsJFpvZFN0cmluZzp2biwkWm9kU3RyaW5nRm9ybWF0OkIsJFpvZFN1Y2Nlc3M6cXAsJFpvZFN5bWJvbDpscCwkWm9kVGVtcGxhdGVMaXRlcmFsOkJwLCRab2RUcmFuc2Zvcm06T3AsJFpvZFR1cGxlOmZpLCRab2RUeXBlOngsJFpvZFVMSUQ6amQsJFpvZFVSTDpBZCwkWm9kVVVJRDpUZCwkWm9kVW5kZWZpbmVkOmRwLCRab2RVbmlvbjpuciwkWm9kVW5rbm93bjpmcCwkWm9kVm9pZDpncCwkWm9kWElEOk1kLCRab2RYb3I6JHAsJGJyYW5kOkRzLCRjb25zdHJ1Y3RvcjpwLCRpbnB1dDpraSwkb3V0cHV0Ol9pLERvYzp3ZCxJTlZBTElEOiRpLEpTT05TY2hlbWE6WmIsSlNPTlNjaGVtYUdlbmVyYXRvcjpSYixORVZFUjpxcyxUaW1lUHJlY2lzaW9uOldpLFVSTF9CQURfRk9STUFUOnNpLFVSTF9VTlBBUlNFQUJMRTpYdCxab2RDb21waWxlQXN5bmNFcnJvcjpTaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjp6aSxfYW55OmtoLF9hcnJheTpQaCxfYmFzZTY0OkhpLF9iYXNlNjR1cmw6VmksX2JpZ2ludDpmaCxfYm9vbGVhbjpwaCxfY2F0Y2g6cWcsX2NoZWNrOk9oLF9jaWRydjQ6RmksX2NpZHJ2NjpCaSxfY29lcmNlZEJpZ2ludDptaCxfY29lcmNlZEJvb2xlYW46aGgsX2NvZXJjZWREYXRlOlRoLF9jb2VyY2VkTnVtYmVyOmloLF9jb2VyY2VkU3RyaW5nOnRoLF9jcmVkaXRDYXJkOm9oLF9jdWlkOk5pLF9jdWlkMjpqaSxfY3VzdG9tOkNoLF9kYXRlOnpoLF9kZWNvZGU6QnMsX2RlY29kZUFzeW5jOlZzLF9kZWZhdWx0Ok5nLF9kaXNjcmltaW5hdGVkVW5pb246U2csX2UxNjQ6SmksX2VtYWlsOlBpLF9lbW9qaTpSaSxfZW5jb2RlOkZzLF9lbmNvZGVBc3luYzpIcyxfZW5kc1dpdGg6U24sX2VudW06Q2csX2ZpbGU6eGgsX2Zsb2F0MzI6Y2gsX2Zsb2F0NjQ6dWgsX2d0OnFlLF9ndGU6dmUsX2d1aWQ6eGksX2liYW46cmgsX2luY2x1ZGVzOnduLF9pbnQ6YWgsX2ludDMyOmxoLF9pbnQ2NDpnaCxfaW50ZXJzZWN0aW9uOnpnLF9pcHY0OkxpLF9pcHY2OlVpLF9pc29EYXRlOlFpLF9pc29EYXRlVGltZTpHaSxfaXNvRHVyYXRpb246WGksX2lzb1RpbWU6WWksX2p3dDpLaSxfa3N1aWQ6RGksX2xhenk6RmcsX2xlbmd0aDpTdCxfbGl0ZXJhbDpBZyxfbG93ZXJjYXNlOl9uLF9sdDpNZSxfbHRlOmJlLF9tYWM6bmgsX21hcDpQZyxfbWF4OmJlLF9tYXhMZW5ndGg6JHQsX21heFNpemU6YXQsX21pbWU6VG4sX21pbjp2ZSxfbWluTGVuZ3RoOlZlLF9taW5TaXplOkRlLF9tdWx0aXBsZU9mOm50LF9uYW46SWgsX25hbm9pZDpaaSxfbmF0aXZlRW51bTpFZyxfbmVnYXRpdmU6Y3IsX25ldmVyOiRoLF9ub25uZWdhdGl2ZTpscixfbm9ub3B0aW9uYWw6amcsX25vbnBvc2l0aXZlOnVyLF9ub3JtYWxpemU6SW4sX251bGw6X2gsX251bGxhYmxlOlpnLF9udW1iZXI6c2gsX29wdGlvbmFsOlJnLF9vdmVyd3JpdGU6QWUsX3BhcnNlOmRuLF9wYXJzZUFzeW5jOnBuLF9waXBlOkRnLF9wb3NpdGl2ZTphcixfcHJvbWlzZTpCZyxfcHJvcGVydGllczp6bixfcHJvcGVydHk6ZHIsX3JlYWRvbmx5OkxnLF9yZWNvcmQ6SWcsX3JlZmluZTpFaCxfcmVnZXg6eW4sX3NhZmVEZWNvZGU6S3MsX3NhZmVEZWNvZGVBc3luYzpHcyxfc2FmZUVuY29kZTpKcyxfc2FmZUVuY29kZUFzeW5jOldzLF9zYWZlUGFyc2U6aG4sX3NhZmVQYXJzZUFzeW5jOmZuLF9zZXQ6eGcsX3NpemU6d3QsX3NsdWdpZnk6RW4sX3N0YXJ0c1dpdGg6JG4sX3N0cmluZzplaCxfc3RyaW5nRm9ybWF0Onp0LF9zdHJpbmdib29sOk5oLF9zdWNjZXNzOk1nLF9zdXBlclJlZmluZTpBaCxfc3ltYm9sOnZoLF90ZW1wbGF0ZUxpdGVyYWw6VWcsX3RvTG93ZXJDYXNlOnhuLF90b1VwcGVyQ2FzZTpDbixfdHJhbnNmb3JtOk9nLF90cmltOlBuLF90dXBsZTpUZyxfdWludDMyOmRoLF91aW50NjQ6YmgsX3VsaWQ6TWksX3VuZGVmaW5lZDp5aCxfdW5pb246d2csX3Vua25vd246d2gsX3VwcGVyY2FzZTprbixfdXJsOmlyLF91dWlkOkNpLF91dWlkdjQ6RWksX3V1aWR2NjpBaSxfdXVpZHY3Ok9pLF92b2lkOlNoLF94aWQ6cWksX3hvcjokZyxiYXNlNjRDaGFyc2V0OkdkLGJhc2U2NHVybENoYXJzZXQ6dWksY2FuUGFyc2VVUkw6aWksY2xvbmU6USxjb21waWxlOlRpLGNvbXBpbGVGbjprZyxjb25maWc6dGUsY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOklzLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpqaCxkZWNvZGU6UG0sZGVjb2RlQXN5bmM6Q20sZGVzY3JpYmU6UmgsZW5jb2RlOkltLGVuY29kZUFzeW5jOnhtLGV4dHJhY3REZWZzOktnLGZpbmFsaXplOldnLGZsYXR0ZW5FcnJvcjpXbyxmb3JtYXRFcnJvcjpHbyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmhpLGdsb2JhbENvbmZpZzpkZSxnbG9iYWxSZWdpc3RyeTp3ZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6VmcsaW5pdGlhbGl6ZUNvbnRleHQ6SGcsaXNCYWNrRWRnZTpRcCxpc1JlY3Vyc2l2ZVNjaGVtYTpiZyxpc1ZhbGlkQmFzZTY0OmNpLGlzVmFsaWRCYXNlNjRVUkw6WWQsaXNWYWxpZENJRFJ2NjpLZCxpc1ZhbGlkQ3JlZGl0Q2FyZDp0cCxpc1ZhbGlkSUJBTjpvcCxpc1ZhbGlkSVB2NjphaSxpc1ZhbGlkSldUOnNwLGxvY2FsZXM6eWksbWVtb2l6ZXI6b3IsbWVyZ2VWYWx1ZXM6Q28sbWV0YTpaaCxwYXJzZTprcyxwYXJzZUFzeW5jOndzLHBhcnNlVVJMT2JqZWN0OnhkLHByZXR0aWZ5RXJyb3I6VXMscHJvY2VzczpHZyxwcm9jZXNzU2NoZW1hOkpnLHJlZ2V4ZXM6dHIscmVnaXN0cnk6cnIsc2FmZURlY29kZTpBbSxzYWZlRGVjb2RlQXN5bmM6Um0sc2FmZUVuY29kZTpFbSxzYWZlRW5jb2RlQXN5bmM6T20sc2FmZVBhcnNlOl9sLHNhZmVQYXJzZUFzeW5jOiRtLHN0YW5kYXJkUHJvcHM6cmksc3RyaXBUYWJBbmROZXdsaW5lOlNzLHRvRG90UGF0aDp5bCx0b0pTT05TY2hlbWE6ZWEsdG9ab2Q6RG8sdHJlZWlmeUVycm9yOkxzLHVybEhvc3RuYW1lT2s6Q2QsdXJsUHJvdG9jb2xPazpFZCx1dGlsOk1zLHZhbGlkYXRlOllvLHZhbGlkYXRlQXN5bmM6WG8sdmFsaWRhdGVVUkw6UGQsdmVyc2lvbjokZCx3aXRoUGFyc2VyOklpfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGt1PVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiB0YShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooYSxpKT0+e2NvbnN0IHU9dFthLl96b2QuZGVmLnR5cGVdO3JldHVybiB1P3UoYSxpKTphfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihhKXtjb25zdCBpPW8uZ2V0KGEpO2lmKGk9PT1rdSlyZXR1cm4gbmV3IHZpKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGEpfSk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtvLnNldChhLGt1KTtjb25zdCB1PXMoYSksbD1uKHUsdSE9PWEpO3JldHVybiBvLnNldChhLGwpLGx9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPWEuX3pvZC5kZWY7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPWkuc2hhcGUsZD1PYmplY3Qua2V5cyhsKTtsZXQgbT0hMTtjb25zdCBiPXt9O2Zvcihjb25zdCBfIG9mIGQpe2NvbnN0IHc9cihsW19dKTt3IT09bFtfXSYmKG09ITApLGJbX109d31sZXQgdj1pLmNhdGNoYWxsO3JldHVybiBpLmNhdGNoYWxsJiYodj1yKGkuY2F0Y2hhbGwpLHYhPT1pLmNhdGNoYWxsJiYobT0hMCkpLG0/UShhLHsuLi5pLHNoYXBlOmIsY2F0Y2hhbGw6dn0pOmF9Y2FzZSJhcnJheSI6e2NvbnN0IGw9cihpLmVsZW1lbnQpO3JldHVybiBsPT09aS5lbGVtZW50P2E6UShhLHsuLi5pLGVsZW1lbnQ6bH0pfWNhc2UidHVwbGUiOntjb25zdCBsPWkuaXRlbXM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgdiBvZiBsKXtjb25zdCBfPXIodik7XyE9PXYmJihkPSEwKSxtLnB1c2goXyl9bGV0IGI9aS5yZXN0O3JldHVybiBpLnJlc3QmJihiPXIoaS5yZXN0KSxiIT09aS5yZXN0JiYoZD0hMCkpLGQ/UShhLHsuLi5pLGl0ZW1zOm0scmVzdDpifSk6YX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCBsPXIoaS5rZXlUeXBlKSxkPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS5rZXlUeXBlJiZkPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksa2V5VHlwZTpsLHZhbHVlVHlwZTpkfSl9Y2FzZSJzZXQiOntjb25zdCBsPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksdmFsdWVUeXBlOmx9KX1jYXNlInVuaW9uIjp7Y29uc3QgbD1pLm9wdGlvbnM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgYiBvZiBsKXtjb25zdCB2PXIoYik7diE9PWImJihkPSEwKSxtLnB1c2godil9cmV0dXJuIGQ/UShhLHsuLi5pLG9wdGlvbnM6bX0pOmF9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCBsPXIoaS5sZWZ0KSxkPXIoaS5yaWdodCk7cmV0dXJuIGw9PT1pLmxlZnQmJmQ9PT1pLnJpZ2h0P2E6UShhLHsuLi5pLGxlZnQ6bCxyaWdodDpkfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IGw9cihpLmlubmVyVHlwZSk7cmV0dXJuIGw9PT1pLmlubmVyVHlwZT9hOlEoYSx7Li4uaSxpbm5lclR5cGU6bH0pfWNhc2UicGlwZSI6e2NvbnN0IGw9cihpLmluKSxkPXIoaS5vdXQpO3JldHVybiBsPT09aS5pbiYmZD09PWkub3V0P2E6UShhLHsuLi5pLGluOmwsb3V0OmR9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgbD1yKGkuaW5wdXQpLGQ9cihpLm91dHB1dCk7cmV0dXJuIGw9PT1pLmlucHV0JiZkPT09aS5vdXRwdXQ/YTpRKGEsey4uLmksaW5wdXQ6bCxvdXRwdXQ6ZH0pfWNhc2UibGF6eSI6e2NvbnN0IGw9aS5nZXR0ZXIse19jYWNoZWRJbm5lcjpkLC4uLm19PWk7cmV0dXJuIFEoYSx7Li4ubSxnZXR0ZXI6KCk9PnIobCgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiBhfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBuYShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBMaChlLHQpe3JldHVybiBuYShlKT9fbChlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIE5iKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihuYShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIGpiKGUpe2lmKG5hKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IE1iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDpTbixndDpxZSxndGU6dmUsaW5jbHVkZXM6d24sbGVuZ3RoOlN0LGxvd2VyY2FzZTpfbixsdDpNZSxsdGU6YmUsbWF4TGVuZ3RoOiR0LG1heFNpemU6YXQsbWltZTpUbixtaW5MZW5ndGg6VmUsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOm50LG5lZ2F0aXZlOmNyLG5vbm5lZ2F0aXZlOmxyLG5vbnBvc2l0aXZlOnVyLG5vcm1hbGl6ZTpJbixvdmVyd3JpdGU6QWUscG9zaXRpdmU6YXIscHJvcGVydGllczp6bixwcm9wZXJ0eTpkcixyZWdleDp5bixzaXplOnd0LHNsdWdpZnk6RW4sc3RhcnRzV2l0aDokbix0b0xvd2VyQ2FzZTp4bix0b1VwcGVyQ2FzZTpDbix0cmltOlBuLHVwcGVyY2FzZTprbn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx3dT1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiB5byhlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IFVoPShlLHQpPT57dmwuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3d1LmhhcyhuKXx8KHd1LmFkZChuKSx5byhuLCJmb3JtYXQiLG89PnI9PkdvKG8scikpLHlvKG4sImZsYXR0ZW4iLG89PnI9PldvKG8scikpLHlvKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsem8sMil9KSx5byhuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3Vlcyx6bywyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxGaD1wKCJab2RFcnJvciIsVWgpLG1lPXAoIlpvZEVycm9yIixVaCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLG9hPWRuKG1lKSxyYT1wbihtZSksc2E9aG4obWUpLGlhPWZuKG1lKSxhYT1GcyhtZSksY2E9QnMobWUpLHVhPUhzKG1lKSxsYT1WcyhtZSksZGE9SnMobWUpLHBhPUtzKG1lKSxoYT1XcyhtZSksZmE9R3MobWUpO2Z1bmN0aW9uIHFiKCl7ZGUubG9jYWxlRXJyb3J8fHRlKFlwKCkpfWZ1bmN0aW9uIGN0KCl7ZGUubWVtb2l6ZXJ8fHRlKHttZW1vaXplcjpvcigpfSl9Y29uc3QgRT1wKCJab2RUeXBlIiwoZSx0KT0+KHFiKCkseC5pbml0KGUsdCksZS5kZWY9dCxlLnR5cGU9dC50eXBlLGUpLHtjaGVjayguLi5lKXtjb25zdCB0PXRoaXMuZGVmO3JldHVybiB0aGlzLmNsb25lKHVlKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBRKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhYcihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhlcyhlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEFlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gVih0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBPcih0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gdnQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gVih2dCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBxcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBQKHRoaXMpfSxvcihlKXtyZXR1cm4gQShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4ganQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiB0bih0aGlzLHRvKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gTnIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIE1yKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBVcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiB0bih0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBWcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHdlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHdlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gd2UuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBKbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5yaSh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpJcygpLG91dHB1dDpJcygpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtqZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIG9hKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgcmEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBzYSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIGlhKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtqZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBZbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gWG8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gY2EodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgdWEodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgbGEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gZGEodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIHBhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIGhhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIGZhKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBqaCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gd2UuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxBbj1wKCJfWm9kU3RyaW5nIiwoZSx0KT0+e3ZuLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UWcoKX0sbG4oe2Zvcm1hdDplPT4kZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+JGUoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT4kZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayh5biguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHduKC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjaygkbiguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFNuKC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFZlKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKCR0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFN0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soVmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhfbihlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhrbihlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhQbigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEluKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayh4bigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhDbigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKEVuKCkpfX0pKSxUdD1wKCJab2RTdHJpbmciLChlLHQpPT57dm4uaW5pdChlLHQpLEFuLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKFBpKE9uLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKGlyKEV0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKEtpKFduLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmkoWm4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHhpKFJuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhDaShQZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhFaShQZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhBaShQZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhPaShQZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhaaShObixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTmkoam4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhqaShNbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTWkocW4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soSGkoVm4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soVmkoSm4sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2socWkoRG4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhEaShMbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTGkoVW4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFVpKEZuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKEZpKEJuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKEJpKEhuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhKaShLbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKEdpKEl0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhRaShQdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soWWkoeHQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhYaShDdCxlKSl9fSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gZWgoVHQsZSl9Y29uc3QgVT1wKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57Qi5pbml0KGUsdCksQW4uaW5pdChlLHQpfSksSXQ9cCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57RGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksUHQ9cCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntMZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSx4dD1wKCJab2RJU09UaW1lIiwoZSx0KT0+e1VkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLEN0PXAoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e0ZkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLE9uPXAoIlpvZEVtYWlsIiwoZSx0KT0+e0lkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG1hKGUpe3JldHVybiBQaShPbixlKX1jb25zdCBSbj1wKCJab2RHVUlEIiwoZSx0KT0+e3pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGdhKGUpe3JldHVybiB4aShSbixlKX1jb25zdCBQZT1wKCJab2RVVUlEIiwoZSx0KT0+e1RkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBDaShQZSxlKX1mdW5jdGlvbiB2YShlKXtyZXR1cm4gRWkoUGUsZSl9ZnVuY3Rpb24geWEoZSl7cmV0dXJuIEFpKFBlLGUpfWZ1bmN0aW9uIF9hKGUpe3JldHVybiBPaShQZSxlKX1jb25zdCBFdD1wKCJab2RVUkwiLChlLHQpPT57QWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24ga2EoZSl7cmV0dXJuIGlyKEV0LGUpfWZ1bmN0aW9uIHdhKGUpe3JldHVybiBpcihFdCx7cHJvdG9jb2w6UXMsaG9zdG5hbWU6RGwsLi4ueShlKX0pfWNvbnN0IFpuPXAoIlpvZEVtb2ppIiwoZSx0KT0+e09kLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uICRhKGUpe3JldHVybiBSaShabixlKX1jb25zdCBObj1wKCJab2ROYW5vSUQiLChlLHQpPT57UmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIFppKE5uLGUpfWNvbnN0IGpuPXAoIlpvZENVSUQiLChlLHQpPT57WmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gemEoZSl7cmV0dXJuIE5pKGpuLGUpfWNvbnN0IE1uPXAoIlpvZENVSUQyIiwoZSx0KT0+e05kLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFRhKGUpe3JldHVybiBqaShNbixlKX1jb25zdCBxbj1wKCJab2RVTElEIiwoZSx0KT0+e2pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIElhKGUpe3JldHVybiBNaShxbixlKX1jb25zdCBEbj1wKCJab2RYSUQiLChlLHQpPT57TWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUGEoZSl7cmV0dXJuIHFpKERuLGUpfWNvbnN0IExuPXAoIlpvZEtTVUlEIiwoZSx0KT0+e3FkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBEaShMbixlKX1jb25zdCBVbj1wKCJab2RJUHY0IiwoZSx0KT0+e0JkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBMaShVbixlKX1jb25zdCBwcj1wKCJab2RNQUMiLChlLHQpPT57VmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIG5oKHByLGUpfWNvbnN0IEZuPXAoIlpvZElQdjYiLChlLHQpPT57SGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gQWEoZSl7cmV0dXJuIFVpKEZuLGUpfWNvbnN0IEJuPXAoIlpvZENJRFJ2NCIsKGUsdCk9PntKZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBPYShlKXtyZXR1cm4gRmkoQm4sZSl9Y29uc3QgSG49cCgiWm9kQ0lEUnY2IiwoZSx0KT0+e1dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBCaShIbixlKX1jb25zdCBWbj1wKCJab2RCYXNlNjQiLChlLHQpPT57UWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gWmEoZSl7cmV0dXJuIEhpKFZuLGUpfWNvbnN0IEpuPXAoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntYZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gVmkoSm4sZSl9Y29uc3QgS249cCgiWm9kRTE2NCIsKGUsdCk9PntlcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBqYShlKXtyZXR1cm4gSmkoS24sZSl9Y29uc3QgaHI9cCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntucC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBNYShlKXtyZXR1cm4gb2goaHIsZSl9Y29uc3QgZnI9cCgiWm9kSUJBTiIsKGUsdCk9PntycC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBxYShlKXtyZXR1cm4gcmgoZnIsZSl9Y29uc3QgV249cCgiWm9kSldUIiwoZSx0KT0+e2lwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIERhKGUpe3JldHVybiBLaShXbixlKX1jb25zdCBLZT1wKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57YXAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTGEoZSx0LG49e30pe3JldHVybiB6dChLZSxlLHQsbil9ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIHp0KEtlLCJob3N0bmFtZSIscWwsZSl9ZnVuY3Rpb24gRmEoZSl7cmV0dXJuIHp0KEtlLCJoZXgiLG5kLGUpfWZ1bmN0aW9uIEJhKGUpe3JldHVybiB6dChLZSwiY3VycmVuY3lfY29kZSIsVWwsZSl9ZnVuY3Rpb24gSGEoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPXRyW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIHp0KEtlLG8scix0KX1jb25zdCBBdD1wKCJab2ROdW1iZXIiLChlLHQpPT57bGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZZygpLGUuaXNGaW5pdGU9ITB9LGxuKHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09JGUoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT0kZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT0kZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PiRlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhxZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKE1lKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhlbihlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soZW4oZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhxZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKE1lKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKG50KGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobnQoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBDKGUpe3JldHVybiBzaChBdCxlKX1jb25zdCBXZT1wKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57Y3AuaW5pdChlLHQpLEF0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIGVuKGUpe3JldHVybiBhaChXZSxlKX1mdW5jdGlvbiBWYShlKXtyZXR1cm4gY2goV2UsZSl9ZnVuY3Rpb24gSmEoZSl7cmV0dXJuIHVoKFdlLGUpfWZ1bmN0aW9uIEthKGUpe3JldHVybiBsaChXZSxlKX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gZGgoV2UsZSl9Y29uc3QgT3Q9cCgiWm9kQm9vbGVhbiIsKGUsdCk9PntkaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhnKCl9KTtmdW5jdGlvbiBMKGUpe3JldHVybiBwaChPdCxlKX1jb25zdCBSdD1wKCJab2RCaWdJbnQiLChlLHQpPT57cGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5lYigpfSxsbih7bWluVmFsdWU6ZT0+JGUoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PiRlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+JGUoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soTWUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2socWUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soTWUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYmUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKG50KGUsdCkpfX0pKTtmdW5jdGlvbiBHYShlKXtyZXR1cm4gZmgoUnQsZSl9Y29uc3QgR249cCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e3VwLmluaXQoZSx0KSxSdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBRYShlKXtyZXR1cm4gZ2goR24sZSl9ZnVuY3Rpb24gWWEoZSl7cmV0dXJuIGJoKEduLGUpfWNvbnN0IG1yPXAoIlpvZFN5bWJvbCIsKGUsdCk9PntscC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnRiKCl9KTtmdW5jdGlvbiBYYShlKXtyZXR1cm4gdmgobXIsZSl9Y29uc3QgZ3I9cCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e2RwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+b2IoKX0pO2Z1bmN0aW9uIGJ0KGUpe3JldHVybiB5aChncixlKX1jb25zdCBicj1wKCJab2ROdWxsIiwoZSx0KT0+e3BwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bmIoKX0pO2Z1bmN0aW9uIFFuKGUpe3JldHVybiBfaChicixlKX1jb25zdCB2cj1wKCJab2RBbnkiLChlLHQpPT57aHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pYigpfSk7ZnVuY3Rpb24gWW4oKXtyZXR1cm4ga2godnIpfWNvbnN0IHlyPXAoIlpvZFVua25vd24iLChlLHQpPT57ZnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5hYigpfSk7ZnVuY3Rpb24gRCgpe3JldHVybiB3aCh5cil9Y29uc3QgX3I9cCgiWm9kTmV2ZXIiLChlLHQpPT57bXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5zYigpfSk7ZnVuY3Rpb24gb3QoZSl7cmV0dXJuICRoKF9yLGUpfWNvbnN0IGtyPXAoIlpvZFZvaWQiLChlLHQpPT57Z3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5yYigpfSk7ZnVuY3Rpb24gZWMoZSl7cmV0dXJuIFNoKGtyLGUpfWNvbnN0IFhuPXAoIlpvZERhdGUiLChlLHQpPT57YnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jYigpLGUubWluPShuLG8pPT5lLmNoZWNrKHZlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGJlKG4sbykpfSxsbih7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT0kZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09JGUoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiB0YyhlKXtyZXR1cm4gemgoWG4sZSl9Y29uc3Qgd3I9cCgiWm9kQXJyYXkiLChlLHQpPT57Y3QoKSx2cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9iKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFZlKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhWZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soJHQoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFN0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gUGgod3IsZSx0KX1mdW5jdGlvbiBuYyhlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIGllKE9iamVjdC5rZXlzKHQpKX1jb25zdCBadD1wKCJab2RPYmplY3QiLChlLHQpPT57Y3QoKSx3cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtiKCksbWwoZSwic2hhcGUiLG49Pm4uX3pvZC5kZWYuc2hhcGUsITEpfSx7a2V5b2YoKXtyZXR1cm4gaWUoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkQoKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpEKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOm90KCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIHNsKHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIGFsKHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBjbCh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBvbCh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBybCh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiB5cyhNdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIHlzKG5vLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiB1bChvbyx0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLnkodCl9O3JldHVybiBuZXcgWnQobil9ZnVuY3Rpb24gb2MoZSx0KXtyZXR1cm4gbmV3IFp0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6b3QoKSwuLi55KHQpfSl9ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4gbmV3IFp0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6RCgpLC4uLnkodCl9KX1jb25zdCBOdD1wKCJab2RVbmlvbiIsKGUsdCk9Pntuci5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk1oKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIEEoZSx0KXtyZXR1cm4gbmV3IE50KHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLC4uLnkodCl9KX1jb25zdCAkcj1wKCJab2RYb3IiLChlLHQpPT57TnQuaW5pdChlLHQpLCRwLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TWgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gcmMoZSx0KXtyZXR1cm4gbmV3ICRyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLGluY2x1c2l2ZTohMSwuLi55KHQpfSl9Y29uc3QgU3I9cCgiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e050LmluaXQoZSx0KSx6cC5pbml0KGUsdCl9KTtmdW5jdGlvbiBlbyhlLHQsbil7cmV0dXJuIG5ldyBTcih7dHlwZToidW5pb24iLG9wdGlvbnM6dCxkaXNjcmltaW5hdG9yOmUsLi4ueShuKX0pfWNvbnN0IHpyPXAoIlpvZEludGVyc2VjdGlvbiIsKGUsdCk9PntUcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndiKCl9KTtmdW5jdGlvbiBqdChlLHQpe3JldHVybiBuZXcgenIoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDplLHJpZ2h0OnR9KX1jb25zdCBUcj1wKCJab2RUdXBsZSIsKGUsdCk9PntjdCgpLGZpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGIoKX0se3Jlc3QoZSl7cmV0dXJuIHRoaXMuY2xvbmUoey4uLnRoaXMuX3pvZC5kZWYscmVzdDplfSl9LHBhcnRpYWwoKXtjb25zdCBlPXRoaXMuX3pvZC5kZWY7aWYoZS5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5wYXJ0aWFsKCkgY2Fubm90IGJlIHVzZWQgb24gdHVwbGUgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7cmV0dXJuIHRoaXMuY2xvbmUoey4uLmUsaXRlbXM6ZS5pdGVtcy5tYXAodD0+bmV3IE10KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KSl9KX19KTtmdW5jdGlvbiBJcihlLHQsbil7Y29uc3Qgbz10IGluc3RhbmNlb2YgeCxyPW8/bjp0LHM9bz90Om51bGw7cmV0dXJuIG5ldyBUcih7dHlwZToidHVwbGUiLGl0ZW1zOmUscmVzdDpzLC4uLnkocil9KX1jb25zdCBydD1wKCJab2RSZWNvcmQiLChlLHQpPT57Y3QoKSxJcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNiKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZX0pO2Z1bmN0aW9uIFooZSx0LG4pe3JldHVybiF0fHwhdC5fem9kP25ldyBydCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmgoKSx2YWx1ZVR5cGU6ZSwuLi55KHQpfSk6bmV3IHJ0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gc2MoZSx0LG4pe3JldHVybiBuZXcgcnQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobikscGFydGlhbDohMH0pfWZ1bmN0aW9uIGljKGUsdCxuKXtyZXR1cm4gbmV3IHJ0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCxtb2RlOiJsb29zZSIsLi4ueShuKX0pfWNvbnN0IFByPXAoIlpvZE1hcCIsKGUsdCk9PntjdCgpLFBwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmIoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlLGUubWluPSguLi5uKT0+ZS5jaGVjayhEZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKERlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhhdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayh3dCguLi5uKSl9KTtmdW5jdGlvbiBhYyhlLHQsbil7cmV0dXJuIG5ldyBQcih7dHlwZToibWFwIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWNvbnN0IHhyPXAoIlpvZFNldCIsKGUsdCk9PntjdCgpLHhwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eWIoKSxlLm1pbj0oLi4ubik9PmUuY2hlY2soRGUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhEZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soYXQoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2sod3QoLi4ubikpfSk7ZnVuY3Rpb24gY2MoZSx0KXtyZXR1cm4gbmV3IHhyKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTplLC4uLnkodCl9KX1jb25zdCBzdD1wKCJab2RFbnVtIiwoZSx0KT0+e0NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG8scixzKT0+dWIoKSxlLmVudW09dC5lbnRyaWVzLGUub3B0aW9ucz1bLi4uZS5fem9kLnZhbHVlc107Y29uc3Qgbj1uZXcgU2V0KE9iamVjdC5rZXlzKHQuZW50cmllcykpO2UuZXh0cmFjdD0obyxyKT0+e2NvbnN0IHM9e307Zm9yKGNvbnN0IGEgb2YgbylpZihuLmhhcyhhKSlzW2FdPXQuZW50cmllc1thXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7YX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IHN0KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfSxlLmV4Y2x1ZGU9KG8scik9Pntjb25zdCBzPXsuLi50LmVudHJpZXN9O2Zvcihjb25zdCBhIG9mIG8paWYobi5oYXMoYSkpZGVsZXRlIHNbYV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2F9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBzdCh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX19KTtmdW5jdGlvbiBpZShlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgc3Qoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi55KHQpfSl9ZnVuY3Rpb24gdWMoZSx0KXtyZXR1cm4gbmV3IHN0KHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4ueSh0KX0pfWNvbnN0IENyPXAoIlpvZExpdGVyYWwiLChlLHQpPT57RXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5sYigpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBDcih7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4ueSh0KX0pfWNvbnN0IEVyPXAoIlpvZEZpbGUiLChlLHQpPT57QXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oYigpLGUubWluPShuLG8pPT5lLmNoZWNrKERlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGF0KG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhUbihBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIGxjKGUpe3JldHVybiB4aChFcixlKX1jb25zdCBBcj1wKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57Y3QoKSxPcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmJiKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBLbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKG10KHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBhPXM7YS5mYXRhbCYmKGEuY29udGludWU9ITEpLGEuY29kZT8/KGEuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGF8fChhLmlucHV0PW4udmFsdWUpLGEuaW5zdD8/KGEuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKG10KGEpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gdG8oZSl7cmV0dXJuIG5ldyBBcih7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IE10PXAoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e21pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cWgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBWKGUpe3JldHVybiBuZXcgTXQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IG5vPXAoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57UnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5xaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE9yKGUpe3JldHVybiBuZXcgbm8oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IFJyPXAoIlpvZE51bGxhYmxlIiwoZSx0KT0+e1pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB2dChlKXtyZXR1cm4gbmV3IFJyKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBkYyhlKXtyZXR1cm4gVih2dChlKSl9Y29uc3QgWnI9cCgiWm9kRGVmYXVsdCIsKGUsdCk9PntOcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkliKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIG5ldyBacih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6VW8odCl9fSl9Y29uc3QganI9cCgiWm9kUHJlZmF1bHQiLChlLHQpPT57anAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE1yKGUsdCl7cmV0dXJuIG5ldyBqcih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOlVvKHQpfX0pfWNvbnN0IG9vPXAoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e01wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBxcihlLHQpe3JldHVybiBuZXcgb28oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgRHI9cCgiWm9kU3VjY2VzcyIsKGUsdCk9PntxcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmZiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gcGMoZSl7cmV0dXJuIG5ldyBEcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBMcj1wKCJab2RDYXRjaCIsKGUsdCk9PntEcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBVcihlLHQpe3JldHVybiBuZXcgTHIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6anModCl9KX1jb25zdCBGcj1wKCJab2ROYU4iLChlLHQpPT57THAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kYigpfSk7ZnVuY3Rpb24gaGMoZSl7cmV0dXJuIEloKEZyLGUpfWNvbnN0IHF0PXAoIlpvZFBpcGUiLChlLHQpPT57Z2kuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DYigpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIHRuKGUsdCl7cmV0dXJuIG5ldyBxdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IER0PXAoIlpvZENvZGVjIiwoZSx0KT0+e3F0LmluaXQoZSx0KSxiaS5pbml0KGUsdCl9KTtmdW5jdGlvbiBmYyhlLHQsbil7cmV0dXJuIG5ldyBEdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIG1jKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IER0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBCcj1wKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e3F0LmluaXQoZSx0KSxVcC5pbml0KGUsdCl9KSxIcj1wKCJab2RSZWFkb25seSIsKGUsdCk9PntGcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkViKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gVnIoZSl7cmV0dXJuIG5ldyBIcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgSnI9cCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0JwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cGIoKX0pO2Z1bmN0aW9uIGdjKGUsdCl7cmV0dXJuIG5ldyBKcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi55KHQpfSl9Y29uc3QgS3I9cCgiWm9kTGF6eSIsKGUsdCk9Pnt2aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk9iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBXcihlKXtyZXR1cm4gbmV3IEtyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IEdyPXAoIlpvZFByb21pc2UiLChlLHQpPT57VnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5BYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIGJjKGUpe3JldHVybiBuZXcgR3Ioe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgUXI9cCgiWm9kRnVuY3Rpb24iLChlLHQpPT57SHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5nYigpfSk7ZnVuY3Rpb24geXQoZSl7cmV0dXJuIG5ldyBRcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP0lyKGU/LmlucHV0KTplPy5pbnB1dD8/UChEKCkpLG91dHB1dDplPy5vdXRwdXQ/P0QoKX0pfWNvbnN0IEx0PXAoIlpvZEN1c3RvbSIsKGUsdCk9PntKcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1iKCl9KTtmdW5jdGlvbiB2YyhlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIFlyKGUsdCl7cmV0dXJuIENoKEx0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIFhyKGUsdD17fSl7cmV0dXJuIEVoKEx0LGUsdCl9ZnVuY3Rpb24gZXMoZSx0KXtyZXR1cm4gQWgoZSx0KX1jb25zdCB5Yz1SaCxfYz1aaCx0cz1wKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e0x0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh6bihlLHQpKX19KTtmdW5jdGlvbiBrYyhlLHQ9e30pe2NvbnN0IG49bmV3IHRzKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLnkodCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3Qgd2M9KC4uLmUpPT5OaCh7Q29kZWM6RHQsQm9vbGVhbjpPdCxTdHJpbmc6VHR9LC4uLmUpO2Z1bmN0aW9uICRjKGUpe2NvbnN0IHQ9V3IoKCk9PkEoW2goZSksQygpLEwoKSxRbigpLFAodCksWihoKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gcm8oZSx0KXtyZXR1cm4gbmV3IEJyKHt0eXBlOiJwaXBlIixpbjp0byhlKSxvdXQ6dH0pfWNvbnN0IERiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6dnIsWm9kQXJyYXk6d3IsWm9kQmFzZTY0OlZuLFpvZEJhc2U2NFVSTDpKbixab2RCaWdJbnQ6UnQsWm9kQmlnSW50Rm9ybWF0OkduLFpvZEJvb2xlYW46T3QsWm9kQ0lEUnY0OkJuLFpvZENJRFJ2NjpIbixab2RDVUlEOmpuLFpvZENVSUQyOk1uLFpvZENhdGNoOkxyLFpvZENvZGVjOkR0LFpvZENyZWRpdENhcmQ6aHIsWm9kQ3VzdG9tOkx0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpLZSxab2REYXRlOlhuLFpvZERlZmF1bHQ6WnIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOlNyLFpvZEUxNjQ6S24sWm9kRW1haWw6T24sWm9kRW1vamk6Wm4sWm9kRW51bTpzdCxab2RFeGFjdE9wdGlvbmFsOm5vLFpvZEZpbGU6RXIsWm9kRnVuY3Rpb246UXIsWm9kR1VJRDpSbixab2RJQkFOOmZyLFpvZElQdjQ6VW4sWm9kSVB2NjpGbixab2RJU09EYXRlOlB0LFpvZElTT0RhdGVUaW1lOkl0LFpvZElTT0R1cmF0aW9uOkN0LFpvZElTT1RpbWU6eHQsWm9kSW5zdGFuY2VPZjp0cyxab2RJbnRlcnNlY3Rpb246enIsWm9kSldUOlduLFpvZEtTVUlEOkxuLFpvZExhenk6S3IsWm9kTGl0ZXJhbDpDcixab2RNQUM6cHIsWm9kTWFwOlByLFpvZE5hTjpGcixab2ROYW5vSUQ6Tm4sWm9kTmV2ZXI6X3IsWm9kTm9uT3B0aW9uYWw6b28sWm9kTnVsbDpicixab2ROdWxsYWJsZTpScixab2ROdW1iZXI6QXQsWm9kTnVtYmVyRm9ybWF0OldlLFpvZE9iamVjdDpadCxab2RPcHRpb25hbDpNdCxab2RQaXBlOnF0LFpvZFByZWZhdWx0OmpyLFpvZFByZXByb2Nlc3M6QnIsWm9kUHJvbWlzZTpHcixab2RSZWFkb25seTpIcixab2RSZWNvcmQ6cnQsWm9kU2V0OnhyLFpvZFN0cmluZzpUdCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOkRyLFpvZFN5bWJvbDptcixab2RUZW1wbGF0ZUxpdGVyYWw6SnIsWm9kVHJhbnNmb3JtOkFyLFpvZFR1cGxlOlRyLFpvZFR5cGU6RSxab2RVTElEOnFuLFpvZFVSTDpFdCxab2RVVUlEOlBlLFpvZFVuZGVmaW5lZDpncixab2RVbmlvbjpOdCxab2RVbmtub3duOnlyLFpvZFZvaWQ6a3IsWm9kWElEOkRuLFpvZFhvcjokcixfWm9kU3RyaW5nOkFuLF9kZWZhdWx0Ok5yLF9mdW5jdGlvbjp5dCxhbnk6WW4sYXJyYXk6UCxiYXNlNjQ6WmEsYmFzZTY0dXJsOk5hLGJpZ2ludDpHYSxib29sZWFuOkwsY2F0Y2g6VXIsY2hlY2s6dmMsY2lkcnY0Ok9hLGNpZHJ2NjpSYSxjb2RlYzpmYyxjcmVkaXRDYXJkOk1hLGN1aWQ6emEsY3VpZDI6VGEsY3VycmVuY3lDb2RlOkJhLGN1c3RvbTpZcixkYXRlOnRjLGRlc2NyaWJlOnljLGRpc2NyaW1pbmF0ZWRVbmlvbjplbyxlMTY0OmphLGVtYWlsOm1hLGVtb2ppOiRhLGVudW06aWUsZXhhY3RPcHRpb25hbDpPcixmaWxlOmxjLGZsb2F0MzI6VmEsZmxvYXQ2NDpKYSxmdW5jdGlvbjp5dCxndWlkOmdhLGhhc2g6SGEsaGV4OkZhLGhvc3RuYW1lOlVhLGh0dHBVcmw6d2EsaWJhbjpxYSxpbnN0YW5jZW9mOmtjLGludDplbixpbnQzMjpLYSxpbnQ2NDpRYSxpbnRlcnNlY3Rpb246anQsaW52ZXJ0Q29kZWM6bWMsaXB2NDpDYSxpcHY2OkFhLGpzb246JGMsand0OkRhLGtleW9mOm5jLGtzdWlkOnhhLGxhenk6V3IsbGl0ZXJhbDpmLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOmljLG1hYzpFYSxtYXA6YWMsbWV0YTpfYyxuYW46aGMsbmFub2lkOlNhLG5hdGl2ZUVudW06dWMsbmV2ZXI6b3Qsbm9ub3B0aW9uYWw6cXIsbnVsbDpRbixudWxsYWJsZTp2dCxudWxsaXNoOmRjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYscGFydGlhbFJlY29yZDpzYyxwaXBlOnRuLHByZWZhdWx0Ok1yLHByZXByb2Nlc3M6cm8scHJvbWlzZTpiYyxyZWFkb25seTpWcixyZWNvcmQ6WixyZWZpbmU6WHIsc2V0OmNjLHN0cmljdE9iamVjdDpvYyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6TGEsc3RyaW5nYm9vbDp3YyxzdWNjZXNzOnBjLHN1cGVyUmVmaW5lOmVzLHN5bWJvbDpYYSx0ZW1wbGF0ZUxpdGVyYWw6Z2MsdHJhbnNmb3JtOnRvLHR1cGxlOklyLHVpbnQzMjpXYSx1aW50NjQ6WWEsdWxpZDpJYSx1bmRlZmluZWQ6YnQsdW5pb246QSx1bmtub3duOkQsdXJsOmthLHV1aWQ6YmEsdXVpZHY0OnZhLHV1aWR2Njp5YSx1dWlkdjc6X2Esdm9pZDplYyx4aWQ6UGEseG9yOnJjfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEJoPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBIaChlKXt0ZSh7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIFZoKCl7cmV0dXJuIHRlKCkuY3VzdG9tRXJyb3J9dmFyIEVvO0VvfHwoRW89e30pO2Z1bmN0aW9uIEpoKGUpe3JldHVybiBHaShJdCxlKX1mdW5jdGlvbiBMYihlKXtyZXR1cm4gUWkoUHQsZSl9ZnVuY3Rpb24gVWIoZSl7cmV0dXJuIFlpKHh0LGUpfWZ1bmN0aW9uIEZiKGUpe3JldHVybiBYaShDdCxlKX1jb25zdCBTYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpQdCxab2RJU09EYXRlVGltZTpJdCxab2RJU09EdXJhdGlvbjpDdCxab2RJU09UaW1lOnh0LGRhdGU6TGIsZGF0ZXRpbWU6SmgsZHVyYXRpb246RmIsdGltZTpVYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxTPXsuLi5EYiwuLi5NYixpc286U2N9LEJiPW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIEhiKGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uICR1KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIFZiKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gSmIoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpWYihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIEtiKGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBhIG9mIHMpe2NvbnN0IGk9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGEpO2kuc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6aS5lcnJvci5pc3N1ZXMsaW5wdXQ6YSxwYXRoOlthXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gUHMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgaT1QcyhhLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChpKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgYT1QcyhlW3NdLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2F9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBXYj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLEdiPW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBLdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShLdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5XYi5oYXModCk/S3Qobik6IUdiLmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoS3QpKX1mdW5jdGlvbiBTdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gUWIoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7Y29uc3QgaT1QcyhyW2FdLG5ldyBTZXQpO2lmKGk9PT1udWxsKWNvbnRpbnVlO2NvbnN0IHU9cy5nZXQoaSk7aWYodT09PXZvaWQgMCl7cy5zZXQoaSxhKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7YX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7dX1gLGlucHV0OnIscGF0aDpbYV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGE9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBpPTA7Zm9yKGNvbnN0IHUgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZSh1KS5zdWNjZXNzJiYrK2k+PWEpYnJlYWs7aTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7U3Uocyl9OyBmb3VuZCAke2l9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmaT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtTdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiB6dShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP1MuYW55KCk6bGUoZSx0KX1jb25zdCBZYj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIEtoKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIFMubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPUpiKHIsdCksYT1sZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsYSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxhfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiBTLm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIFMubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGE9PnR5cGVvZiBhPT0ic3RyaW5nIikpcmV0dXJuIFMuZW51bShyKTtjb25zdCBzPXIubWFwKGE9PlMubGl0ZXJhbChhKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTpTLnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIFMubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBhPXsuLi5lLHR5cGU6c307cmV0dXJuIEtoKGEsdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP1MubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTpTLnVuaW9uKHIpfWlmKCFuKXJldHVybiBTLmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPVMuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKFMuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayhTLnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayhTLnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayhTLmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2soUy5yZWdleChZYikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayhTLmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2soUy5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayhTLmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2soUy5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2soUy5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2soUy5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2soUy5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayhTLmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKFMuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKFMuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2soUy5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKFMuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKFMuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayhTLmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2soUy5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2soUy5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayhTLmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKFMudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKFMueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKFMua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP1MubnVtYmVyKCkuaW50KCk6Uy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPVMuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289Uy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxhPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGk9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP2xlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLGJdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IHY9bGUoYix0KTtpdChyLG0sYS5oYXMobSk/djp2Lm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyxiPU9iamVjdC5rZXlzKG0pLHY9W107Zm9yKGNvbnN0IHcgb2YgYil7Y29uc3QgJD1sZShtW3ddLHQpLE49Uy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKHcpKTt2LnB1c2goUy5sb29zZVJlY29yZChOLCQpKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2goUy5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLnYpLF8ubGVuZ3RoPT09MClvPVMub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCB3PVMuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCAkPTI7JDxfLmxlbmd0aDskKyspdz1TLmludGVyc2VjdGlvbih3LF9bJF0pO289d31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IHc9T2JqZWN0LmtleXMociksJD1iLm1hcChJPT5uZXcgUmVnRXhwKEkpKSxOPW87bz1vLmNoZWNrKEk9PntpZighSGUoSS52YWx1ZSkpcmV0dXJuO2NvbnN0IEc9W107Zm9yKGNvbnN0IG9lIG9mIE9iamVjdC5rZXlzKEkudmFsdWUpKXcuaW5jbHVkZXMob2UpfHwkLnNvbWUoSj0+Si50ZXN0KG9lKSl8fEcucHVzaChvZSk7Ry5sZW5ndGgmJkkuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkcsaW5wdXQ6SS52YWx1ZSxpbnN0Ok59KX0pfX1lbHNle2NvbnN0IG09Uy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289bS5zdHJpY3QoKTppP289bS5jYXRjaGFsbChpKTpvPW0ucGFzc3Rocm91Z2goKX1jb25zdCB1PWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsbD10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGQ9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZih1fHxsIT09dm9pZCAwfHxkIT09dm9pZCAwKXtsZXQgbTtpZih1KXtjb25zdCBiPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lczttPWxlKGIsdCl9bz1LYihvLHtrZXlTY2hlbWE6bSxtaW5Qcm9wZXJ0aWVzOmwsbWF4UHJvcGVydGllczpkfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9ci5tYXAobT0+bGUobSx0KSksdT0kdShpLGEpLGw9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6enUocyx0KSxkPVMudHVwbGUodSk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9cy5tYXAobT0+bGUobSx0KSksdT0kdShpLGEpLGw9enUoZS5hZGRpdGlvbmFsSXRlbXMsdCksZD1TLnR1cGxlKHUpO289bD9kLnJlc3QobCk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGE9bGUocyx0KTtsZXQgaT1TLmFycmF5KGEpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5tYXgoZS5tYXhJdGVtcykpLG89aX1lbHNlIG89Uy5hcnJheShTLmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89UWIobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/bGUoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIGxlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9TLmFueSgpOlMubmV2ZXIoKTtsZXQgbj1LaChlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgaT1lLmFueU9mLm1hcChsPT5sZShsLHQpKSx1PVMudW5pb24oaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBpPWUub25lT2YubWFwKGw9PmxlKGwsdCkpLHU9Uy54b3IoaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjpTLmFueSgpO2Vsc2V7bGV0IGk9bz9uOmxlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgdT1vPzA6MTtmb3IobGV0IGw9dTtsPGUuYWxsT2YubGVuZ3RoO2wrKylpPVMuaW50ZXJzZWN0aW9uKGksbGUoZS5hbGxPZltsXSx0KSk7bj1pfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49Uy5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj1TLnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBpIG9mIHMpaSBpbiBlJiYocltpXT1lW2ldKTtjb25zdCBhPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgaSBvZiBhKWkgaW4gZSYmKHJbaV09ZVtpXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYhS3QoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBpIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbaV0hPT12b2lkIDAmJihyW2ldPWVbaV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIUt0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgaSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVtpXSE9PXZvaWQgMCYmKHJbaV09ZVtpXSl9Zm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoZSkpQmIuaGFzKGkpfHxpdChyLGksZVtpXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gV2goZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89SGIobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/P3dlfTtyZXR1cm4gbGUobixzKX1mdW5jdGlvbiBHaChlKXtyZXR1cm4gdGEoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90OkEobi5vcHRpb25zKX19KX1mdW5jdGlvbiBYYihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBRKGUsdWUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gUWgoZSl7cmV0dXJuIFhiKGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBldihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT9RaChlKTplLmlufWZ1bmN0aW9uIFloKGUpe3JldHVybiB0YShlLHtwaXBlOnQ9PmV2KHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/Vih0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gWGgoZSl7cmV0dXJuIHRhKGUse3BpcGU6dD0+UWgodC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHR2KGUpe3JldHVybiB0aChUdCxlKX1mdW5jdGlvbiBudihlKXtyZXR1cm4gaWgoQXQsZSl9ZnVuY3Rpb24gb3YoZSl7cmV0dXJuIGhoKE90LGUpfWZ1bmN0aW9uIHJ2KGUpe3JldHVybiBtaChSdCxlKX1mdW5jdGlvbiBzdihlKXtyZXR1cm4gVGgoWG4sZSl9Y29uc3QgZWY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDpydixib29sZWFuOm92LGRhdGU6c3YsbnVtYmVyOm52LHN0cmluZzp0dn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUdT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOkRzLCRpbnB1dDpraSwkb3V0cHV0Ol9pLElOVkFMSUQ6JGksTkVWRVI6cXMsVGltZVByZWNpc2lvbjpXaSxab2RBbnk6dnIsWm9kQXJyYXk6d3IsWm9kQmFzZTY0OlZuLFpvZEJhc2U2NFVSTDpKbixab2RCaWdJbnQ6UnQsWm9kQmlnSW50Rm9ybWF0OkduLFpvZEJvb2xlYW46T3QsWm9kQ0lEUnY0OkJuLFpvZENJRFJ2NjpIbixab2RDVUlEOmpuLFpvZENVSUQyOk1uLFpvZENhdGNoOkxyLFpvZENvZGVjOkR0LFpvZENvbXBpbGVBc3luY0Vycm9yOlNpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnppLFpvZENyZWRpdENhcmQ6aHIsWm9kQ3VzdG9tOkx0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpLZSxab2REYXRlOlhuLFpvZERlZmF1bHQ6WnIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOlNyLFpvZEUxNjQ6S24sWm9kRW1haWw6T24sWm9kRW1vamk6Wm4sWm9kRW51bTpzdCxab2RFcnJvcjpGaCxab2RFeGFjdE9wdGlvbmFsOm5vLFpvZEZpbGU6RXIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBFb30sWm9kRnVuY3Rpb246UXIsWm9kR1VJRDpSbixab2RJQkFOOmZyLFpvZElQdjQ6VW4sWm9kSVB2NjpGbixab2RJU09EYXRlOlB0LFpvZElTT0RhdGVUaW1lOkl0LFpvZElTT0R1cmF0aW9uOkN0LFpvZElTT1RpbWU6eHQsWm9kSW5zdGFuY2VPZjp0cyxab2RJbnRlcnNlY3Rpb246enIsWm9kSXNzdWVDb2RlOkJoLFpvZEpXVDpXbixab2RLU1VJRDpMbixab2RMYXp5OktyLFpvZExpdGVyYWw6Q3IsWm9kTUFDOnByLFpvZE1hcDpQcixab2ROYU46RnIsWm9kTmFub0lEOk5uLFpvZE5ldmVyOl9yLFpvZE5vbk9wdGlvbmFsOm9vLFpvZE51bGw6YnIsWm9kTnVsbGFibGU6UnIsWm9kTnVtYmVyOkF0LFpvZE51bWJlckZvcm1hdDpXZSxab2RPYmplY3Q6WnQsWm9kT3B0aW9uYWw6TXQsWm9kUGlwZTpxdCxab2RQcmVmYXVsdDpqcixab2RQcmVwcm9jZXNzOkJyLFpvZFByb21pc2U6R3IsWm9kUmVhZG9ubHk6SHIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDpydCxab2RTZXQ6eHIsWm9kU3RyaW5nOlR0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6RHIsWm9kU3ltYm9sOm1yLFpvZFRlbXBsYXRlTGl0ZXJhbDpKcixab2RUcmFuc2Zvcm06QXIsWm9kVHVwbGU6VHIsWm9kVHlwZTpFLFpvZFVMSUQ6cW4sWm9kVVJMOkV0LFpvZFVVSUQ6UGUsWm9kVW5kZWZpbmVkOmdyLFpvZFVuaW9uOk50LFpvZFVua25vd246eXIsWm9kVm9pZDprcixab2RYSUQ6RG4sWm9kWG9yOiRyLF9ab2RTdHJpbmc6QW4sX2RlZmF1bHQ6TnIsX2Z1bmN0aW9uOnl0LGFueTpZbixhcnJheTpQLGJhc2U2NDpaYSxiYXNlNjR1cmw6TmEsYmlnaW50OkdhLGJvb2xlYW46TCxjYXRjaDpVcixjaGVjazp2YyxjaWRydjQ6T2EsY2lkcnY2OlJhLGNsb25lOlEsY29kZWM6ZmMsY29lcmNlOmVmLGNvbXBpbGU6VGksY29uZmlnOnRlLGNvcmU6RGgsY3JlZGl0Q2FyZDpNYSxjdWlkOnphLGN1aWQyOlRhLGN1cnJlbmN5Q29kZTpCYSxjdXN0b206WXIsZGF0ZTp0YyxkZWNvZGU6Y2EsZGVjb2RlQXN5bmM6bGEsZGVlcFBhcnRpYWw6R2gsZGVzY3JpYmU6eWMsZGlzY3JpbWluYXRlZFVuaW9uOmVvLGUxNjQ6amEsZW1haWw6bWEsZW1vamk6JGEsZW5jb2RlOmFhLGVuY29kZUFzeW5jOnVhLGVuZHNXaXRoOlNuLGVudW06aWUsZXhhY3RPcHRpb25hbDpPcixmaWxlOmxjLGZsYXR0ZW5FcnJvcjpXbyxmbG9hdDMyOlZhLGZsb2F0NjQ6SmEsZm9ybWF0RXJyb3I6R28sZnJvbUpTT05TY2hlbWE6V2gsZnVuY3Rpb246eXQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpoaSxnZXRFcnJvck1hcDpWaCxnbG9iYWxSZWdpc3RyeTp3ZSxndDpxZSxndGU6dmUsZ3VpZDpnYSxoYXNoOkhhLGhleDpGYSxob3N0bmFtZTpVYSxodHRwVXJsOndhLGliYW46cWEsaW5jbHVkZXM6d24saW5wdXQ6WWgsaW5zdGFuY2VvZjprYyxpbnQ6ZW4saW50MzI6S2EsaW50NjQ6UWEsaW50ZXJzZWN0aW9uOmp0LGludmVydENvZGVjOm1jLGlwdjQ6Q2EsaXB2NjpBYSxpc286U2MsanNvbjokYyxqd3Q6RGEsa2V5b2Y6bmMsa3N1aWQ6eGEsbGF6eTpXcixsZW5ndGg6U3QsbGl0ZXJhbDpmLGxvY2FsZXM6eWksbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6aWMsbG93ZXJjYXNlOl9uLGx0Ok1lLGx0ZTpiZSxtYWM6RWEsbWFwOmFjLG1heExlbmd0aDokdCxtYXhTaXplOmF0LG1lbW9pemVyOm9yLG1ldGE6X2MsbWltZTpUbixtaW5MZW5ndGg6VmUsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOm50LG5hbjpoYyxuYW5vaWQ6U2EsbmF0aXZlRW51bTp1YyxuZWdhdGl2ZTpjcixuZXZlcjpvdCxub25uZWdhdGl2ZTpscixub25vcHRpb25hbDpxcixub25wb3NpdGl2ZTp1cixub3JtYWxpemU6SW4sbnVsbDpRbixudWxsYWJsZTp2dCxudWxsaXNoOmRjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYsb3V0cHV0OlhoLG92ZXJ3cml0ZTpBZSxwYXJzZTpvYSxwYXJzZUFzeW5jOnJhLHBhcnRpYWxSZWNvcmQ6c2MscGlwZTp0bixwb3NpdGl2ZTphcixwcmVmYXVsdDpNcixwcmVwcm9jZXNzOnJvLHByZXR0aWZ5RXJyb3I6VXMscHJvbWlzZTpiYyxwcm9wZXJ0aWVzOnpuLHByb3BlcnR5OmRyLHJlYWRvbmx5OlZyLHJlY29yZDpaLHJlZmluZTpYcixyZWdleDp5bixyZWdleGVzOnRyLHJlZ2lzdHJ5OnJyLHNhZmVEZWNvZGU6cGEsc2FmZURlY29kZUFzeW5jOmZhLHNhZmVFbmNvZGU6ZGEsc2FmZUVuY29kZUFzeW5jOmhhLHNhZmVQYXJzZTpzYSxzYWZlUGFyc2VBc3luYzppYSxzZXQ6Y2Msc2V0RXJyb3JNYXA6SGgsc2l6ZTp3dCxzbHVnaWZ5OkVuLHN0YXJ0c1dpdGg6JG4sc3RyaWN0T2JqZWN0Om9jLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpMYSxzdHJpbmdib29sOndjLHN1Y2Nlc3M6cGMsc3VwZXJSZWZpbmU6ZXMsc3ltYm9sOlhhLHRlbXBsYXRlTGl0ZXJhbDpnYyx0b0pTT05TY2hlbWE6ZWEsdG9Mb3dlckNhc2U6eG4sdG9VcHBlckNhc2U6Q24sdG9ab2Q6RG8sdHJhbnNmb3JtOnRvLHRyZWVpZnlFcnJvcjpMcyx0cmltOlBuLHR1cGxlOklyLHVpbnQzMjpXYSx1aW50NjQ6WWEsdWxpZDpJYSx1bmRlZmluZWQ6YnQsdW5pb246QSx1bmtub3duOkQsdXBwZXJjYXNlOmtuLHVybDprYSx1dGlsOk1zLHV1aWQ6YmEsdXVpZHY0OnZhLHV1aWR2Njp5YSx1dWlkdjc6X2EsdmFsaWRhdGU6WW8sdmFsaWRhdGVBc3luYzpYbyx2b2lkOmVjLHdpdGhQYXJzZXI6SWkseGlkOlBhLHhvcjpyY30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxpdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOkRzLCRpbnB1dDpraSwkb3V0cHV0Ol9pLElOVkFMSUQ6JGksTkVWRVI6cXMsVGltZVByZWNpc2lvbjpXaSxab2RBbnk6dnIsWm9kQXJyYXk6d3IsWm9kQmFzZTY0OlZuLFpvZEJhc2U2NFVSTDpKbixab2RCaWdJbnQ6UnQsWm9kQmlnSW50Rm9ybWF0OkduLFpvZEJvb2xlYW46T3QsWm9kQ0lEUnY0OkJuLFpvZENJRFJ2NjpIbixab2RDVUlEOmpuLFpvZENVSUQyOk1uLFpvZENhdGNoOkxyLFpvZENvZGVjOkR0LFpvZENvbXBpbGVBc3luY0Vycm9yOlNpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnppLFpvZENyZWRpdENhcmQ6aHIsWm9kQ3VzdG9tOkx0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpLZSxab2REYXRlOlhuLFpvZERlZmF1bHQ6WnIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOlNyLFpvZEUxNjQ6S24sWm9kRW1haWw6T24sWm9kRW1vamk6Wm4sWm9kRW51bTpzdCxab2RFcnJvcjpGaCxab2RFeGFjdE9wdGlvbmFsOm5vLFpvZEZpbGU6RXIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBFb30sWm9kRnVuY3Rpb246UXIsWm9kR1VJRDpSbixab2RJQkFOOmZyLFpvZElQdjQ6VW4sWm9kSVB2NjpGbixab2RJU09EYXRlOlB0LFpvZElTT0RhdGVUaW1lOkl0LFpvZElTT0R1cmF0aW9uOkN0LFpvZElTT1RpbWU6eHQsWm9kSW5zdGFuY2VPZjp0cyxab2RJbnRlcnNlY3Rpb246enIsWm9kSXNzdWVDb2RlOkJoLFpvZEpXVDpXbixab2RLU1VJRDpMbixab2RMYXp5OktyLFpvZExpdGVyYWw6Q3IsWm9kTUFDOnByLFpvZE1hcDpQcixab2ROYU46RnIsWm9kTmFub0lEOk5uLFpvZE5ldmVyOl9yLFpvZE5vbk9wdGlvbmFsOm9vLFpvZE51bGw6YnIsWm9kTnVsbGFibGU6UnIsWm9kTnVtYmVyOkF0LFpvZE51bWJlckZvcm1hdDpXZSxab2RPYmplY3Q6WnQsWm9kT3B0aW9uYWw6TXQsWm9kUGlwZTpxdCxab2RQcmVmYXVsdDpqcixab2RQcmVwcm9jZXNzOkJyLFpvZFByb21pc2U6R3IsWm9kUmVhZG9ubHk6SHIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDpydCxab2RTZXQ6eHIsWm9kU3RyaW5nOlR0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6RHIsWm9kU3ltYm9sOm1yLFpvZFRlbXBsYXRlTGl0ZXJhbDpKcixab2RUcmFuc2Zvcm06QXIsWm9kVHVwbGU6VHIsWm9kVHlwZTpFLFpvZFVMSUQ6cW4sWm9kVVJMOkV0LFpvZFVVSUQ6UGUsWm9kVW5kZWZpbmVkOmdyLFpvZFVuaW9uOk50LFpvZFVua25vd246eXIsWm9kVm9pZDprcixab2RYSUQ6RG4sWm9kWG9yOiRyLF9ab2RTdHJpbmc6QW4sX2RlZmF1bHQ6TnIsX2Z1bmN0aW9uOnl0LGFueTpZbixhcnJheTpQLGJhc2U2NDpaYSxiYXNlNjR1cmw6TmEsYmlnaW50OkdhLGJvb2xlYW46TCxjYXRjaDpVcixjaGVjazp2YyxjaWRydjQ6T2EsY2lkcnY2OlJhLGNsb25lOlEsY29kZWM6ZmMsY29lcmNlOmVmLGNvbXBpbGU6VGksY29uZmlnOnRlLGNvcmU6RGgsY3JlZGl0Q2FyZDpNYSxjdWlkOnphLGN1aWQyOlRhLGN1cnJlbmN5Q29kZTpCYSxjdXN0b206WXIsZGF0ZTp0YyxkZWNvZGU6Y2EsZGVjb2RlQXN5bmM6bGEsZGVlcFBhcnRpYWw6R2gsZGVmYXVsdDpUdSxkZXNjcmliZTp5YyxkaXNjcmltaW5hdGVkVW5pb246ZW8sZTE2NDpqYSxlbWFpbDptYSxlbW9qaTokYSxlbmNvZGU6YWEsZW5jb2RlQXN5bmM6dWEsZW5kc1dpdGg6U24sZW51bTppZSxleGFjdE9wdGlvbmFsOk9yLGZpbGU6bGMsZmxhdHRlbkVycm9yOldvLGZsb2F0MzI6VmEsZmxvYXQ2NDpKYSxmb3JtYXRFcnJvcjpHbyxmcm9tSlNPTlNjaGVtYTpXaCxmdW5jdGlvbjp5dCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmhpLGdldEVycm9yTWFwOlZoLGdsb2JhbFJlZ2lzdHJ5OndlLGd0OnFlLGd0ZTp2ZSxndWlkOmdhLGhhc2g6SGEsaGV4OkZhLGhvc3RuYW1lOlVhLGh0dHBVcmw6d2EsaWJhbjpxYSxpbmNsdWRlczp3bixpbnB1dDpZaCxpbnN0YW5jZW9mOmtjLGludDplbixpbnQzMjpLYSxpbnQ2NDpRYSxpbnRlcnNlY3Rpb246anQsaW52ZXJ0Q29kZWM6bWMsaXB2NDpDYSxpcHY2OkFhLGlzbzpTYyxqc29uOiRjLGp3dDpEYSxrZXlvZjpuYyxrc3VpZDp4YSxsYXp5OldyLGxlbmd0aDpTdCxsaXRlcmFsOmYsbG9jYWxlczp5aSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDppYyxsb3dlcmNhc2U6X24sbHQ6TWUsbHRlOmJlLG1hYzpFYSxtYXA6YWMsbWF4TGVuZ3RoOiR0LG1heFNpemU6YXQsbWVtb2l6ZXI6b3IsbWV0YTpfYyxtaW1lOlRuLG1pbkxlbmd0aDpWZSxtaW5TaXplOkRlLG11bHRpcGxlT2Y6bnQsbmFuOmhjLG5hbm9pZDpTYSxuYXRpdmVFbnVtOnVjLG5lZ2F0aXZlOmNyLG5ldmVyOm90LG5vbm5lZ2F0aXZlOmxyLG5vbm9wdGlvbmFsOnFyLG5vbnBvc2l0aXZlOnVyLG5vcm1hbGl6ZTpJbixudWxsOlFuLG51bGxhYmxlOnZ0LG51bGxpc2g6ZGMsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6VixvdXRwdXQ6WGgsb3ZlcndyaXRlOkFlLHBhcnNlOm9hLHBhcnNlQXN5bmM6cmEscGFydGlhbFJlY29yZDpzYyxwaXBlOnRuLHBvc2l0aXZlOmFyLHByZWZhdWx0Ok1yLHByZXByb2Nlc3M6cm8scHJldHRpZnlFcnJvcjpVcyxwcm9taXNlOmJjLHByb3BlcnRpZXM6em4scHJvcGVydHk6ZHIscmVhZG9ubHk6VnIscmVjb3JkOloscmVmaW5lOlhyLHJlZ2V4OnluLHJlZ2V4ZXM6dHIscmVnaXN0cnk6cnIsc2FmZURlY29kZTpwYSxzYWZlRGVjb2RlQXN5bmM6ZmEsc2FmZUVuY29kZTpkYSxzYWZlRW5jb2RlQXN5bmM6aGEsc2FmZVBhcnNlOnNhLHNhZmVQYXJzZUFzeW5jOmlhLHNldDpjYyxzZXRFcnJvck1hcDpIaCxzaXplOnd0LHNsdWdpZnk6RW4sc3RhcnRzV2l0aDokbixzdHJpY3RPYmplY3Q6b2Msc3RyaW5nOmgsc3RyaW5nRm9ybWF0OkxhLHN0cmluZ2Jvb2w6d2Msc3VjY2VzczpwYyxzdXBlclJlZmluZTplcyxzeW1ib2w6WGEsdGVtcGxhdGVMaXRlcmFsOmdjLHRvSlNPTlNjaGVtYTplYSx0b0xvd2VyQ2FzZTp4bix0b1VwcGVyQ2FzZTpDbix0b1pvZDpEbyx0cmFuc2Zvcm06dG8sdHJlZWlmeUVycm9yOkxzLHRyaW06UG4sdHVwbGU6SXIsdWludDMyOldhLHVpbnQ2NDpZYSx1bGlkOklhLHVuZGVmaW5lZDpidCx1bmlvbjpBLHVua25vd246RCx1cHBlcmNhc2U6a24sdXJsOmthLHV0aWw6TXMsdXVpZDpiYSx1dWlkdjQ6dmEsdXVpZHY2OnlhLHV1aWR2NzpfYSx2YWxpZGF0ZTpZbyx2YWxpZGF0ZUFzeW5jOlhvLHZvaWQ6ZWMsd2l0aFBhcnNlcjpJaSx4aWQ6UGEseG9yOnJjLHo6VHV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksWWU9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsbnM9IjIuMCIsZWU9WXIoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSksdGY9QShbaCgpLEMoKS5pbnQoKV0pLG5mPWgoKTtzZSh7dHRsOkMoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpDKCkub3B0aW9uYWwoKX0pO2NvbnN0IGF2PWcoe3R0bDpDKCkub3B0aW9uYWwoKX0pLGN2PWcoe3Rhc2tJZDpoKCl9KSx6Yz1zZSh7cHJvZ3Jlc3NUb2tlbjp0Zi5vcHRpb25hbCgpLFtZZV06Y3Yub3B0aW9uYWwoKX0pLF9lPWcoe19tZXRhOnpjLm9wdGlvbmFsKCl9KSxzbz1fZS5leHRlbmQoe3Rhc2s6YXYub3B0aW9uYWwoKX0pLHV2PWU9PnNvLnNhZmVQYXJzZShlKS5zdWNjZXNzLGFlPWcoe21ldGhvZDpoKCkscGFyYW1zOl9lLmxvb3NlKCkub3B0aW9uYWwoKX0pLHplPWcoe19tZXRhOnpjLm9wdGlvbmFsKCl9KSxUZT1nKHttZXRob2Q6aCgpLHBhcmFtczp6ZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxjZT1zZSh7X21ldGE6emMub3B0aW9uYWwoKX0pLGlvPUEoW2goKSxDKCkuaW50KCldKSxvZj1nKHtqc29ucnBjOmYobnMpLGlkOmlvLC4uLmFlLnNoYXBlfSkuc3RyaWN0KCksSXU9ZT0+b2Yuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MscmY9Zyh7anNvbnJwYzpmKG5zKSwuLi5UZS5zaGFwZX0pLnN0cmljdCgpLGx2PWU9PnJmLnNhZmVQYXJzZShlKS5zdWNjZXNzLFRjPWcoe2pzb25ycGM6ZihucyksaWQ6aW8scmVzdWx0OmNlfSkuc3RyaWN0KCksX289ZT0+VGMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3M7dmFyIEY7KGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0aW9uQ2xvc2VkPS0zMmUzXT0iQ29ubmVjdGlvbkNsb3NlZCIsZVtlLlJlcXVlc3RUaW1lb3V0PS0zMjAwMV09IlJlcXVlc3RUaW1lb3V0IixlW2UuUGFyc2VFcnJvcj0tMzI3MDBdPSJQYXJzZUVycm9yIixlW2UuSW52YWxpZFJlcXVlc3Q9LTMyNjAwXT0iSW52YWxpZFJlcXVlc3QiLGVbZS5NZXRob2ROb3RGb3VuZD0tMzI2MDFdPSJNZXRob2ROb3RGb3VuZCIsZVtlLkludmFsaWRQYXJhbXM9LTMyNjAyXT0iSW52YWxpZFBhcmFtcyIsZVtlLkludGVybmFsRXJyb3I9LTMyNjAzXT0iSW50ZXJuYWxFcnJvciIsZVtlLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQ9LTMyMDQyXT0iVXJsRWxpY2l0YXRpb25SZXF1aXJlZCJ9KShGfHwoRj17fSkpO2NvbnN0IEljPWcoe2pzb25ycGM6ZihucyksaWQ6aW8ub3B0aW9uYWwoKSxlcnJvcjpnKHtjb2RlOkMoKS5pbnQoKSxtZXNzYWdlOmgoKSxkYXRhOkQoKS5vcHRpb25hbCgpfSl9KS5zdHJpY3QoKSxkdj1lPT5JYy5zYWZlUGFyc2UoZSkuc3VjY2Vzcyxwdj1BKFtvZixyZixUYyxJY10pO0EoW1RjLEljXSk7Y29uc3QgUGM9Y2Uuc3RyaWN0KCksaHY9emUuZXh0ZW5kKHtyZXF1ZXN0SWQ6aW8ub3B0aW9uYWwoKSxyZWFzb246aCgpLm9wdGlvbmFsKCl9KSx4Yz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczpodn0pLGZ2PWcoe3NyYzpoKCksbWltZVR5cGU6aCgpLm9wdGlvbmFsKCksc2l6ZXM6UChoKCkpLm9wdGlvbmFsKCksdGhlbWU6aWUoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLGFvPWcoe2ljb25zOlAoZnYpLm9wdGlvbmFsKCl9KSxfdD1nKHtuYW1lOmgoKSx0aXRsZTpoKCkub3B0aW9uYWwoKX0pLG9zPV90LmV4dGVuZCh7Li4uX3Quc2hhcGUsLi4uYW8uc2hhcGUsdmVyc2lvbjpoKCksd2Vic2l0ZVVybDpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKX0pLG12PWp0KGcoe2FwcGx5RGVmYXVsdHM6TCgpLm9wdGlvbmFsKCl9KSxaKGgoKSxEKCkpKSxndj1ybyhlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLGp0KGcoe2Zvcm06bXYub3B0aW9uYWwoKSx1cmw6ZWUub3B0aW9uYWwoKX0pLFooaCgpLEQoKSkub3B0aW9uYWwoKSkpLGJ2PXNlKHtsaXN0OmVlLm9wdGlvbmFsKCksY2FuY2VsOmVlLm9wdGlvbmFsKCkscmVxdWVzdHM6c2Uoe3NhbXBsaW5nOnNlKHtjcmVhdGVNZXNzYWdlOmVlLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnNlKHtjcmVhdGU6ZWUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksdnY9c2Uoe2xpc3Q6ZWUub3B0aW9uYWwoKSxjYW5jZWw6ZWUub3B0aW9uYWwoKSxyZXF1ZXN0czpzZSh7dG9vbHM6c2Uoe2NhbGw6ZWUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkseXY9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLGVlKS5vcHRpb25hbCgpLHNhbXBsaW5nOmcoe2NvbnRleHQ6ZWUub3B0aW9uYWwoKSx0b29sczplZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpndi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpidi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksZWUpLm9wdGlvbmFsKCl9KSxfdj1fZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOnl2LGNsaWVudEluZm86b3N9KSxrdj1hZS5leHRlbmQoe21ldGhvZDpmKCJpbml0aWFsaXplIikscGFyYW1zOl92fSksd3Y9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLGVlKS5vcHRpb25hbCgpLGxvZ2dpbmc6ZWUub3B0aW9uYWwoKSxjb21wbGV0aW9uczplZS5vcHRpb25hbCgpLHByb21wdHM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczpnKHtzdWJzY3JpYmU6TCgpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczp2di5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksZWUpLm9wdGlvbmFsKCl9KSwkdj1jZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOnd2LHNlcnZlckluZm86b3MsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksU3Y9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczp6ZS5vcHRpb25hbCgpfSkscnM9YWUuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczpfZS5vcHRpb25hbCgpfSksenY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOlYoQygpKSxtZXNzYWdlOlYoaCgpKX0pLFR2PWcoey4uLnplLnNoYXBlLC4uLnp2LnNoYXBlLHByb2dyZXNzVG9rZW46dGZ9KSxDYz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOlR2fSksSXY9X2UuZXh0ZW5kKHtjdXJzb3I6bmYub3B0aW9uYWwoKX0pLGNvPWFlLmV4dGVuZCh7cGFyYW1zOkl2Lm9wdGlvbmFsKCl9KSx1bz1jZS5leHRlbmQoe25leHRDdXJzb3I6bmYub3B0aW9uYWwoKX0pLFB2PWllKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLGxvPWcoe3Rhc2tJZDpoKCksc3RhdHVzOlB2LHR0bDpBKFtDKCksUW4oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOlYoQygpKSxzdGF0dXNNZXNzYWdlOlYoaCgpKX0pLEVjPWNlLmV4dGVuZCh7dGFzazpsb30pLHh2PXplLm1lcmdlKGxvKSxBbz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczp4dn0pLEFjPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczpfZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLE9jPWNlLm1lcmdlKGxvKSxSYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtjZS5sb29zZSgpO2NvbnN0IFpjPWNvLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLE5jPXVvLmV4dGVuZCh7dGFza3M6UChsbyl9KSxqYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxDdj1jZS5tZXJnZShsbyksc2Y9Zyh7dXJpOmgoKSxtaW1lVHlwZTpWKGgoKSksX21ldGE6WihoKCksRCgpKS5vcHRpb25hbCgpfSksYWY9c2YuZXh0ZW5kKHt0ZXh0OmgoKX0pLE1jPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksY2Y9c2YuZXh0ZW5kKHtibG9iOk1jfSkscG89aWUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLFV0PWcoe2F1ZGllbmNlOlAocG8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6Smgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSx1Zj1nKHsuLi5fdC5zaGFwZSwuLi5hby5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxtaW1lVHlwZTpWKGgoKSksc2l6ZTpWKEMoKSksYW5ub3RhdGlvbnM6VXQub3B0aW9uYWwoKSxfbWV0YTpWKHNlKHt9KSl9KSxFdj1nKHsuLi5fdC5zaGFwZSwuLi5hby5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246VihoKCkpLG1pbWVUeXBlOlYoaCgpKSxhbm5vdGF0aW9uczpVdC5vcHRpb25hbCgpLF9tZXRhOlYoc2Uoe30pKX0pLEF2PWNvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxsZj11by5leHRlbmQoe3Jlc291cmNlczpQKHVmKX0pLE92PWNvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksUnY9dW8uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKEV2KX0pLHFjPV9lLmV4dGVuZCh7dXJpOmgoKX0pLFp2PXFjLE52PWFlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOlp2fSksZGY9Y2UuZXh0ZW5kKHtjb250ZW50czpQKEEoW2FmLGNmXSkpfSksanY9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnplLm9wdGlvbmFsKCl9KSxNdj1xYyxxdj1hZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOk12fSksRHY9cWMsTHY9YWUuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOkR2fSksVXY9emUuZXh0ZW5kKHt1cmk6aCgpfSksRnY9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpVdn0pLEJ2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxyZXF1aXJlZDpWKEwoKSl9KSxIdj1nKHsuLi5fdC5zaGFwZSwuLi5hby5zaGFwZSxkZXNjcmlwdGlvbjpWKGgoKSksYXJndW1lbnRzOlYoUChCdikpLF9tZXRhOlYoc2Uoe30pKX0pLFZ2PWNvLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksSnY9dW8uZXh0ZW5kKHtwcm9tcHRzOlAoSHYpfSksS3Y9X2UuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6WihoKCksaCgpKS5vcHRpb25hbCgpfSksV3Y9YWUuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6S3Z9KSxEYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpVdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLExjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOk1jLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpVdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLFVjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOk1jLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpVdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLEd2PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6WihoKCksRCgpKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxwZj1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6QShbYWYsY2ZdKSxhbm5vdGF0aW9uczpVdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGhmPXVmLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxobz1BKFtEYyxMYyxVYyxoZixwZl0pLFF2PWcoe3JvbGU6cG8sY29udGVudDpob30pLFl2PWNlLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChRdil9KSxYdj1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnplLm9wdGlvbmFsKCl9KSxleT1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6TCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkwoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkwoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6TCgpLm9wdGlvbmFsKCl9KSx0eT1nKHt0YXNrU3VwcG9ydDppZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLEZjPWcoey4uLl90LnNoYXBlLC4uLmFvLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxlZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxlZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSkub3B0aW9uYWwoKSxhbm5vdGF0aW9uczpleS5vcHRpb25hbCgpLGV4ZWN1dGlvbjp0eS5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGZmPWNvLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2xpc3QiKX0pLG55PXVvLmV4dGVuZCh7dG9vbHM6UChGYyl9KSxzcz1jZS5leHRlbmQoe2NvbnRlbnQ6UChobykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6WihoKCksRCgpKS5vcHRpb25hbCgpLGlzRXJyb3I6TCgpLm9wdGlvbmFsKCl9KTtzcy5vcihjZS5leHRlbmQoe3Rvb2xSZXN1bHQ6RCgpfSkpO2NvbnN0IG95PXNvLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLG1mPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2NhbGwiKSxwYXJhbXM6b3l9KSxyeT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczp6ZS5vcHRpb25hbCgpfSk7Zyh7YXV0b1JlZnJlc2g6TCgpLmRlZmF1bHQoITApLGRlYm91bmNlTXM6QygpLmludCgpLm5vbm5lZ2F0aXZlKCkuZGVmYXVsdCgzMDApfSk7Y29uc3QgZ2Y9aWUoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLHN5PV9lLmV4dGVuZCh7bGV2ZWw6Z2Z9KSxpeT1hZS5leHRlbmQoe21ldGhvZDpmKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOnN5fSksYXk9emUuZXh0ZW5kKHtsZXZlbDpnZixsb2dnZXI6aCgpLm9wdGlvbmFsKCksZGF0YTpEKCl9KSxjeT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6YXl9KSx1eT1nKHtuYW1lOmgoKS5vcHRpb25hbCgpfSksbHk9Zyh7aGludHM6UCh1eSkub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLGR5PWcoe21vZGU6aWUoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSxweT1nKHt0eXBlOmYoInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmgoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDpQKGhvKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpMKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxoeT1lbygidHlwZSIsW0RjLExjLFVjXSksT289ZW8oInR5cGUiLFtEYyxMYyxVYyxHdixweV0pLGZ5PWcoe3JvbGU6cG8sY29udGVudDpBKFtPbyxQKE9vKV0pLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLG15PXNvLmV4dGVuZCh7bWVzc2FnZXM6UChmeSksbW9kZWxQcmVmZXJlbmNlczpseS5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpoKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDppZShbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOkMoKS5vcHRpb25hbCgpLG1heFRva2VuczpDKCkuaW50KCksc3RvcFNlcXVlbmNlczpQKGgoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTplZS5vcHRpb25hbCgpLHRvb2xzOlAoRmMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpkeS5vcHRpb25hbCgpfSksZ3k9YWUuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpteX0pLGJmPWNlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246VihpZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTpwbyxjb250ZW50Omh5fSksdmY9Y2UuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpWKGllKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTpwbyxjb250ZW50OkEoW09vLFAoT28pXSl9KSxieT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkwoKS5vcHRpb25hbCgpfSksdnk9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDppZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSx5eT1nKHt0eXBlOmllKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLF95PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLGt5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSx3eT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksJHk9QShbX3ksa3ldKSxTeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSx6eT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLFR5PUEoW1N5LHp5XSksSXk9QShbd3ksJHksVHldKSxQeT1BKFtJeSxieSx2eSx5eV0pLHh5PXNvLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlooaCgpLFB5KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksQ3k9c28uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSxFeT1BKFt4eSxDeV0pLEF5PWFlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpFeX0pLE95PXplLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxSeT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOk95fSksWnk9Y2UuZXh0ZW5kKHthY3Rpb246aWUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6cm8oZT0+ZT09PW51bGw/dm9pZCAwOmUsWihoKCksQShbaCgpLEMoKSxMKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSksTnk9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksank9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSxNeT1fZS5leHRlbmQoe3JlZjpBKFtqeSxOeV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlooaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxxeT1hZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOk15fSksRHk9Y2UuZXh0ZW5kKHtjb21wbGV0aW9uOnNlKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOlYoQygpLmludCgpKSxoYXNNb3JlOlYoTCgpKX0pfSksTHk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxVeT1hZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOl9lLm9wdGlvbmFsKCl9KSxGeT1jZS5leHRlbmQoe3Jvb3RzOlAoTHkpfSksQnk9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6emUub3B0aW9uYWwoKX0pO0EoW3JzLGt2LHF5LGl5LFd2LFZ2LEF2LE92LE52LHF2LEx2LG1mLGZmLEFjLFJjLFpjLGpjXSk7QShbeGMsQ2MsU3YsQnksQW9dKTtBKFtQYyxiZix2ZixaeSxGeSxPYyxOYyxFY10pO0EoW3JzLGd5LEF5LFV5LEFjLFJjLFpjLGpjXSk7QShbeGMsQ2MsY3ksRnYsanYscnksWHYsQW8sUnldKTtBKFtQYywkdixEeSxZdixKdixsZixSdixkZixzcyxueSxPYyxOYyxFY10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PUYuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgSHkoci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgSHkgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihGLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gUWUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gUHUoZSl7Y29uc3Qgbj1OYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89amIobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiB4dShlLHQpe2NvbnN0IG49TGgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBWeT02ZTQ7Y2xhc3MgSnl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoeGMsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKENjLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihycyxuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEFjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFJjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgaTtmb3IoO2k9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoaS50eXBlPT09InJlc3BvbnNlInx8aS50eXBlPT09ImVycm9yIil7Y29uc3QgdT1pLm1lc3NhZ2UsbD11LmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxpLnR5cGU9PT0icmVzcG9uc2UiKWQodSk7ZWxzZXtjb25zdCBtPXUsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09aS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGkubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFhKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighUWUoYS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoUWUoYS5zdGF0dXMpKXtjb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uaSxfbWV0YTp7Li4uaS5fbWV0YSxbWWVdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihaYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGpjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKFFlKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihGLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKEYuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGEpPT57cj8uKHMsYSksX28ocyl8fGR2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6SXUocyk/dGhpcy5fb25yZXF1ZXN0KHMsYSk6bHYocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoRi5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bWWVdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOkYuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGEpO2NvbnN0IGk9dXYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLHU9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDphLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooRi5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IF89di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBfJiZ1JiZhd2FpdCB1LnVwZGF0ZVRhc2tTdGF0dXMoXywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6dSx0YXNrUmVxdWVzdGVkVHRsOmk/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpGLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWEmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgYT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxpPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihpJiZhJiZpLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaCh1KXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxhKHUpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksX28odCkpbyh0KTtlbHNle2NvbnN0IGE9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oYSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKF9vKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgYT10LnJlc3VsdDtpZihhLnRhc2smJnR5cGVvZiBhLnRhc2s9PSJvYmplY3QiKXtjb25zdCBpPWEudGFzazt0eXBlb2YgaS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGkudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksX28odCkpcih0KTtlbHNle2NvbnN0IGE9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoYSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChhKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6YSBpbnN0YW5jZW9mIGo/YTpuZXcgaihGLkludGVybmFsRXJyb3IsU3RyaW5nKGEpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBhPWF3YWl0IHRoaXMucmVxdWVzdCh0LEVjLG8pO2lmKGEudGFzaylzPWEudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6YS50YXNrfTtlbHNlIHRocm93IG5ldyBqKEYuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazppfSxRZShpLnN0YXR1cykpe2kuc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06aS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooRi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9Omkuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooRi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGkuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IHU9aS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLHUpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGEpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjphIGluc3RhbmNlb2Ygaj9hOm5ldyBqKEYuSW50ZXJuYWxFcnJvcixTdHJpbmcoYSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmEsdGFzazppLHJlbGF0ZWRUYXNrOnV9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09ST0+e2QoSSl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksaSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goSSl7bShJKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksaSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOml9KSx1JiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtZZV06dX19KTtjb25zdCBfPUk9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKEkpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBHPUkgaW5zdGFuY2VvZiBqP0k6bmV3IGooRi5SZXF1ZXN0VGltZW91dCxTdHJpbmcoSSkpO2QoRyl9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsST0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChJKTt0cnl7Y29uc3QgRz1MaChuLEkucmVzdWx0KTtHLnN1Y2Nlc3M/bChHLmRhdGEpOmQoRy5lcnJvcil9Y2F0Y2goRyl7ZChHKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntfKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IHc9bz8udGltZW91dD8/VnksJD0oKT0+XyhqLmZyb21FcnJvcihGLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6d30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYix3LG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBOPXU/LnRhc2tJZDtpZihOKXtjb25zdCBJPUc9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTtvZT9vZShHKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsSSksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKE4se3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEc9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEcpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YX0pLmNhdGNoKEk9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEkpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxPYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sTmMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sQ3Ysbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBpPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbWWVdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTppLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGk9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihpPXsuLi5pLHBhcmFtczp7Li4uaS5wYXJhbXMsX21ldGE6ey4uLmkucGFyYW1zPy5fbWV0YXx8e30sW1llXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoaSxuKS5jYXRjaCh1PT50aGlzLl9vbmVycm9yKHUpKX0pO3JldHVybn1sZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbWWVdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGEsbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPVB1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGE9eHUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oYSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPVB1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPXh1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZJdShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxhPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2E/KGEobmV3IGooRi5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihGLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgYT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoYSkscyhuZXcgaihGLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxhKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxhLG4pO2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoaSl7Y29uc3QgdT1Bby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOml9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxRZShpLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxhKT0+e2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWkpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihRZShpLnN0YXR1cykpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2kuc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGEsbik7Y29uc3QgdT1hd2FpdCBvLmdldFRhc2socixuKTtpZih1KXtjb25zdCBsPUFvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6dX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLFFlKHUuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIEN1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBLeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBhPW5bcl07Q3UoYSkmJkN1KHMpP25bcl09ey4uLmEsLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIFd5IGV4dGVuZHMgSnl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8sYT0+e2xldCBpPWEucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsaSkscy5vbkhhbmRsZXI/LihpKTtmb3IobGV0IHUgb2ZbLi4ucy5saXN0ZW5lcnNdKXUoaSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIEd5PSIyMDI2LTAxLTI2IixReT0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIFl5e2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1wdi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PVF5JiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgWHk9QShbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksbm49QShbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLGVfPUEoW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLHRfPVooZV8uZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksQShbaCgpLGJ0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIG5fPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLG9fPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxyXz1nKHtpc0Vycm9yOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIEJjPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLEhjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBzXz1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksaV89Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLGFfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxjXz1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLHVfPWcoe3ZhcmlhYmxlczp0Xy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOmNfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxsXz1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtaKGgoKSxEKCkpO3ZhciBFdT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIGRfPWcoe2V4cGVyaW1lbnRhbDpaKGgoKSxaKGgoKSxZbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOkhjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpCYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpFdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6RXUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxwXz1nKHtleHBlcmltZW50YWw6WihoKCksWihoKCksWW4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAobm4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6QmMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOkhjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTpubi5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBoXz1nKHttb2RlOm5uLmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxmXz1BKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UChmXykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpvdCgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6b3QoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChBKFtwZixoZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAoaG8pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpCYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOkhjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIG1fPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOnNzLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSkseWY9Zyh7dG9vbEluZm86Zyh7aWQ6aW8ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOkZjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOlh5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6dV8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOm5uLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChubikub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkEoW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0OkEoW0MoKSxidCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEEoW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOkEoW0MoKSxidCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06QShbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLGdfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOnlmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAoaG8pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpaKGgoKSxEKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86b3MuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOnBfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBiXz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOm9zLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6ZF8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6eWYuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksdl89e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIEF1KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0odl8pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IFZmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5pdiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBPdShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGE9cy5wYXRoPy5tYXAoaT0+dHlwZW9mIGk9PSJvYmplY3QiP2kua2V5OmkpLmpvaW4oIi4iKTtyZXR1cm4gYT9gJHthfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24geV8oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gX18oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIGtfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgVmMgZXh0ZW5kcyBXeXtfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6c18sdG9vbGlucHV0cGFydGlhbDppXyx0b29scmVzdWx0Om1fLHRvb2xjYW5jZWxsZWQ6YV8saG9zdGNvbnRleHRjaGFuZ2VkOmdffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFWYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8dGUoe2ppdGxlc3M6ITB9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHJzLHI9Pihjb25zb2xlLmxvZygiUmVjZWl2ZWQgcGluZzoiLHIucGFyYW1zKSx7fSkpLHRoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHZvaWQgMCl9cmVnaXN0ZXJDYXBhYmlsaXRpZXModCl7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBjYXBhYmlsaXRpZXMgYWZ0ZXIgdHJhbnNwb3J0IGlzIGVzdGFibGlzaGVkIik7dGhpcy5fY2FwYWJpbGl0aWVzPUt5KHRoaXMuX2NhcGFiaWxpdGllcyx0KX1yZWdpc3RlclRvb2wodCxuLG8pe2lmKHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XSl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGApO2xldCByPXRoaXMscz0oKT0+e3IuX2luaXRpYWxpemVkU2VudCYmci5fY2FwYWJpbGl0aWVzLnRvb2xzPy5saXN0Q2hhbmdlZCYmci5zZW5kVG9vbExpc3RDaGFuZ2VkKCl9LGE9bi5pbnB1dFNjaGVtYSE9PXZvaWQgMCxpPXt0aXRsZTpuLnRpdGxlLGRlc2NyaXB0aW9uOm4uZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6bi5pbnB1dFNjaGVtYSxvdXRwdXRTY2hlbWE6bi5vdXRwdXRTY2hlbWEsYW5ub3RhdGlvbnM6bi5hbm5vdGF0aW9ucyxfbWV0YTpuLl9tZXRhLGVuYWJsZWQ6ITAsZW5hYmxlKCl7dGhpcy5lbmFibGVkPSEwLHMoKX0sZGlzYWJsZSgpe3RoaXMuZW5hYmxlZD0hMSxzKCl9LHVwZGF0ZSh1KXtPYmplY3QuYXNzaWduKHRoaXMsdSkscygpfSxyZW1vdmUoKXtyLl9yZWdpc3RlcmVkVG9vbHNbdF09PT1pJiYoZGVsZXRlIHIuX3JlZ2lzdGVyZWRUb29sc1t0XSxzKCkpfSxoYW5kbGVyOmFzeW5jKHUsbCk9PntpZighaS5lbmFibGVkKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgZGlzYWJsZWRgKTtsZXQgZDtpZihhKXtsZXQgbT1pLmlucHV0U2NoZW1hLGI9bT9hd2FpdCBPdShtLHU/P3t9LGBJbnZhbGlkIGlucHV0IGZvciB0b29sICR7dH06IGApOnU/P3t9O2Q9YXdhaXQgbyhiLGwpfWVsc2UgZD1hd2FpdCBvKGwpO3JldHVybiBpLm91dHB1dFNjaGVtYSYmIWQuaXNFcnJvciYmKGQuc3RydWN0dXJlZENvbnRlbnQ9YXdhaXQgT3UoaS5vdXRwdXRTY2hlbWEsZC5zdHJ1Y3R1cmVkQ29udGVudCxgSW52YWxpZCBvdXRwdXQgZm9yIHRvb2wgJHt0fTogYCkpLGR9fTtyZXR1cm4gdGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdPWksIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyYmIXRoaXMudHJhbnNwb3J0JiZ0aGlzLnJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHt0b29sczp7bGlzdENoYW5nZWQ6ITB9fSksdGhpcy5lbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpLHMoKSxpfV90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMTtlbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpe3RoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkfHwodGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vbmNhbGx0b29sPWFzeW5jKHQsbik9PntsZXQgbz10aGlzLl9yZWdpc3RlcmVkVG9vbHNbdC5uYW1lXTtpZighbyl0aHJvdyBFcnJvcihgVG9vbCAke3QubmFtZX0gbm90IGZvdW5kYCk7cmV0dXJuIG8uaGFuZGxlcih0LmFyZ3VtZW50cyxuKX0sdGhpcy5vbmxpc3R0b29scz1hc3luYyh0LG4pPT4oe3Rvb2xzOmF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHRoaXMuX3JlZ2lzdGVyZWRUb29scykuZmlsdGVyKChbbyxyXSk9PnIuZW5hYmxlZCkubWFwKGFzeW5jKFtvLHJdKT0+e2xldCBzPXtuYW1lOm8sdGl0bGU6ci50aXRsZSxkZXNjcmlwdGlvbjpyLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOnIuaW5wdXRTY2hlbWE/YXdhaXQgQXUoci5pbnB1dFNjaGVtYSwiaW5wdXQiKTp7dHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnt9fX07cmV0dXJuIHIub3V0cHV0U2NoZW1hJiYocy5vdXRwdXRTY2hlbWE9YXdhaXQgQXUoci5vdXRwdXRTY2hlbWEsIm91dHB1dCIpKSxyLmFubm90YXRpb25zJiYocy5hbm5vdGF0aW9ucz1yLmFubm90YXRpb25zKSxyLl9tZXRhJiYocy5fbWV0YT1yLl9tZXRhKSxzfSkpfSkpfWFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQodD17fSl7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRUb29sTGlzdENoYW5nZWQiKSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIscGFyYW1zOnR9KX1nZXRIb3N0Q2FwYWJpbGl0aWVzKCl7cmV0dXJuIHRoaXMuX2hvc3RDYXBhYmlsaXRpZXN9Z2V0SG9zdFZlcnNpb24oKXtyZXR1cm4gdGhpcy5faG9zdEluZm99Z2V0SG9zdENvbnRleHQoKXtyZXR1cm4gdGhpcy5faG9zdENvbnRleHR9Z2V0IG9udG9vbGlucHV0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiKX1zZXQgb250b29saW5wdXQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIsdCl9Z2V0IG9udG9vbGlucHV0cGFydGlhbCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIpfXNldCBvbnRvb2xpbnB1dHBhcnRpYWwodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiLHQpfWdldCBvbnRvb2xyZXN1bHQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiKX1zZXQgb250b29scmVzdWx0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iix0KX1nZXQgb250b29sY2FuY2VsbGVkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIil9c2V0IG9udG9vbGNhbmNlbGxlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIsdCl9Z2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiKX1zZXQgb25ob3N0Y29udGV4dGNoYW5nZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdCl9X29udGVhcmRvd247Z2V0IG9udGVhcmRvd24oKXtyZXR1cm4gdGhpcy5fb250ZWFyZG93bn1zZXQgb250ZWFyZG93bih0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9udGVhcmRvd24iLHRoaXMuX29udGVhcmRvd24sdCksdGhpcy5fb250ZWFyZG93bj10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGxfLChuLG8pPT57aWYoIXRoaXMuX29udGVhcmRvd24pdGhyb3cgRXJyb3IoIk5vIG9udGVhcmRvd24gaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb250ZWFyZG93bihuLnBhcmFtcyxvKX0pfV9vbmNhbGx0b29sO2dldCBvbmNhbGx0b29sKCl7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2x9c2V0IG9uY2FsbHRvb2wodCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmNhbGx0b29sIix0aGlzLl9vbmNhbGx0b29sLHQpLHRoaXMuX29uY2FsbHRvb2w9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihtZiwobixvKT0+e2lmKCF0aGlzLl9vbmNhbGx0b29sKXRocm93IEVycm9yKCJObyBvbmNhbGx0b29sIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2wobi5wYXJhbXMsbyl9KX1fb25saXN0dG9vbHM7Z2V0IG9ubGlzdHRvb2xzKCl7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzfXNldCBvbmxpc3R0b29scyh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9ubGlzdHRvb2xzIix0aGlzLl9vbmxpc3R0b29scyx0KSx0aGlzLl9vbmxpc3R0b29scz10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGZmLChuLG8pPT57aWYoIXRoaXMuX29ubGlzdHRvb2xzKXRocm93IEVycm9yKCJObyBvbmxpc3R0b29scyBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmxpc3R0b29scyhuLnBhcmFtcyxvKX0pfWFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodCl7c3dpdGNoKHQpe2Nhc2Uic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSI6aWYoIXRoaXMuX2hvc3RDYXBhYmlsaXRpZXM/LnNhbXBsaW5nKXRocm93IEVycm9yKGBIb3N0IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke3R9KWApO2JyZWFrfX1hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkodCl7c3dpdGNoKHQpe2Nhc2UidG9vbHMvY2FsbCI6Y2FzZSJ0b29scy9saXN0IjppZighdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKXRocm93IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhcGFiaWxpdHkgKHJlcXVpcmVkIGZvciAke3R9KWApO3JldHVybjtjYXNlInBpbmciOmNhc2UidWkvcmVzb3VyY2UtdGVhcmRvd24iOnJldHVybjtkZWZhdWx0OnRocm93IEVycm9yKGBObyBoYW5kbGVyIGZvciBtZXRob2QgJHt0fSByZWdpc3RlcmVkYCl9fWFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodCl7fWFzc2VydFRhc2tDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFzayBoYW5kbGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzeW5jIGNhbGxTZXJ2ZXJUb29sKHQsbil7aWYodGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNhbGxTZXJ2ZXJUb29sIiksdHlwZW9mIHQ9PSJzdHJpbmciKXRocm93IEVycm9yKGBjYWxsU2VydmVyVG9vbCgpIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgYnV0IHJlY2VpdmVkIGEgc3RyaW5nICgiJHt0fSIpLiBEaWQgeW91IG1lYW46IGNhbGxTZXJ2ZXJUb29sKHsgbmFtZTogIiR7dH0iLCBhcmd1bWVudHM6IHsgLi4uIH0gfSk/YCk7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0b29scy9jYWxsIixwYXJhbXM6dH0sc3Mse29ucHJvZ3Jlc3M6KCk9Pnt9LHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6ITAsLi4ubn0pfWFzeW5jIHJlYWRTZXJ2ZXJSZXNvdXJjZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVhZFNlcnZlclJlc291cmNlIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9yZWFkIixwYXJhbXM6dH0sZGYsbil9YXN5bmMgbGlzdFNlcnZlclJlc291cmNlcyh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgibGlzdFNlcnZlclJlc291cmNlcyIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvbGlzdCIscGFyYW1zOnR9LGxmLG4pfWFzeW5jIGNyZWF0ZVNhbXBsaW5nTWVzc2FnZSh0LG4pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjcmVhdGVTYW1wbGluZ01lc3NhZ2UiKTtsZXQgbz10LnRvb2xzP3ZmOmJmO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIscGFyYW1zOnR9LG8sbil9c2VuZE1lc3NhZ2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRNZXNzYWdlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL21lc3NhZ2UiLHBhcmFtczp0fSxyXyxuKX1zZW5kTG9nKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL21lc3NhZ2UiLHBhcmFtczp0fSl9dXBkYXRlTW9kZWxDb250ZXh0KHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJ1cGRhdGVNb2RlbENvbnRleHQiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiLHBhcmFtczp0fSxQYyxuKX1vcGVuTGluayh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgib3BlbkxpbmsiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvb3Blbi1saW5rIixwYXJhbXM6dH0sbl8sbil9c2VuZE9wZW5MaW5rPXRoaXMub3Blbkxpbms7ZG93bmxvYWRGaWxlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJkb3dubG9hZEZpbGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvZG93bmxvYWQtZmlsZSIscGFyYW1zOnR9LG9fLG4pfXJlcXVlc3RUZWFyZG93bih0PXt9KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIixwYXJhbXM6dH0pfXJlcXVlc3REaXNwbGF5TW9kZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVxdWVzdERpc3BsYXlNb2RlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIixwYXJhbXM6dH0saF8sbil9c2VuZFNpemVDaGFuZ2VkKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIscGFyYW1zOnR9KX1zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpe2xldCB0PSExLG49MCxvPTAscj0oKT0+e3R8fCh0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3Q9ITE7bGV0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9YS5zdHlsZS5oZWlnaHQ7YS5zdHlsZS5oZWlnaHQ9Im1heC1jb250ZW50IjtsZXQgdT1NYXRoLmNlaWwoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO2Euc3R5bGUuaGVpZ2h0PWk7bGV0IGw9TWF0aC5jZWlsKHdpbmRvdy5pbm5lcldpZHRoKTsobCE9PW58fHUhPT1vKSYmKG49bCxvPXUsdGhpcy5zZW5kU2l6ZUNoYW5nZWQoe3dpZHRoOmwsaGVpZ2h0OnV9KSl9KSl9O3IoKTtsZXQgcz1uZXcgUmVzaXplT2JzZXJ2ZXIocik7cmV0dXJuIHMub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHMub2JzZXJ2ZShkb2N1bWVudC5ib2R5KSwoKT0+cy5kaXNjb25uZWN0KCl9YXN5bmMgY29ubmVjdCh0PW5ldyBZeSh3aW5kb3cucGFyZW50LHdpbmRvdy5wYXJlbnQpLG4pe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJBcHAgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyBhZ2Fpbi4iKTt0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITEsYXdhaXQgc3VwZXIuY29ubmVjdCh0KTt0cnl7bGV0IG89YXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2luaXRpYWxpemUiLHBhcmFtczp7YXBwQ2FwYWJpbGl0aWVzOnRoaXMuX2NhcGFiaWxpdGllcyxhcHBJbmZvOnRoaXMuX2FwcEluZm8scHJvdG9jb2xWZXJzaW9uOkd5fX0sYl8sbik7aWYobz09PXZvaWQgMCl0aHJvdyBFcnJvcihgU2VydmVyIHNlbnQgaW52YWxpZCBpbml0aWFsaXplIHJlc3VsdDogJHtvfWApO3RoaXMuX2hvc3RDYXBhYmlsaXRpZXM9by5ob3N0Q2FwYWJpbGl0aWVzLHRoaXMuX2hvc3RJbmZvPW8uaG9zdEluZm8sdGhpcy5faG9zdENvbnRleHQ9by5ob3N0Q29udGV4dCxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIn0pLHRoaXMuX2luaXRpYWxpemVkU2VudD0hMCx0aGlzLm9wdGlvbnM/LmF1dG9SZXNpemUmJnRoaXMuc2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsb3NlKCksb319fWxldCBSdT0iIjtjb25zdCBfZj0oZSx0LG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT0+e2lmKCFlKXJldHVybjsoZS50aGVtZT09PSJsaWdodCJ8fGUudGhlbWU9PT0iZGFyayIpJiZ0LmFwcGx5RG9jdW1lbnRUaGVtZShlLnRoZW1lKTtjb25zdCBvPWUuc3R5bGVzPy52YXJpYWJsZXM7byYmdHlwZW9mIG89PSJvYmplY3QiJiZ0LmFwcGx5SG9zdFN0eWxlVmFyaWFibGVzKG8pO2NvbnN0IHI9ZS5zdHlsZXM/LmNzcz8uZm9udHM7dHlwZW9mIHI9PSJzdHJpbmciJiZyJiZyIT09UnUmJih0LmFwcGx5SG9zdEZvbnRzKHIpLFJ1PXIpO2NvbnN0IHM9ZS5zYWZlQXJlYUluc2V0cztpZihzKWZvcihjb25zdCBhIG9mWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSl7Y29uc3QgaT1OdW1iZXIoc1thXT8/MCk7bi5zdHlsZS5zZXRQcm9wZXJ0eShgLS1pbnNldC0ke2F9YCxgJHtOdW1iZXIuaXNGaW5pdGUoaSkmJmk+MD9pOjB9cHhgKX19LEVlPW5ldyBWYyh7bmFtZToiaG90ZWwtc3RvcmVmcm9udCIsdmVyc2lvbjoiMS4wLjAifSx7b3BlbkxpbmtzOnt9LGF2YWlsYWJsZURpc3BsYXlNb2RlczpbImlubGluZSIsImZ1bGxzY3JlZW4iXX0pLGtmPXthcHBseURvY3VtZW50VGhlbWU6eV8sYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6X18sYXBwbHlIb3N0Rm9udHM6a199LHBlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGM9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IFJlPSIiLGZzPSIiLEpjPXt9LHdmPSExLCRmPSIiLFQ9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LFk9MTtjb25zdCBadT01O2xldCBYPW51bGwsa3Q9W10sVWU9IiIsaGU9W10scT1udWxsLFJvPTA7Y29uc3Qgd189bmV3IFNldChbImZvcmdldFByZWZlcmVuY2VzIiwiYWRkVG9UcmlwIiwiY2xlYXJUcmlwIiwicmVxdWVzdEJvb2tpbmciLCJjYW5jZWxCb29raW5nIiwiY2hhbmdlQm9va2luZyIsInNpZ25JbiIsInNpZ25PdXQiXSksb249ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtyZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9gaG90ZWw6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BleHRyYXM6Ym9va2luZzoke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YGV4dHJhczoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyJ8fHQ9PT0icG9saWN5LW1pc3NpbmciP2Bwb2xpY3k6JHtlLmhvdGVsPy5pZD8/IiJ9OiR7ZS50b3BpYz8/IiJ9YDp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij9gY2FuY2VsOiR7ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iY2hhbmdlLXByZXZpZXciP2BjaGFuZ2U6JHtlLmNvbmZpcm1hdGlvbkNvZGU/P2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImRlc3RpbmF0aW9ucyI/YGRlc3RpbmF0aW9uczoke2Uuc2NvcGU/Lm5hbWU/PyIifWA6dD09PSJob3RlbHMifHx0PT09Im5vLWhvdGVscyI/YGhvdGVsczoke2UuYXNrPy5jaXR5Pz8iIn06JHtlLmFzaz8ucXVlcnk/P2UucXVlcnk/PyIifWA6dH0sd289ZT0+eyFxfHxTXy5oYXMoU3RyaW5nKHEudmlldykpfHxvbihlKSE9PW9uKHEpJiYoaGU9Wy4uLmhlLHtwYXlsb2FkOnEsbGFiZWw6el8ocSksdmVyc2lvbjpSb31dLnNsaWNlKC02KSl9LCRfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbHMifHx0PT09ImRlc3RpbmF0aW9ucyJ8fHQ9PT0ibm8taG90ZWxzIiYmZS5hc2spJiZlLmFzaylyZXR1cm57a2V5OiJsaXN0SG90ZWxzIixhcmdzOnsuLi5lLmFza319O2lmKHQ9PT0iY29tcGFyaXNvbiImJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5zKSlyZXR1cm57a2V5OiJjb21wYXJlIixhcmdzOnsuLi5uLC4uLmUudGl0bGU/e3RpdGxlOmUudGl0bGV9Ont9LC4uLmUucmVjb21tZW5kZWQ/e3JlY29tbWVuZGVkOmUucmVjb21tZW5kZWR9Ont9LGVudHJpZXM6ZS5jb2x1bW5zLm1hcChvPT4oe2hvdGVsOm8uaG90ZWw/LmlkLC4uLm8uYmVzdEZvcj97YmVzdEZvcjpvLmJlc3RGb3J9Ont9LC4uLm8ucHJvcz8ubGVuZ3RoP3twcm9zOm8ucHJvc306e30sLi4uby5jb25zPy5sZW5ndGg/e2NvbnM6by5jb25zfTp7fX0pKX19O2lmKCh0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyIpJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJnZXRIb3RlbCIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5uLC4uLmUucm9vbXNfd2FudGVkP3tyb29tczplLnJvb21zX3dhbnRlZH06e319fTtpZih0PT09ImV4dHJhcyImJmUuZm9yQm9va2luZylyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntib29raW5nOmUuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfX07aWYodD09PSJleHRyYXMiJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm59fTtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJue2tleToiaXRpbmVyYXJ5IixhcmdzOnt0aXRsZTplLnRpdGxlLC4uLm4sZGF5czooZS5kYXlzPz9bXSkubWFwKG89Pih7bGFiZWw6by5sYWJlbCwuLi5vLm5vdGU/e25vdGU6by5ub3RlfTp7fSxpdGVtczooby5pdGVtcz8/W10pLm1hcChyPT5yLmlkKX0pKX19fSxOdT1lPT57aGU9aGUuZmlsdGVyKHQ9PiFlLmluY2x1ZGVzKFN0cmluZyh0LnBheWxvYWQ/LnZpZXcpKSl9LFNfPW5ldyBTZXQoWyJmaW5kLWJvb2tpbmciLCJib29raW5nIiwiY2FuY2VsbGVkIiwiY2hhbmdlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0IiwibWVtYmVyLXNpZ24taW4iLCJtZW1iZXItbm90LWZvdW5kIl0pLHpfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJkZXN0aW5hdGlvbnMiKXJldHVybiBlLnNjb3BlPy5uYW1lP1N0cmluZyhlLnNjb3BlLm5hbWUpOiJhbGwgZGVzdGluYXRpb25zIjtpZih0PT09ImhvdGVscyIpe2lmKGUuYXNrPy5jaXR5KXJldHVybiBTdHJpbmcoZS5hc2suY2l0eSk7Y29uc3Qgbj1bLi4ubmV3IFNldCgoZS5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8uY2l0eSkpKV07cmV0dXJuIG4ubGVuZ3RoPT09MT9TdHJpbmcoblswXSk6YCR7ZS50b3RhbD8/MH0gaG90ZWxzYH1yZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciPyJ0aGUgY2FuY2VsbGF0aW9uIjp0PT09ImNoYW5nZS1wcmV2aWV3Ij8idGhlIGNoYW5nZSI6dD09PSJtZW1iZXIiPyJ5b3VyIG1lbWJlcnNoaXAiOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGFkZC1vbnMgZm9yICR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSxTZj0oKT0+e2NvbnN0IGU9cGUoImJhY2tidG4iKSx0PWhlLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IFd0PSIiLHhzPSIiLHJuPTAsS2M9ITE7Y29uc3QgemY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJih4cz10LnRyaXBJZCkscm49TnVtYmVyKHQuY291bnQ/PzApLEFycmF5LmlzQXJyYXkodC5saW5lcykmJihrdD10LmxpbmVzLEtjPSEwKSl9LFRfPWU9PnhzP3suLi5lLHRyaXA6eHN9OmUsSV89ZT0+SmNbZV0/PyIiLHB0PWU9PiEhSmNbZV07bGV0IEd0PSJob2xkIixGdD0hMTtjb25zdCBqdT1lPT57RnQ9ZSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY2FyZCIpPy5jbGFzc0xpc3QudG9nZ2xlKCJidXN5IixlKX07bGV0IFpvPTAsVGY9IiIsSWY9IiI7Y29uc3QgWGU9KCk9Pntjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5oZWFkIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9KCk9PmUuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSk7dCgpLHNldFRpbWVvdXQodCwxODApfSxNPShlLHQ9e30sbj17fSk9Pntjb25zdCBvPUlfKGUpO2lmKCFvKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYG5vIHRvb2wgZm9yICR7ZX1gKSk7aWYoRnQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtqdSghMCk7Y29uc3Qgcj1abztyZXR1cm4gRWUuY2FsbFNlcnZlclRvb2woe25hbWU6byxhcmd1bWVudHM6VF8odCl9KS5maW5hbGx5KCgpPT5qdSghMSkpLnRoZW4ocz0+e3pmKHM/Ll9tZXRhKTtjb25zdCBhPXM/LnN0cnVjdHVyZWRDb250ZW50LGk9YSYmbi5mb2xkP24uZm9sZChhKTphLHU9d18uaGFzKGUpJiZpJiZpLnZpZXchPT0iZXJyb3IiO2lmKHI9PT1abyYmaSl7VGY9YT9KU09OLnN0cmluZ2lmeShhKToiIixJZj1KU09OLnN0cmluZ2lmeShpKTtjb25zdCBsPW9uKGkpIT09b24ocSk7bi5wdXNoIT09ITEmJndvKGkpLHUmJihSbys9MSksaS52aWV3PT09ImJvb2tpbmciJiYoTnUoWyJ0cmlwIiwibmVlZHMtZGF0ZXMiLCJuZWVkcy1ndWVzdCJdKSxDZT1udWxsKSwoaS52aWV3PT09ImNhbmNlbGxlZCJ8fGkudmlldz09PSJjaGFuZ2VkIikmJk51KFsiY2FuY2VsbGF0aW9uLXByZXZpZXciLCJjaGFuZ2UtcHJldmlldyJdKSx4ZShpKSxsJiZYZSgpfWVsc2UgdSYmKFJvKz0xKTtyZXR1cm4gUF8ocyxuLm5vdGUpLHN9KX0sUF89KGUsdCk9Pntjb25zdCBuPShlPy5jb250ZW50Pz9bXSkuZmluZChvPT5vPy50eXBlPT09InRleHQiKT8udGV4dDshbnx8IUVlLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8udXBkYXRlTW9kZWxDb250ZXh0fHxFZS51cGRhdGVNb2RlbENvbnRleHQoe2NvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OnQ/YCR7dH0gJHtTdHJpbmcobil9YDpTdHJpbmcobil9XX0pLmNhdGNoKCgpPT57fSl9O2xldCBpcz0hMTtjb25zdCB4Xz0iKFRoZSBjYXJkIHByaWNlZCBpdHMgb3duIGRlZmF1bHQgZGF0ZXMsIHRvbmlnaHQsIHRvIHNob3cgdGhlIHJvb21zOyB0aGUgZ3Vlc3QgaGFzIG5vdCBjaG9zZW4gdGhlbS4pIixCdD1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxIdD1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksQ189Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+JyxFXz1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke0NffSR7YyhlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7YyhlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixuZT0oKT0+d2Y/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtjKCRmfHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsc249ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LENzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxHZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtzbihlLmNoZWNrSW4pfSDigJMgJHtzbihlLmNoZWNrT3V0KX0gwrcgJHtDcyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7Q3MoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsQV89KGUsdCxuKT0+e2NvbnN0IG89a3QuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LE9fPShlLHQpPT57Y29uc3Qgbj1rdC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sTm89KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7YyhuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7YyhuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Mobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsUGY9KGUsdCk9Pntjb25zdCBuPXR8fHhmKCk7cmV0dXJuKCFULmNoZWNrSW58fFQuY2hlY2tJbjxuKSYmKFQuY2hlY2tJbj1uKSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PUplKFQuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7YyhULmNoZWNrSW4pfSIgbWluPSIke2Mobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhKZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke2MoYXMoKSl9PC9zcGFuPgogIDwvZGl2PmB9LGFzPSgpPT57Y29uc3QgZT1ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/Q3MoVC5jaGVja0luLFQuY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj1ZPjE/YCR7WX0gcm9vbXNgOiIiO3JldHVyblt0LG5dLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIil9LEplPShlLHQpPT5uZXcgRGF0ZShEYXRlLnBhcnNlKGAke2V9VDEyOjAwOjAwWmApK3QqODY0ZTUpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCkseGY9KCk9Pm5ldyBEYXRlKERhdGUubm93KCktbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKjZlNCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxDZj1lPT57Y29uc3QgdD1bLi4uZT8udG9kYXk/W2UudG9kYXkubWluLGUudG9kYXkubWF4XTpbXSwuLi4oZT8uaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLnRvZGF5VGhlcmU/PyIiKSldLmZpbHRlcihvPT4vXlxkezR9LVxkezJ9LVxkezJ9JC8udGVzdChvKSkuc29ydCgpLG49eGYoKTtyZXR1cm57bWluOlt0WzBdPz9uLG5dLnNvcnQoKVswXT8/bixzdGFydDp0LmF0KC0xKT8/bn19LFJfPWU9Pntjb25zdHttaW46dCxzdGFydDpufT1DZihlKTsoIVQuY2hlY2tJbnx8VC5jaGVja0luPHQpJiYoVC5jaGVja0luPW4pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9SmUoVC5jaGVja0luLDEpKTtjb25zdCBvPWA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgICAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImRjaSIgdmFsdWU9IiR7YyhULmNoZWNrSW4pfSIgbWluPSIke2ModCl9Ij48L2xhYmVsPgogICAgICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImRjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKEplKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHtlLnNjb3BlPyIiOic8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZCI+U2VhcmNoPC9idXR0b24+J30KICAgICAgPC9kaXY+YCxyPWA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICA8bGFiZWwgY2xhc3M9IndoZXJlIj5XaGVyZSB0bzxpbnB1dCBpZD0id2hlcmUiIHR5cGU9InNlYXJjaCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBIGNpdHksIGEgY291bnRyeSBvciBhIGhvdGVsIiBhcmlhLWxhYmVsPSJXaGVyZSB0byI+PC9sYWJlbD4KICAgICAgJHtvfQogICAgPC9kaXY+YCxzPWw9PmA8ZGl2IGNsYXNzPSJwbGFjZXMiPiR7bC5tYXAoKGQsbSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhkLm5hbWUpfSIke20+PWV0PyIgaGlkZGVuIjoiIn0+JHtjKGQubmFtZSl9IDxzbWFsbD4ke2MoZC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0ke2wubGVuZ3RoPmV0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7bC5sZW5ndGgtZXR9IG1vcmU8L2J1dHRvbj5gOiIifTwvZGl2PmAsYT1lLnNjb3BlO2lmKGEpcmV0dXJuW25lKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoYS5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS50b3RhbCl9ICR7YyhlLnZvY2FiPy5ub3VuUGx1cmFsPz8iaG90ZWxzIil9IGluICR7YygoYS5jaXRpZXM/P1tdKS5sZW5ndGgpfSBjaXRpZXM8L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzZWFyY2giPiR7b308L2Rpdj5gLHMoYS5jaXRpZXM/P1tdKSxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZS1hbGw9IiR7YyhhLm5hbWUpfSI+QWxsICR7YyhlLnRvdGFsKX0gaW4gJHtjKGEubmFtZSl9PC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3QgaT1lLnJlZ2lvbnM/P1tdLHU9aS5mbGF0TWFwKGw9PmwuY291bnRyaWVzPz9bXSkuZmxhdE1hcChsPT5sLmNpdGllcz8/W10pLm1hcCgobCxkKT0+KHtjOmwsaTpkfSkpLnNvcnQoKGwsZCk9Pk51bWJlcihkLmMuY291bnQpLU51bWJlcihsLmMuY291bnQpfHxsLmktZC5pKS5zbGljZSgwLGV0KS5tYXAoKHtjOmx9KT0+bCk7cmV0dXJuW25lKCkscix1Lmxlbmd0aD9gPGRpdiBjbGFzcz0icmVnaW9uIj48ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+VG9wIGNpdGllczwvZGl2PiR7cyh1KX08L2Rpdj5gOiIiLGkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJyZWdpb24iPjxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj5CeSByZWdpb248L2Rpdj48ZGl2IGNsYXNzPSJwbGFjZXMiPiR7aS5tYXAoKGwsZCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHRhYiIgdHlwZT0iYnV0dG9uIiBkYXRhLXJlZ2lvbj0iJHtkfSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPiR7YyhsLm5hbWUpfSA8c21hbGw+JHtjKGwuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+PC9kaXY+YDoiIiwuLi5pLm1hcCgobCxkKT0+YAogICAgICA8ZGl2IGNsYXNzPSJyZWdpb24iIGRhdGEtcmVnaW9uLWJvZHk9IiR7ZH0iIGhpZGRlbj4KICAgICAgICAkeyhsLmNvdW50cmllcz8/W10pLm1hcCgobSxiKT0+e2NvbnN0IHY9bS5jaXRpZXM/P1tdLF89di5sZW5ndGg9PT0xP3ZbMF06dm9pZCAwO3JldHVybmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc3QiJHtiPj1tcz8iIGhpZGRlbiI6IiJ9PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0LWNvdW50cnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKG0ubmFtZSl9Ij4ke2MobS5uYW1lKX0ke18mJl8ubmFtZSE9PW0ubmFtZT9gPHNtYWxsPiDCtyAke2MoXy5uYW1lKX08L3NtYWxsPmA6IiJ9IDxzbWFsbCBjbGFzcz0ibiI+JHtjKG0uY291bnQpfTwvc21hbGw+PC9idXR0b24+CiAgICAgICAgICAgICR7di5sZW5ndGg+MT9zKHYpOiIifQogICAgICAgICAgPC9kaXY+YH0pLmpvaW4oIiIpfQogICAgICAgICR7KGwuY291bnRyaWVzPz9bXSkubGVuZ3RoPm1zP2A8ZGl2IGNsYXNzPSJwbGFjZXMiPjxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtY291bnRyaWVzIj4rJHsobC5jb3VudHJpZXM/P1tdKS5sZW5ndGgtbXN9IG1vcmUgY291bnRyaWVzPC9idXR0b24+PC9kaXY+YDoiIn0KICAgICAgPC9kaXY+YCksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFsbC1ob3RlbHMiPkJyb3dzZSBhbGwgJHtjKGUudG90YWwpfTwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQtYm9va2luZyI+RmluZCBhIGJvb2tpbmc8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sZXQ9OCxtcz02LEVmPWU9Pntjb25zdCB0PWUuZm9yU3RheTtyZXR1cm4gdD9gPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtjKHQudG90YWwpfTxzbWFsbCBjbGFzcz0idC1zdWIiPiR7TnVtYmVyKHQucm9vbXMpPjE/YCR7Yyh0LnJvb21zKX0gcm9vbXMgw5cgYDoiIn0ke2ModC5uaWdodHMpfSAke051bWJlcih0Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IMK3IHRheGVzIGluPC9zbWFsbD48L3NwYW4+YDplLm5vUm9vbXNGb3JTdGF5P2A8c3BhbiBjbGFzcz0idC1mcm9tIHQtbm9uZSI+JHsvc2xlZXBzLy50ZXN0KFN0cmluZyhlLm5vUm9vbXNGb3JTdGF5KSk/YE5vIHJvb20gc2xlZXBzICR7YyhULmd1ZXN0cyl9YDoiTm8gcm9vbSBmb3IgdGhlc2UgZGF0ZXMifTwvc3Bhbj5gOmA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2UuZnJvbU5pZ2h0bHk/YCR7YyhlLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPmB9LFpfPWU9Pntjb25zdCB0PWUuZm9yU3RheTtpZighdClyZXR1cm4iIjtjb25zdCBuPVt0LmZyZWVDYW5jZWxsYXRpb24/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5GcmVlIGNhbmNlbGxhdGlvbjwvc3Bhbj4nOiIiLE51bWJlcih0LnJvb21zTGVmdCk8PTM/YDxzcGFuIGNsYXNzPSJiYWRnZSI+JHtjKHQucm9vbXNMZWZ0KX0gbGVmdDwvc3Bhbj5gOiIiXS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIG4ubGVuZ3RoP2A8c3BhbiBjbGFzcz0idC10YWdzIj4ke24uam9pbigiIil9PC9zcGFuPmA6IiJ9LFF0PSgpPT5ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/e2NoZWNrSW46VC5jaGVja0luLGNoZWNrT3V0OlQuY2hlY2tPdXQsZ3Vlc3RzOlQuZ3Vlc3RzLC4uLlk+MT97cm9vbXM6WX06e319Ont9LE5fPWU9Pntjb25zdHtjaGVja0luOnQsY2hlY2tPdXQ6bixndWVzdHM6byxyb29tczpyLC4uLnN9PWU/P3t9O3JldHVybiBzfSxqXz0oZSx0KT0+e2NvbnN0e21pbjpuLHN0YXJ0Om99PUNmKHQpO3JldHVybighVC5jaGVja0lufHxULmNoZWNrSW48bikmJihULmNoZWNrSW49byksKCFULmNoZWNrT3V0fHxULmNoZWNrT3V0PD1ULmNoZWNrSW4pJiYoVC5jaGVja091dD1KZShULmNoZWNrSW4sMSkpLGAKICA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibGNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7YyhuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhKZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtbGlzdC1yb29tcz0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9ImxybiI+JHtjKFkpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvZGl2PgogICAgJHtlP2A8c3BhbiBjbGFzcz0ibmlnaHRzIj4ke2MoYXMoKSl9PC9zcGFuPmA6JzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwcmljZS1saXN0Ij5TaG93IHByaWNlczwvYnV0dG9uPid9CiAgPC9kaXY+YH07bGV0IEllPSJkYXRlcyI7Y29uc3QgQWY9ImRhdGVzIiwkbz1lPT57Y29uc3QgdD1lPz97fTtyZXR1cm57Li4udC5icmFuZD97YnJhbmQ6dC5icmFuZH06e30sLi4uQXJyYXkuaXNBcnJheSh0LmZhY2lsaXRpZXMpJiZ0LmZhY2lsaXRpZXMubGVuZ3RoP3tmYWNpbGl0aWVzOnQuZmFjaWxpdGllc306e30sLi4udC5mcmVlQ2FuY2VsbGF0aW9uP3tmcmVlQ2FuY2VsbGF0aW9uOiEwfTp7fSwuLi50LmJyZWFrZmFzdD97YnJlYWtmYXN0OiEwfTp7fX19LE11PWU9Pntjb25zdHticmFuZDp0LGZhY2lsaXRpZXM6bixmcmVlQ2FuY2VsbGF0aW9uOm8sYnJlYWtmYXN0OnIsLi4uc309ZT8/e307cmV0dXJuIHN9LE1fPWU9Pntjb25zdCB0PSRvKGUpO3JldHVybih0LmJyYW5kPzE6MCkrKHQuZmFjaWxpdGllcz8ubGVuZ3RoPz8wKSsodC5mcmVlQ2FuY2VsbGF0aW9uPzE6MCkrKHQuYnJlYWtmYXN0PzE6MCl9LHFfPWU9Pntjb25zdCB0PWUucmVmaW5lO2lmKCF0KXJldHVybiIiO2NvbnN0IG49KHIscyxhLGkpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtZmlsdGVyPSIke2Mocil9IiBhcmlhLXByZXNzZWQ9IiR7aT8idHJ1ZSI6ImZhbHNlIn0iPiR7YyhzKX0gPHNtYWxsPiR7YyhhKX08L3NtYWxsPjwvYnV0dG9uPmAsbz0ocixzKT0+cy5sZW5ndGg/YDxkaXYgY2xhc3M9ImZncm91cCI+PHNwYW4gY2xhc3M9InNvcnRzLWsiPiR7YyhyKX08L3NwYW4+JHtzLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW28oIkJyYW5kIiwodC5icmFuZHM/P1tdKS5tYXAocj0+bihgYnJhbmQ6JHtyLm5hbWV9YCxyLm5hbWUsci5jb3VudCxyLm9uKSkpLG8oIkhhcyIsKHQuZmFjaWxpdGllcz8/W10pLm1hcChyPT5uKGBmYWNpbGl0eToke3Iua2V5fWAsci5sYWJlbCxyLmNvdW50LHIub24pKSksbygiUm9vbSIsKHQucm9vbT8/W10pLm1hcChyPT5uKHIua2V5LHIubGFiZWwsci5jb3VudCxyLm9uKSkpXS5qb2luKCIiKX0sRF89KGUsdCk9Pntjb25zdCBuPXI9Pk51bWJlcihyLnNsaWNlKDgsMTApKSxvPXI9Pm5ldyBEYXRlKGAke3J9VDEyOjAwOjAwWmApLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHttb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSk7cmV0dXJuIG8oZSk9PT1vKHQpP2Ake24oZSl94oCTJHtuKHQpfSAke28odCl9YDpgJHtuKGUpfSAke28oZSl9IOKAkyAke24odCl9ICR7byh0KX1gfSxPZj0oZSx0LG4pPT57Y29uc3Qgbz0hIWUuc3RheT8uY2hlY2tJbixyPU1fKGUuYXNrKSxzPXFfKGUpLGE9UmYuZmluZCgoW2xdKT0+bD09PW4pPy5bMV0/PyJEZWZhdWx0IixpPW8/YCR7RF8oZS5zdGF5LmNoZWNrSW4sZS5zdGF5LmNoZWNrT3V0KX0ke1k+MT9gIMK3ICR7WX0gcm9vbXNgOiIifWA6IkFkZCBkYXRlcyIsdT0obCxkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UgdG9vbCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBhbmVsPSIke2x9IiBhcmlhLWV4cGFuZGVkPSIke0llPT09bD8idHJ1ZSI6ImZhbHNlIn0iPiR7ZH08L2J1dHRvbj5gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InBsYWNlcyB0b29sYmFyIj4KICAgICAgJHt1KCJkYXRlcyIsYyhpKSl9CiAgICAgICR7dD91KCJzb3J0IixuPT09Imdyb3VwIj8iU29ydCI6YyhhKSk6IiJ9CiAgICAgICR7c3x8cj91KCJmaWx0ZXJzIixgRmlsdGVycyR7cj9gIMK3ICR7cn1gOiIifWApOiIifQogICAgICAke3I/JzxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJjbGVhci1maWx0ZXJzIj5DbGVhcjwvYnV0dG9uPic6IiJ9CiAgICA8L2Rpdj4KICAgIDxkaXYgZGF0YS1wYW5lbC1ib2R5PSJkYXRlcyIke0llPT09ImRhdGVzIj8iIjoiIGhpZGRlbiJ9PiR7al8obyxlKX08L2Rpdj4KICAgICR7dD9gPGRpdiBjbGFzcz0iZmlsdGVyLXBhbmVsIiBkYXRhLXBhbmVsLWJvZHk9InNvcnQiJHtJZT09PSJzb3J0Ij8iIjoiIGhpZGRlbiJ9PiR7dH08L2Rpdj5gOiIifQogICAgJHtzP2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0iZmlsdGVycyIke0llPT09ImZpbHRlcnMiPyIiOiIgaGlkZGVuIn0+JHtzfTwvZGl2PmA6IiJ9YH0sUmY9W1siZ3JvdXAiLCJEZWZhdWx0Il0sWyJwcmljZS1sb3ciLCJMb3dlc3QgcHJpY2UiXSxbInByaWNlLWhpZ2giLCJIaWdoZXN0IHByaWNlIl0sWyJyYXRpbmciLCJSYXRpbmciXV0sTF89MztsZXQgYW49ImlubGluZSIsWmY9W107Y29uc3QgY249KCk9PmFuPT09ImZ1bGxzY3JlZW4iLFdjPSgpPT57Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY29udGVudCAudGlsZXMiKTtpZihlPy5vZmZzZXRXaWR0aCl7Y29uc3Qgcz1nZXRDb21wdXRlZFN0eWxlKGUpLmdyaWRUZW1wbGF0ZUNvbHVtbnMuc3BsaXQoIiAiKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO2lmKHM+MClyZXR1cm4gc31jb25zdCB0PXBlKCJjb250ZW50IikuY2xpZW50V2lkdGh8fHdpbmRvdy5pbm5lcldpZHRofHwwLG49dDw9NDYwLG89bj8xNTA6MTk2LHI9bj84OjEwO3JldHVybiBNYXRoLm1heCgxLE1hdGguZmxvb3IoKHQrcikvKG8rcikpKXx8Mn07bGV0IEdjPTA7Y29uc3QgY3M9KCk9Pk1hdGgubWF4KDIsKEdjfHxXYygpKSpMXyk7bGV0IGpvPTA7Y29uc3QgVV89ZT0+e2pvPWNzKCk7Y29uc3QgdD1jbigpP2UuaG90ZWxzPz9bXTooZS5ob3RlbHM/P1tdKS5zbGljZSgwLGpvKSxuPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNpdHkpKSldLG89dz0+e2NvbnN0ICQ9dC5maW5kKE49Pk4uY2l0eT09PXcpPy5jb3VudHJ5O3JldHVybiAkJiYhU3RyaW5nKCQpLnN0YXJ0c1dpdGgodyk/U3RyaW5nKCQpOiIifSxyPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNvdW50cnk/PyIiKSkpXSxzPXIubGVuZ3RoPjEsYT13PT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke2Modyl9JHshcyYmbyh3KT9gPHNtYWxsPiDCtyAke2Mobyh3KSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKCQ9PiQuY2l0eT09PXcpLm1hcCgkPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YygkLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtCdChTdHJpbmcoJC5pZCkpfSI+CiAgICAgICAgICAgICAgJHskLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKCQuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEh0KFN0cmluZygkLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7JC5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7YygkLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2MoJC5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7YyhuLmxlbmd0aD4xPyQuYXJlYT8/JC5jaXR5OlskLmFyZWEsJC5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICAke0VmKCQpfQogICAgICAgICAgICAgICAgJHtFXygkLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICR7Wl8oJCl9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAsaT1OdW1iZXIoZS50b3RhbD8/dC5sZW5ndGgpLHU9TnVtYmVyKGUub2Zmc2V0Pz8wKSxsPWktdS10Lmxlbmd0aCxkPWUucGxhY2VzPz9bXTtlLmFzaz8uY2l0eTtjb25zdCBtPWQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJXaGVyZSI+CiAgICAgICAgICAgJHtkLm1hcCgodywkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKHcucGxhY2UpfSIkeyQ+PWV0PyIgaGlkZGVuIjoiIn0+JHtjKHcubGFiZWwpfSA8c21hbGw+JHtjKHcuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9CiAgICAgICAgICAgJHtkLmxlbmd0aD5ldD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1wbGFjZXMiPiske2QubGVuZ3RoLWV0fSBtb3JlPC9idXR0b24+YDoiIn0KICAgICAgICAgPC9kaXY+YDoiIixiPVN0cmluZyhlLnNvcnQ/PyJncm91cCIpLHY9ISgoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjEpLF89dC5sZW5ndGg+MT9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iT3JkZXIiPiR7UmYuZmlsdGVyKChbd10pPT52fHwhdy5zdGFydHNXaXRoKCJwcmljZSIpKS5tYXAoKFt3LCRdKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2Ugc29ydCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNvcnQ9IiR7d30iIGFyaWEtcHJlc3NlZD0iJHt3PT09Yj8idHJ1ZSI6ImZhbHNlIn0iPiR7JH08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiO3JldHVybltuZSgpLG0sT2YoZSxfLGIpLGUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfS4gVGhlc2UgYXJlICR7YyhlLndpZGVuZWQudG8pfS48L2Rpdj5gOiIiLGA8ZGl2PiR7cz9yLm1hcCh3PT5gPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7Yyh3KX08L2Rpdj4ke24uZmlsdGVyKCQ9PnQuc29tZShOPT5OLmNpdHk9PT0kJiZTdHJpbmcoTi5jb3VudHJ5Pz8iIik9PT13KSkubWFwKGEpLmpvaW4oIiIpfWApLmpvaW4oIiIpOm4ubWFwKGEpLmpvaW4oIiIpfTwvZGl2PmAsKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5RdW90ZWQgaW4gJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0g4oCUIG5vIHJhdGUgaXMgYXBwbGllZCBoZXJlLCBzbyB0aGlzIGlzIG5vdCBhIHByaWNlIG9yZGVyLiBPbmUgY2l0eSBvciBvbmUgY291bnRyeSBnaXZlcyBvbmUgY3VycmVuY3kuPC9kaXY+YDoiIixlLm92ZXJCdWRnZXQ/YDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLm92ZXJCdWRnZXQpfSBtb3JlIG1hdGNoZWQgYW5kIGNhbWUgaW4gb3ZlciB0aGUgcHJpY2UgY2VpbGluZy48L2Rpdj5gOiIiLGNuKCk/bD4wP2A8ZGl2IGNsYXNzPSJub3RlIj5TaG93aW5nICR7dT9gJHt1KzF94oCTJHt1K3QubGVuZ3RofWA6dC5sZW5ndGh9IG9mICR7aX0uPC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMTIsbCl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiOnU+MHx8bD4wP2A8ZGl2IGNsYXNzPSJwYWdlciIgcm9sZT0ibmF2aWdhdGlvbiIgYXJpYS1sYWJlbD0iUGFnZXMiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InBhZ2UtcHJldiIke3U+MD8iIjoiIGRpc2FibGVkIn0gYXJpYS1sYWJlbD0iUHJldmlvdXMgaG90ZWxzIj7igLkgUHJldmlvdXM8L2J1dHRvbj4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3UrMX3igJMke3UrdC5sZW5ndGh9IG9mICR7aX08L3NwYW4+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGFnZS1uZXh0IiR7bD4wPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJOZXh0IGhvdGVscyI+TmV4dCDigLo8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj4ke1pmLmluY2x1ZGVzKCJmdWxsc2NyZWVuIik/YDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmdWxsc2NyZWVuIj5WaWV3IGFsbCAke2MoaSl9PC9idXR0b24+PC9kaXY+YDoiIn1gOiIiXS5qb2luKCIiKX0sRl89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXSxuPWUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfSwgc28gdGhpcyBsb29rZWQgaW4gJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiI7cmV0dXJuIGUuYmVmb3JlRmlsdGVycz8oSWU9ImZpbHRlcnMiLFtuZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj4ke2MoZS53aHk/P2BOb25lIG9mIHRoZSAke2UuYmVmb3JlRmlsdGVyc30gaGVyZSBoYXMgYWxsIG9mIHRob3NlIHRvZ2V0aGVyLmApfTwvZGl2PmAsT2YoZSwiIixTdHJpbmcoZS5hc2s/LnNvcnQ/PyJncm91cCIpKV0uam9pbigiIikpOnQubGVuZ3RoP1tuZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7Yyh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobz0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7QnQoU3RyaW5nKG8uaWQpKX0iPgogICAgICAgICAgJHtvLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKG8uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoSHQoU3RyaW5nKG8ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtjKG8ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7Yyhbby5hcmVhLG8uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICR7RWYobyl9CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YCR7bn08ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKGUud2h5Pz9gTm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZS5xdWVyeX0iYDoiIn0uIFRyeSBhIGNpdHkuYCl9PC9kaXY+YH0sTmY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke0J0KFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEh0KFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke2MoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHtjKGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7YyhlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHtjKHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsQl89KGUsdCxuKT0+e2NvbnN0IG89QV8oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtCdChgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2ModC5pbWFnZVVybCl9IiBhbHQ9IiI+YDpjKEh0KFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7YyhTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7Yyh0LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2ModC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2ModC5uaWdodGx5KX0gLyBuaWdodCR7WT4xP2AgwrcgJHtZfSByb29tc2A6IiJ9IMK3IGluY2wuIHRheDwvZGl2PgogICAgICAgICR7dC5tZW1iZXJSYXRlP2A8ZGl2IGNsYXNzPSJwLW1lbWJlciI+JHtjKHQubWVtYmVyUmF0ZS50aWVyKX0gcmF0ZTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Tm8oYGRhdGEtYWRkLXJvb209IiR7Yyh0LmlkKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmlkKX0iYCxvLFN0cmluZyh0Lm5hbWUpLFkpfTwvZGl2PgogICAgPC9kaXY+YH0sSF89KGUsdCk9PiFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyPyIiOmAKICA8ZGl2IGNsYXNzPSJmbGV4LWRhdGVzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iTmVhcmJ5IGFycml2YWwgZGF0ZXMiPgogICAgJHt0Lm1hcChuPT5gPGJ1dHRvbiBjbGFzcz0iZmQke24uY2hvc2VuPyIgb24iOiIifSR7bi5mcm9tPyIiOiIgb3V0In0ke24uYmVzdD8iIGJlc3QiOiIifSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2MoZSl9IiBkYXRhLWNpPSIke2Mobi5jaGVja0luKX0iIGRhdGEtY289IiR7YyhuLmNoZWNrT3V0KX0iIGFyaWEtbGFiZWw9IkFycml2ZSAke2Moc24oU3RyaW5nKG4uY2hlY2tJbikpKX0ke24uZnJvbT9gLCBmcm9tICR7YyhuLmZyb20pfWA6Iiwgbm90aGluZyBsZWZ0In0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1kYXkiPiR7YyhzbihTdHJpbmcobi5jaGVja0luKSkpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtcHJpY2UiPiR7bi5mcm9tP2Mobi5mcm9tKToiRnVsbCJ9PC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gLHF1PWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5yb29tcz8/W10sbz1lLnN0YXk/P1Q7cmV0dXJuW25lKCksTmYodCksUGYoU3RyaW5nKHQuaWQpLHQudG9kYXlUaGVyZSksSF8oU3RyaW5nKHQuaWQpLGUuZGF0ZXMpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PkJfKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke2ModC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke2Moci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij4ke2Moci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LFZfPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdLG89ZS5mb3JCb29raW5nO3JldHVybiBvP1tuZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+QWRkLW9ucyBmb3IgJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKHQubmFtZSl9IMK3ICR7YyhHZShvLnN0YXkpKX08L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke2Moci5wZXIpfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Tm8oYGRhdGEtYm9va2luZy1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ib29raW5nPSIke2Moby5jb25maXJtYXRpb25Db2RlKX0iYCxOdW1iZXIoby5oZWxkPy5bci5pZF0/PzApLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLCc8ZGl2IGNsYXNzPSJub3RlIj5FYWNoIGNoYW5nZSBpcyBzaG93biB3aXRoIGl0cyBuZXcgdG90YWwgYmVmb3JlIGFueXRoaW5nIG1vdmVzLiBOb3RoaW5nIGlzIGNoYXJnZWQgaGVyZS48L2Rpdj4nLCc8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkJhY2sgdG8geW91ciBib29raW5nczwvYnV0dG9uPiddLmpvaW4oIiIpOltuZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Moci5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke2Moci5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtObyhgZGF0YS1hZGQtZXh0cmE9IiR7YyhyLmlkKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iYCxPXyhTdHJpbmcodC5pZCksU3RyaW5nKHIuaWQpKSxTdHJpbmcoci5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPkJhY2sgdG8gJHtjKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LEpfPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHtjKGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke2MoZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7YyhlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHtjKGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7YyhlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIke2UuZGF5P2AgZGF0YS1kYXk9IiR7YyhlLmRheSl9ImA6IiJ9YDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtHZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7YyhlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtObyh0LE51bWJlcihlLmtpbmQ9PT0iZXh0cmEiP2Uub3JkZXJlZD8/ZS5xdWFudGl0eT8/MTplLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0sRHU9KGUsdCk9PmA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7YyhlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke2MoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHtjKGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHtjKGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7Yyh0KX08L3NwYW4+PHNwYW4+JHtjKGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIGVhcm5zPC9zcGFuPjxzcGFuPiR7YyhOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgIDwvZGl2PmAsS189ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVybltuZSgpLCc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlIHRyaXAgaXMgZW1wdHkuPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkJyb3dzZSAke2MoUmUpfSBob3RlbHM8L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBuPVsuLi5uZXcgU2V0KHQubWFwKG89PlN0cmluZyhvLmRheT8/IiIpKSldLnNvcnQoKTtyZXR1cm5bbmUoKSxuLm1hcChvPT5gCiAgICAgICR7bz9gPGRpdiBjbGFzcz0iZGF5Ij4ke2Moc24obykpfTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InJvd3MiPiR7dC5maWx0ZXIocj0+U3RyaW5nKHIuZGF5Pz8iIik9PT1vKS5tYXAoSl8pLmpvaW4oIiIpfTwvZGl2PmApLmpvaW4oIiIpLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG89PmAke2Moby50aXRsZSl9OiAke2Moby53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLC4uLkFycmF5LmlzQXJyYXkoZS5ncm91cHMpJiZlLmdyb3Vwcy5sZW5ndGg+MT9bYDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlZCBpbiAke2MoKGUuY3VycmVuY2llcz8/W10pLmpvaW4oIiBhbmQgIikpfSwgc2VwYXJhdGVseS4gTm90aGluZyBoZXJlIGNvbnZlcnRzIG9uZSBpbnRvIHRoZSBvdGhlcjsgZWFjaCBob3RlbCBpcyBib29rZWQgYW5kIHBhaWQgaW4gaXRzIG93bi48L2Rpdj5gLC4uLmUuZ3JvdXBzLm1hcChvPT5EdShvLG8uZ29lc1dpdGhBU3RheT9gSW4gJHtvLmN1cnJlbmN5fSwgZ29lcyB3aXRoIGEgc3RheSAtIG5vdCBpbiB0aGUgdG90YWxgOmBUb3RhbCBpbiAke28uY3VycmVuY3l9YCkpXTpbRHUoZSwiVG90YWwiKV0sLi4uQXJyYXkuaXNBcnJheShlLm5lZWRzUm9vbSkmJmUubmVlZHNSb29tLmxlbmd0aD9lLm5lZWRzUm9vbS5tYXAobz0+YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICAgIDxiPkdvZXMgd2l0aCBhIHN0YXk8L2I+CiAgICAgICAgICAgICA8c3Bhbj4ke2MoKG8uZXh0cmFzPz9bXSkuam9pbigiIGFuZCAiKSl9IGlzICR7YyhvLmhvdGVsTmFtZSl9J3Mgc2VydmljZSBmb3IgaXRzIGd1ZXN0cywgc28gaXQgaXMgYm9va2VkIHdpdGggYSByb29tIHRoZXJlIC0gb3IgYWRkZWQgdG8gYSBib29raW5nIHlvdSBhbHJlYWR5IGhhdmUuPC9zcGFuPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhvLmhvdGVsSWQpfSI+Um9vbXMgYXQgJHtjKG8uaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPC9kaXY+YCk6Wyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siPlJlcXVlc3QgYm9va2luZzwvYnV0dG9uPjwvZGl2PicsR3Q9PT0icGF5LWF0LWhvdGVsIj9gPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIEJvb2tpbmcgbWFrZXMgYSByZXNlcnZhdGlvbiB3aXRoICR7YyhSZSl9LCBwYWlkIGF0IHRoZSBob3RlbCwgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmA6YDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBSZXF1ZXN0aW5nIGEgYm9va2luZyBhc2tzICR7YyhSZSl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLGpmKCldLFh8fCFwdCgic2lnbkluIik/IiI6YDxkaXYgY2xhc3M9Im5vdGUiPkEgJHtjKFJlKX0gQ2lyY2xlIG1lbWJlcj8gPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj5TaWduIGluIGZvciB0aGUgbWVtYmVyIHJhdGU8L2J1dHRvbj4uPC9kaXY+JHtNbygpfWBdLmpvaW4oIiIpfSxRYz1be2lkOiJraW5nLWJlZCIsbGFiZWw6IktpbmcgYmVkIn0se2lkOiJ0d2luLWJlZHMiLGxhYmVsOiJUd2luIGJlZHMifSx7aWQ6ImhpZ2gtZmxvb3IiLGxhYmVsOiJIaWdoIGZsb29yIn0se2lkOiJsb3ctZmxvb3IiLGxhYmVsOiJMb3cgZmxvb3IifSx7aWQ6InF1aWV0LXJvb20iLGxhYmVsOiJRdWlldCByb29tIn0se2lkOiJjb25uZWN0aW5nLXJvb21zIixsYWJlbDoiQ29ubmVjdGluZyByb29tcyJ9LHtpZDoiZWFybHktY2hlY2staW4iLGxhYmVsOiJFYXJseSBjaGVjay1pbiJ9LHtpZDoibGF0ZS1hcnJpdmFsIixsYWJlbDoiTGF0ZSBhcnJpdmFsIn0se2lkOiJhY2Nlc3NpYmxlLXJvb20iLGxhYmVsOiJBY2Nlc3NpYmxlIHJvb20ifV0sV189eyJraW5nLWJlZCI6InR3aW4tYmVkcyIsInR3aW4tYmVkcyI6ImtpbmctYmVkIiwiaGlnaC1mbG9vciI6Imxvdy1mbG9vciIsImxvdy1mbG9vciI6ImhpZ2gtZmxvb3IifTtsZXQgQ2U9bnVsbDtjb25zdCBqZj0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0iZ3Vlc3QiJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+R3Vlc3QgbmFtZTxpbnB1dCBpZD0iZ25hbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgYm9va2luZyIgdmFsdWU9IiR7YyhDZT8ubmFtZT8/IiIpfSI+PC9sYWJlbD4KICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJnbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBjb25maXJtYXRpb24iIHZhbHVlPSIke2MoQ2U/LmVtYWlsPz8iIil9Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke1FjLm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7Yyh0LmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoQ2U/Q2UucmVxdWVzdHM6WD8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7Yyh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7YyhDZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHtjKENlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke2MoUmUpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7WD9gPGxhYmVsIGNsYXNzPSJyZW1lbWJlciI+PGlucHV0IGlkPSJncmVtZW1iZXIiIHR5cGU9ImNoZWNrYm94IiR7Q2U/LnJlbWVtYmVyPyIgY2hlY2tlZCI6IiJ9PiBSZW1lbWJlciB0aGUgYmVkLCBmbG9vciBhbmQgcm9vbSByZXF1ZXN0cyBvbiBteSAke2MoWC5wcm9ncmFtbWU/PyJtZW1iZXJzaGlwIil9IGZvciBuZXh0IHRpbWU8L2xhYmVsPmA6IiJ9CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj5Ib2xkIHRoZXNlIHJvb21zPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4KICA8L2Rpdj5gLEdfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke2MoKGUubWlzc2luZz8/W10pLmpvaW4oIiBhbmQgIil8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsamYoITApLCc8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4nXS5qb2luKCIiKSxRXz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW25lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgICR7dC5uYW1lP2A8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+YDonPGRpdiBjbGFzcz0id2hlcmUiPlNpZ25lZCBpbjwvZGl2Pid9CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgJHt0eXBlb2YgdC5wb2ludHM9PSJudW1iZXIiP2A8ZGl2IGNsYXNzPSJ3aGVuIj4ke2ModC5wb2ludHMudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHtjKE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke2ModC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLCh0LnByZWZlcmVuY2VzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgPGI+U2F2ZWQgZm9yIHlvdXIgbmV4dCBzdGF5czwvYj4KICAgICAgICAgICA8c3Bhbj4ke2ModC5wcmVmZXJlbmNlcy5tYXAobj0+UWMuZmluZChvPT5vLmlkPT09bik/LmxhYmVsPz9uKS5qb2luKCIsICIpKX0gLSB0aWNrZWQgb24gdGhlIGJvb2tpbmcgZm9ybSwgYW5kIGFza2VkIGZvciBvbmx5IHdoZW4geW91IGJvb2sgd2l0aCB0aGVtLjwvc3Bhbj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZm9yZ2V0LXByZWZzIj5Gb3JnZXQgdGhlbTwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sWV89KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLE1vKCEwKV0uam9pbigiIiksTW89KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxYXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RlZD8/W107cmV0dXJuIHQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCR7ZS5hY2Nlc3NpYmlsaXR5PyIgZmxhZyI6IiJ9Ij4KICAgIDxiPlJlcXVlc3RlZCwgbm90IGhlbGQ8L2I+CiAgICAke3QubWFwKG49PmA8c3Bhbj4ke2Mobil9PC9zcGFuPmApLmpvaW4oIiIpfQogIDwvZGl2PmA6IiJ9LEx1PWU9PlN0cmluZyhlLmhvbGRVbnRpbD8/IiIpLnNsaWNlKDAsMTYpLnJlcGxhY2UoIlQiLCIgIiksZWs9ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmJvb2tpbmdzKSYmZS5ib29raW5ncy5sZW5ndGg/ZS5ib29raW5nczpbZS5ib29raW5nPz97fV0sbj10Lmxlbmd0aD4xLG89KHIscyxhKT0+W2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+Q29uZmlybWF0aW9uIGNvZGU8L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKHIuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke2Moci5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke2MoR2Uoci5zdGF5KSl9IMK3ICR7YyhyLmd1ZXN0Py5uYW1lPz8iIil9PC9kaXY+CiAgICAgICA8L2Rpdj5gLG4mJkd0PT09ImhvbGQiP2A8ZGl2IGNsYXNzPSJub3RlIj5IZWxkIHVudGlsICR7YyhMdShyKSl9IFVUQy48L2Rpdj5gOiIiLEd0PT09InBheS1hdC1ob3RlbCImJnIuc3RhdHVzPT09InJlcXVlc3RlZCI/YDxkaXYgY2xhc3M9Im5vdGUiPldhaXRpbmcgZm9yICR7YyhSZSl9IHRvIGNvbmZpcm0gdGhpcyBib29raW5nIOKAlCB0aGF0IHRha2VzIHVwIHRvIGVpZ2h0IG1pbnV0ZXMuIE15IGJvb2tpbmdzIHNob3dzIHdoZW4gaXQgaGFzLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7YyhzKX08L3NwYW4+PC9kaXY+YCxYXyhhKSxgPGRpdiBjbGFzcz0icm93cyI+JHsoci5xdW90ZT8ubGluZXM/P1tdKS5tYXAobmspLmpvaW4oIiIpfTwvZGl2PmAsbj9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAke3B0KCJsaXN0RXh0cmFzIik/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPmA6IiJ9CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtjKHIuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bbmUoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwga2VlcHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyAke3B0KCJjaGFuZ2VCb29raW5nIik/ImNoYW5nZWQgb3IgY2FuY2VsbGVkIjoiY2FuY2VsbGVkIn0gb24gaXRzIG93bi48L2Rpdj5gOiIiLEd0PT09InBheS1hdC1ob3RlbCI/YDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJFYWNoIGlzIjoiVGhpcyBpcyJ9ICR7YyhSZSl9J3Mgb3duIHJlc2VydmF0aW9uLCBwYWlkIGF0IHRoZSBob3RlbC4gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmA6YDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgdGhlIHRpbWUgdW5kZXIgZWFjaCBjb2RlLiI6YFRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke2MoTHUodFswXSkpfSBVVEMuYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAocj0+bj9vKHIsU3RyaW5nKHIudG90YWw/PyIiKSxyKTpvKHIsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmAke3B0KCJsaXN0RXh0cmFzIik/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj5gOiIifQogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2ModFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+YH0KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sdGs9ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLmRldGFpbD8/ZS53aHk/PyJUaGF0IGNvdWxkIG5vdCBiZSBkb25lLiIpfTwvZGl2PmAscm4+MD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiPlZpZXcgdGhlIHRyaXA8L2J1dHRvbj48L2Rpdj4nOiIiXS5qb2luKCIiKSxuaz1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhlLmtpbmQ9PT0icm9vbSI/R2UoZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAsb2s9e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIixmYWlsZWQ6ImJhZCJ9LHJrPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5RYy5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke2Mobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LHNrPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdLG49ZS5ub3RGb3VuZD9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS50b29NYW55P2Uubm90Rm91bmRMaW5lOmBObyBib29raW5nIG1hdGNoZXMgJHtlLm5vdEZvdW5kfSB3aXRoIHRoYXQgZW1haWwuIEJvdGggaGF2ZSB0byBiZSBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLmApfTwvZGl2PmA6IiI7cmV0dXJuIGUubm90Rm91bmQmJnQubGVuZ3RoPT09MD9gJHtufQogICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5UcnkgYWdhaW48L2J1dHRvbj48L2Rpdj5gOnQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOltuZSgpLG4sYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKG8uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2MoR2Uoby5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke3JrKG8pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtva1tTdHJpbmcoby5zdGF0dXMpXT8/IiJ9Ij4ke2Moby5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKG8ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke28uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG8uc3RhdHVzPT09ImNvbmZpcm1lZCI/YCR7cHQoImxpc3RFeHRyYXMiKT9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+YDoiIn0KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsPC9idXR0b24+YDoiIn08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIil9LFV1PWU9Pntjb25zdCB0PWUudmlldz09PSJjYW5jZWxsZWQiLG49ZS5ib29raW5nPz97fTtyZXR1cm5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDYW5jZWxsZWQiOiJDYW5jZWxsaW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtjKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sRnU9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNoYW5nZWQiLG49ZS5ib29raW5nPz97fSxvPWUuZnJvbT8/e30scj1lLnRvLHM9ISFyJiYoci5jaGVja0luIT09by5jaGVja0lufHxyLmNoZWNrT3V0IT09by5jaGVja091dHx8TnVtYmVyKHIucm9vbXMpIT09TnVtYmVyKG8ucm9vbXMpfHxyLnJvb21OYW1lIT09by5yb29tTmFtZSksYT0oaSx1LGwpPT51P2A8ZGl2IGNsYXNzPSJsZWcke2w/IiB3YXMiOiIifSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnayI+JHtjKGkpfTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ3YiPiR7Yyh1LmNoZWNrSW4pfSDihpIgJHtjKHUuY2hlY2tPdXQpfSDCtyAke2ModS5uaWdodHMpfSAke051bWJlcih1Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnbSI+JHtjKHUucm9vbU5hbWUpfSR7TnVtYmVyKHUucm9vbXMpPjE/YCDCtyAke2ModS5yb29tcyl9IHJvb21zYDoiIn0gwrcgJHtjKHUudG90YWwpfTwvZGl2PgogICAgICAgICA8L2Rpdj5gOiIiO3JldHVybltuZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2hhbmdlZCI6IkNoYW5naW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsZS5ob3RlbE5hbWU/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLmhvdGVsTmFtZSl9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibGVncyI+JHthKHQ/IldhcyI6Ik5vdyIsZS5mcm9tLHMpfSR7YSh0PyJOb3ciOiJXb3VsZCBiZSIsZS50bywhMSl9PC9kaXY+YCxlLmFkZE9uP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPiR7YyhlLmFkZE9uLm5hbWUpfTwvc3Bhbj48c3Bhbj4ke2MoZS5hZGRPbi5mcm9tKX0g4oaSICR7YyhlLmFkZE9uLnRvKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixlLmRpZmZlcmVuY2U/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtlLnJlZnVuZER1ZT90PyJUaGUgZGVzayBvd2VzIjoiV291bGQgY29tZSBiYWNrIjp0PyJUaGUgZGVzayBhc2tzIGZvciI6IldvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5kaWZmZXJlbmNlKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUucnVsZSl9PC9kaXY+YCx0Pyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+PC9kaXY+JzplLmNoYW5nZWFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5MZWF2ZSBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNoYW5nZT0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij4ke2UuYWRkT24mJmUuZnJvbT8uY2hlY2tJbj09PWUudG8/LmNoZWNrSW4mJmUuZnJvbT8uY2hlY2tPdXQ9PT1lLnRvPy5jaGVja091dD8iVXBkYXRlIHRoZSBib29raW5nIjoiTW92ZSB0aGUgYm9va2luZyJ9PC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIil9LGdzPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS52aWV3PT09InBvbGljeSI/YDxoND4ke2MoZS50aXRsZSl9PC9oND4ke2MoZS50ZXh0KX1gOihlLnRvcGljcz8/W10pLm1hcChvPT5gPGg0PiR7YyhvLnRpdGxlKX08L2g0PiR7YyhvLnRleHQpfWApLmpvaW4oIiIpO3JldHVybltgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7Yyh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgdGhlIGhvdGVsIHB1Ymxpc2hlczwvZGl2PjwvZGl2PmAsZS52aWV3PT09InBvbGljeS1taXNzaW5nIj9gPGRpdiBjbGFzcz0iZW1wdHkiPiR7Yyh0Lm5hbWUpfSBkb2VzIG5vdCBwdWJsaXNoIGFueXRoaW5nIGFib3V0IHRoYXQgaGVyZS48L2Rpdj5gOmA8ZGl2IGNsYXNzPSJwcm9zZSI+JHtufTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPkJhY2sgdG8gJHtjKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LGlrPWU9Pntjb25zdCB0PWUuY29sdW1ucz8/W10sbj1lLnJvd0xhYmVscz8/W10sbz10LnNvbWUocz0+cy5yZWNvbW1lbmRlZCkscj1zPT5gCiAgICA8ZGl2IGNsYXNzPSJjbXAtaGVhZCR7cy5yZWNvbW1lbmRlZD8iIHBpY2siOiIifSR7bz8iIG1hcmtlZCI6IiJ9Ij4KICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJwaWNrbWFyayR7cy5yZWNvbW1lbmRlZD8iIjoiIG5vbmUifSI+JHtzLnJlY29tbWVuZGVkPyJSZWNvbW1lbmRlZCI6IiJ9PC9kaXY+YDoiIn0KICAgICAgPGJ1dHRvbiBjbGFzcz0idC1zaG90IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhzLmhvdGVsLmlkKX0iIHN0eWxlPSIke0J0KFN0cmluZyhzLmhvdGVsLmlkKSl9Ij4KICAgICAgICAke3MuaG90ZWwuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Mocy5ob3RlbC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoSHQoU3RyaW5nKHMuaG90ZWwubmFtZSkpKX08L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtjKHMuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHtzLnByaWNlP2Ake2Mocy5wcmljZS5zdGF5VG90YWwpfTxzbWFsbCBjbGFzcz0ic3ViIj50b3RhbCDCtyAke2Mocy5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPmA6cy5mcm9tP2A8c21hbGw+RnJvbSA8L3NtYWxsPiR7YyhzLmZyb20pfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0id2h5JHtzLmJlc3RGb3I/IiI6IiBub25lIn0iPiR7cy5iZXN0Rm9yP2Mocy5iZXN0Rm9yKToiIn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGMiPiR7Wy4uLihzLnByb3M/P1tdKS5tYXAoYT0+YDxkaXYgY2xhc3M9InBybyI+PHNwYW4gY2xhc3M9Im0iPis8L3NwYW4+PHNwYW4+JHtjKGEpfTwvc3Bhbj48L2Rpdj5gKSwuLi4ocy5jb25zPz9bXSkubWFwKGE9PmA8ZGl2IGNsYXNzPSJjb24iPjxzcGFuIGNsYXNzPSJtIj7iiJI8L3NwYW4+PHNwYW4+JHtjKGEpfTwvc3Bhbj48L2Rpdj5gKV0uam9pbigiIil9PC9kaXY+CiAgICA8L2Rpdj5gO3JldHVybltuZSgpLGUudGl0bGU/YDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PmA6IiIsZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoR2UoZS5zdGF5KSl9PC9kaXY+YDoiIixBcnJheS5pc0FycmF5KGUuY3VycmVuY2llcykmJmUuY3VycmVuY2llcy5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VzIGFyZSBpbiBlYWNoIGhvdGVsJ3Mgb3duIGN1cnJlbmN5ICgke2MoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSkuIFRoZXkgYXJlIG5vdCBjb252ZXJ0ZWQsIHNvIHRoZSBjb2x1bW5zIGFyZSBub3QgYSBwcmljZSByYW5raW5nLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImNtcC13cmFwIj48ZGl2IGNsYXNzPSJjbXAke3QubGVuZ3RoPj00PyIgZm91ciI6IiJ9IiBzdHlsZT0iLS1jb2xzOiR7dC5sZW5ndGh9Oy0taGVhZC1yb3dzOiR7bz82OjV9Ij4KICAgICAgIDxkaXYgY2xhc3M9ImNtcC1jb3JuZXIiPjwvZGl2PgogICAgICAgJHt0Lm1hcChyKS5qb2luKCIiKX0KICAgICAgICR7bi5tYXAoKHMsYSk9PmA8ZGl2IGNsYXNzPSJrIj4ke2Mocyl9PC9kaXY+JHt0Lm1hcChpPT5gPGRpdiBjbGFzcz0idiR7YSUyPyIgYWx0IjoiIn0iPiR7YyhpLnJvd3M/LlthXT8udmFsdWU/PyLigJQiKX08L2Rpdj5gKS5qb2luKCIiKX1gKS5qb2luKCIiKX0KICAgICA8L2Rpdj48L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKHM9PmAke2Mocy5uYW1lKX06ICR7YyhzLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPk9wZW4gYSAke2MoZS52b2NhYj8ubm91bj8/ImhvdGVsIil9IHRvIHNlZSBpdHMgcm9vbXMke2Uuc3RheT8uY2hlY2tJbj8iIGZvciB0aGVzZSBuaWdodHMiOiIifS48L2Rpdj5gXS5qb2luKCIiKX0sYWs9ZT0+e2NvbnN0IHQ9ZS5kYXlzPz9bXSxuPWk9PmA8c3BhbiBjbGFzcz0iaW5zdGF0ZSAke2kuYm9va2VkfHxpLmluVHJpcD8ieWVzIjoibm8ifSI+JHtpLmJvb2tlZD9gQm9va2VkIMK3ICR7YyhpLmJvb2tlZCl9YDppLmluVHJpcD8iSW4gdGhlIHRyaXAiOiJQbGFuIG9ubHkifTwvc3Bhbj5gLG89aT0+YCBkYXRhLWhvdGVsPSIke2MoaS5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIiR7aS5jaGVja0luP2AgZGF0YS1jaT0iJHtjKGkuY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoaS5jaGVja091dCl9ImA6IiJ9YCxyPWk9PmkuY2hlY2tvdXQ/YDxkaXYgY2xhc3M9InBsYW4tbmlnaHQiJHtvKGkpfT48c3Bhbj5DaGVjayBvdXQgwrcgJHtjKGkubmFtZSl9PC9zcGFuPjwvZGl2PmA6TnVtYmVyKGkubmlnaHQ/PzEpPjE/YDxkaXYgY2xhc3M9InBsYW4tbmlnaHQiJHtvKGkpfT4KICAgICAgICAgICA8c3Bhbj5OaWdodCAke2MoaS5uaWdodCl9IG9mICR7YyhpLm5pZ2h0cyl9IMK3ICR7YyhpLm5hbWUpfTwvc3Bhbj4ke24oaSl9CiAgICAgICAgIDwvZGl2PmA6YDxkaXYgY2xhc3M9InBsYW4tc3RheSIke28oaSl9PgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcy1zaG90IiBzdHlsZT0iJHtCdChTdHJpbmcoaS5pZCkpfSI+JHtpLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGkuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6YDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhIdChTdHJpbmcoaS5uYW1lKSkpfTwvc3Bhbj5gfTwvc3Bhbj4KICAgICAgICAgICA8c3BhbiBjbGFzcz0icHMtYm9keSI+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldGEiPiR7YyhbaS5kZXRhaWwsaS5uaWdodHM/YCR7aS5uaWdodHN9ICR7aS5uaWdodHM9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IGhlcmVgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAke2kucHJpY2U/YDxzcGFuIGNsYXNzPSJwcy1wcmljZSI+JHtjKGkucHJpY2UpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICAgJHtuKGkpfQogICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgPC9kaXY+YCxzPWk9PmAKICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKFtpLmRldGFpbCxpLnByaWNlXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgICR7bihpKX0KICAgIDwvZGl2PmAsYT1pPT4oaS5wbGFuPz9bXSkubGVuZ3RoP2A8b2wgY2xhc3M9Im1vbWVudHMiPiR7aS5wbGFuLm1hcCh1PT5gPGxpPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGVuIj4ke2ModS50aW1lPz8iIil9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGF0Ij48Yj4ke2ModS53aGF0KX08L2I+JHt1Lm5vdGU/YDxzbWFsbD4ke2ModS5ub3RlKX08L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICA8L2xpPmApLmpvaW4oIiIpfTwvb2w+YDoiIjtyZXR1cm5bbmUoKSxgPGRpdj4KICAgICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgJHtlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhHZShlLnN0YXkpKX08L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9ImdhcCI+PGI+JHtjKE51bWJlcihlLmluVHJpcD8/MCkrTnVtYmVyKGUuYm9va2VkPz8wKSl9LyR7YyhlLnBsYW5uZWQpfTwvYj48c3Bhbj4ke2MoZS5nYXA/PyIiKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0iZGF5cyI+JHt0Lm1hcCgoaSx1KT0+YAogICAgICA8ZGl2IGNsYXNzPSJkYXlyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImRheW51bSI+PGI+JHt1KzF9PC9iPjxpPjwvaT48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXlib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRheWxhYmVsIj4ke2MoaS5sYWJlbCl9JHtpLmRhdGU/YDxzbWFsbD4gwrcgJHtjKGNrKFN0cmluZyhpLmRhdGUpKSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtpLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7YyhpLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAke2EoaSl9CiAgICAgICAgICAkeyhpLml0ZW1zPz9bXSkubWFwKGw9Pmwua2luZD09PSJob3RlbCI/cihsKTpzKGwpKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChpPT5gJHtjKGkubmFtZSl9OiAke2MoaS53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sY2s9ZT0+bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KSx4ZT0oZSx0PSExKT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2NvbnN0IG49dCYmZS52aWV3PT09Im1lbWJlciImJlg/ey4uLmUsbWVtYmVyOlh9OmU7bi50b29sTmFtZXMmJihKYz1uLnRvb2xOYW1lcyksKG4uYm9va2luZ01vZGU9PT0icGF5LWF0LWhvdGVsInx8bi5ib29raW5nTW9kZT09PSJob2xkIikmJihHdD1uLmJvb2tpbmdNb2RlKSxuLmJyYW5kJiYoUmU9U3RyaW5nKG4uYnJhbmQpKSxuLmxvZ29VcmwmJihmcz1TdHJpbmcobi5sb2dvVXJsKSksdHlwZW9mIG4uZGVtbz09ImJvb2xlYW4iJiYod2Y9bi5kZW1vKSxuLmRlbW9Ob3RlJiYoJGY9U3RyaW5nKG4uZGVtb05vdGUpKSx0eXBlb2Ygbi5yb29tc193YW50ZWQ9PSJudW1iZXIiP1k9bi5yb29tc193YW50ZWQ6KG4udmlldz09PSJob3RlbHMifHxuLnZpZXc9PT0iZGVzdGluYXRpb25zInx8bi52aWV3PT09Im5vLWhvdGVscyIpJiZuLnN0YXk/LmNoZWNrSW4mJiFodCYmKFk9TWF0aC5tYXgoMSxOdW1iZXIobi5hc2s/LnJvb21zPz8xKXx8MSkpLHR8fChuLnZpZXc9PT0ibWVtYmVyIiYmbi5tZW1iZXI/LnRpZXI/Lm5hbWU/WD1uLm1lbWJlcjpuLm1lbWJlcj8udGllcj8ubmFtZSYmKFg9WD8ucHJvZ3JhbW1lPT09bi5tZW1iZXIucHJvZ3JhbW1lJiZYPy50aWVyPy5uYW1lPT09bi5tZW1iZXIudGllci5uYW1lP3suLi5YLC4uLm4ubWVtYmVyLHByZWZlcmVuY2VzOm4ubWVtYmVyLnByZWZlcmVuY2VzfTpuLm1lbWJlciksKG4udmlldz09PSJzaWduZWQtb3V0Inx8bi5zaWduZWRJbj09PSExKSYmKFg9bnVsbCkpLG4uc3RheT8uY2hlY2tJbiYmIVl0JiYhaHQmJihUPXtjaGVja0luOm4uc3RheS5jaGVja0luLGNoZWNrT3V0Om4uc3RheS5jaGVja091dCxndWVzdHM6bi5zdGF5Lmd1ZXN0cz8/Mn0pLCFLYyYmKG4udmlldz09PSJ0cmlwInx8bi52aWV3PT09Im5lZWRzLWRhdGVzIikmJihrdD1uLmxpbmVzPz9bXSksKG4udmlldz09PSJib29raW5nInx8bi52aWV3PT09ImVtcHR5LXRyaXAiKSYmKGt0PVtdLHJuPTApLFVlPVN0cmluZyhuLnZpZXc/PyIiKSxTZigpO2NvbnN0IG89cGUoImJyYW5kIik7ZnM/KG8uc3JjPWZzLG8uaGlkZGVuPSExLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KG8uaGlkZGVuPSEwLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMSxwZSgidGl0bGUiKS50ZXh0Q29udGVudD1SZXx8IkhvdGVscyIpLHBlKCJzdWIiKS50ZXh0Q29udGVudD1kayhuKSxoaygpLHBrKCk7Y29uc3Qgcj17aG90ZWxzOlVfLGRlc3RpbmF0aW9uczpSXywibm8taG90ZWxzIjpGXyxob3RlbDpxdSwibm8tcm9vbXMiOnF1LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOlZfLHRyaXA6S18sIm5lZWRzLWRhdGVzIjpsayxib29raW5nOmVrLCJuZWVkcy1ndWVzdCI6R18sbWVtYmVyOlFfLCJtZW1iZXItbm90LWZvdW5kIjpZXywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpzaywiY2FuY2VsbGF0aW9uLXByZXZpZXciOlV1LGNhbmNlbGxlZDpVdSwiY2hhbmdlLXByZXZpZXciOkZ1LGNoYW5nZWQ6RnUsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOmlrLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTphaywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpncyxwb2xpY2llczpncywicG9saWN5LW1pc3NpbmciOmdzLGVycm9yOnRrLCJmaW5kLWJvb2tpbmciOigpPT5bbmUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+QSBib29raW5nIG1hZGUgaW4gYW5vdGhlciBjb252ZXJzYXRpb24gaXMgZm91bmQgd2l0aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCBpdCB3YXMgbWFkZSB3aXRoIC0gYm90aCwgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb3JtIj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgICAgICAgPGxhYmVsPkNvbmZpcm1hdGlvbiBjb2RlPGlucHV0IGlkPSJmY29kZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJTTC3igKYiPjwvbGFiZWw+CiAgICAgICAgICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImZtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgb25lIG9uIHRoZSBib29raW5nIj48L2xhYmVsPgogICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJsb29rdXAtYm9va2luZyI+RmluZCBpdDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gXS5qb2luKCIiKSwibm8tbWVtYmVyIjooKT0+YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob2JvZHkgaXMgc2lnbmVkIGluLCBzbyB0aGVyZSBpcyBub3RoaW5nIHNhdmVkIHRvIGZvcmdldC48L2Rpdj4ke01vKCEwKX1gLCJtZW1iZXItc2lnbi1pbiI6KCk9PltuZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5TaWduIGluIHdpdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBwcmludGVkIG9uIHRoZSBjYXJkIHRvIHNlZSB0aGUgbWVtYmVyIHJhdGUgb24gZXZlcnkgcHJpY2UgaGVyZS48L2Rpdj4nLE1vKCEwKV0uam9pbigiIil9OyhVZT09PSJob3RlbCJ8fFVlPT09Im5vLXJvb21zInx8VWU9PT0ibmVlZHMtZGF0ZXMiKSYmbi5ob3RlbD8uaWQ/KFd0PVN0cmluZyhuLmhvdGVsLmlkKSxuLm5lZWRzRGF0ZXMmJnNldFRpbWVvdXQoKCk9PnVzKDAsIWlzKSwwKSk6KFd0PSIiLFljKCkpLHE9bjtjb25zdCBzPXJbVWVdO3BlKCJjb250ZW50IikuaW5uZXJIVE1MPShzP3Mobik6YDxkaXYgY2xhc3M9ImVyciI+JHtjKG4uZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtuLmRldGFpbD9gPGJyPiR7YyhuLmRldGFpbCl9YDoiIn08L2Rpdj5gKSt1ayhuKSxVZT09PSJob3RlbHMiJiYhY24oKSYmKEdjPVdjKCksY3MoKSE9PWpvJiZ4ZShuLHQpKX0sdWs9ZT0+e2NvbnN0IHQ9ISFFZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2Usbj0oZS5zdWdnZXN0aW9ucz8/W10pLm1hcCgobyxyKT0+bz8uYXNrfHxvPy5hc2tzPy5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zdWdnZXN0PSIke3J9Ij4ke2Moby5sYWJlbCl9PC9idXR0b24+YDpvPy5zYXkmJnQ/YDxidXR0b24gY2xhc3M9ImNoaXAgc2F5IiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfSA8c21hbGw+wrcgaW4gdGhlIGNoYXQ8L3NtYWxsPjwvYnV0dG9uPmA6IiIpLmpvaW4oIiIpO3JldHVybiBuP2A8ZGl2IGNsYXNzPSJzdWdnZXN0Ij4ke259PC9kaXY+YDoiIn0sbGs9ZT0+W25lKCksZS5ob3RlbD9OZihlLmhvdGVsKToiIixgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS53aHk/PyJXaGljaCBuaWdodHM/IEEgcm9vbSBuZWVkcyBhIGNoZWNrLWluIGFuZCBhIGNoZWNrLW91dCBkYXRlLiIpfTwvZGl2PmAsUGYoU3RyaW5nKGUuaG90ZWw/LmlkPz8iIiksZS5ob3RlbD8udG9kYXlUaGVyZSldLmpvaW4oIiIpLGRrPWU9PmUudmlldz09PSJob3RlbHMiP2Ake2UudG90YWw/PzB9ICR7TnVtYmVyKGUudG90YWwpPT09MT8iaG90ZWwiOiJob3RlbHMifWA6ZS52aWV3PT09ImhvdGVsInx8ZS52aWV3PT09Im5vLXJvb21zIj9HZShlLnN0YXkpOmUudmlldz09PSJ0cmlwIj8oZS5saW5lcz8/W10pLmxlbmd0aD9TdHJpbmcoZS50b3RhbD8/IiIpOiIiOmUudmlldz09PSJjb21wYXJpc29uIj9gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgOmUudmlldz09PSJpdGluZXJhcnkiP051bWJlcihlLmJvb2tlZCk+MD9gJHtlLmJvb2tlZH0vJHtlLnBsYW5uZWR9IGJvb2tlZGA6YCR7ZS5pblRyaXB9LyR7ZS5wbGFubmVkfSBpbiB0aGUgdHJpcGA6ZS52aWV3PT09ImJvb2tpbmdzIj9gJHtlLmNvdW50Pz8wfSBib29raW5nJHtOdW1iZXIoZS5jb3VudCk9PT0xPyIiOiJzIn1gOiIiLHBrPSgpPT57Y29uc3QgZT1wZSgibWVtYmVyY2hpcCIpO1g/KGUuaGlkZGVuPSExLGUudGV4dENvbnRlbnQ9YCR7WC50aWVyPy5uYW1lPz8iTWVtYmVyIn0gwrcgJHtNYXRoLnJvdW5kKChYLnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApfSUgb2ZmYCxlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJtZW1iZXIiKSxlLnNldEF0dHJpYnV0ZSgidGl0bGUiLFtYLm5hbWUsWC5wcm9ncmFtbWVdLmZpbHRlcih0PT50eXBlb2YgdD09InN0cmluZyImJnQpLmpvaW4oIiDCtyAiKSkpOihlLmhpZGRlbj0hcHQoInNpZ25JbiIpfHxVZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LGhrPSgpPT57Y29uc3QgZT1wZSgiaGVhZHRyaXAiKSx0PUtjP3JuOnJufHxrdC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fFVlPT09InRyaXAiLHBlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LGZrPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7VD17Y2hlY2tJbjplPy52YWx1ZT8/VC5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9ULmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P1QuZ3Vlc3RzKXx8Mn19LFNvPShlPXt9KT0+VC5jaGVja0luJiZULmNoZWNrT3V0P3tjaGVja0luOlQuY2hlY2tJbixjaGVja091dDpULmNoZWNrT3V0LGd1ZXN0czpULmd1ZXN0cywuLi5lfTplO2xldCBFcyxZdD0hMTtjb25zdCBZYz0oKT0+e2NsZWFyVGltZW91dChFcyksWXQ9ITF9LHVzPShlPTAsdD0hMSk9PntXdCYmKGNsZWFyVGltZW91dChFcyksWXQ9ITAsRXM9c2V0VGltZW91dCgoKT0+e2lmKCFXdCl7WXQ9ITE7cmV0dXJufWlmKEZ0KXt1cygxNTAsdCk7cmV0dXJufVl0PSExLE0oImdldEhvdGVsIix7aG90ZWw6V3Qscm9vbXM6WSwuLi5TbygpfSx0P3tub3RlOnhffTp7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIG5pZ2h0cy4iKSl9LGUpKX0sUj1lPT57cGUoImNvbnRlbnQiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlKX08L2Rpdj5gKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1ob3RlbF0sW2RhdGEtYWN0XSxbZGF0YS1wb2xpY3ldLFtkYXRhLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2hhbmdlXSxbZGF0YS1leHRyYXNdLFtkYXRhLXJvb21zLW5dLFtkYXRhLWFza10sW2RhdGEtYm9va2luZy1leHRyYXNdLFtkYXRhLWJvb2tpbmctZXh0cmFdLFtkYXRhLXN1Z2dlc3RdLFtkYXRhLXBsYWNlXSxbZGF0YS1wbGFjZS1hbGxdLFtkYXRhLXNvcnRdLFtkYXRhLWxpc3Qtcm9vbXNdLFtkYXRhLWZpbHRlcl0sW2RhdGEtcGFuZWxdLFtkYXRhLXJlZ2lvbl0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKGspKTtjb25zdCB6PVdfW25dO2smJnomJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7en0iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksTWYoKTtyZXR1cm59Y29uc3Qgbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1saXN0LXJvb21zIik7aWYobyE9PW51bGwpe1k9TWF0aC5taW4oWnUsTWF0aC5tYXgoMSxZK051bWJlcihvKSkpO2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxybiIpO2smJihrLnRleHRDb250ZW50PVN0cmluZyhZKSkscW8oNDUwKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYociE9PW51bGwpe2ZrKCksWT1NYXRoLm1pbihadSxNYXRoLm1heCgxLFkrTnVtYmVyKHIpKSk7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcoWSkpO2NvbnN0IHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO3omJih6LnRleHRDb250ZW50PWFzKCkpLHVzKDQ1MCk7cmV0dXJufWNvbnN0IHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihzIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix6PXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhZGQiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/WTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxLPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06U28oKTtNKCJhZGRUb1RyaXAiLHtob3RlbDprLHJvb206cyxyb29tczp6LC4uLkt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLWV4dHJhIik7aWYoYSE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZGF5Iik7TSgiYWRkVG9UcmlwIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZXh0cmE6YSxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSwuLi5rP3tkYXk6a306e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UiKTtpZihpIT09bnVsbCl7Y29uc3Qgaz1xPy5hc2s/LnNvcnQsej1xPy52aWV3PT09ImhvdGVscyI/cT8uYXNrPy5xdWVyeTp2b2lkIDA7QXMoKTtjb25zdCBLPXE/LnZpZXc9PT0iZGVzdGluYXRpb25zInx8ISFxPy5zdGF5Py5jaGVja0luO00oImxpc3RIb3RlbHMiLHsuLi5pP3tjaXR5Oml9Ont9LC4uLms/e3NvcnQ6a306e30sLi4uaSYmej97cXVlcnk6en06e30sLi4ucT8udmlldz09PSJob3RlbHMiPyRvKHE/LmFzayk6e30sLi4uSz9RdCgpOnt9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZmlsdGVyIik7aWYodSE9PW51bGwpe2NvbnN0IGs9cT8uYXNrPz97fSx6PSRvKGspO2lmKHUuc3RhcnRzV2l0aCgiYnJhbmQ6Iikpe2NvbnN0IHJlPXUuc2xpY2UoNik7ei5icmFuZD16LmJyYW5kPT09cmU/dm9pZCAwOnJlfWVsc2UgaWYodS5zdGFydHNXaXRoKCJmYWNpbGl0eToiKSl7Y29uc3QgcmU9dS5zbGljZSg5KSxPZT16LmZhY2lsaXRpZXM/P1tdO3ouZmFjaWxpdGllcz1PZS5pbmNsdWRlcyhyZSk/T2UuZmlsdGVyKHV0PT51dCE9PXJlKTpbLi4uT2UscmVdfWVsc2UodT09PSJmcmVlQ2FuY2VsbGF0aW9uInx8dT09PSJicmVha2Zhc3QiKSYmKHpbdV09IXpbdV0pO2NvbnN0IEs9JG8oeik7TSgibGlzdEhvdGVscyIsey4uLk11KGspLC4uLkt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGZpbHRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc29ydCIpO2lmKGwhPT1udWxsKXtJZT1BZjtjb25zdHtzb3J0OmssLi4uen09cT8uYXNrPz97fTtNKCJsaXN0SG90ZWxzIix7Li4ueiwuLi5sIT09Imdyb3VwIj97c29ydDpsfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgcmVvcmRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UtYWxsIik7aWYoZCE9PW51bGwpe00oImxpc3RIb3RlbHMiLHtjaXR5OmQsYWxsOiEwLC4uLlF0KCl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgbT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKG0hPT1udWxsKXtNKCJsaXN0RXh0cmFzIix7Ym9va2luZzptfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgYj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYoYiE9PW51bGwpe00oInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6YixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCB2PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHYhPT1udWxsKXtNKCJsaXN0RXh0cmFzIix7aG90ZWw6diwuLi5TbygpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgXz10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZihfIT09bnVsbCl7TSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzpffSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZih3IT09bnVsbCl7TSgicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6d30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0ICQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZigkIT09bnVsbCl7TSgiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6JCxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBOPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoTiE9PW51bGwpe2NvbnN0IGs9cT8udG8/P3t9LHo9cT8uZnJvbT8/e30sSz1xPy5hZGRPbixyZT1rLmNoZWNrSW4mJihrLmNoZWNrSW4hPT16LmNoZWNrSW58fGsuY2hlY2tPdXQhPT16LmNoZWNrT3V0KTtNKCJjaGFuZ2VCb29raW5nIix7Ym9va2luZzpOLGNvbmZpcm1lZDohMCwuLi5yZT97Y2hlY2tJbjprLmNoZWNrSW4sY2hlY2tPdXQ6ay5jaGVja091dH06e30sLi4uSz8uaWQ/e2V4dHJhOksuaWQscXVhbnRpdHk6TnVtYmVyKEsudG8pfTp7fSwuLi5rLnJvb21zIT09dm9pZCAwJiZOdW1iZXIoay5yb29tcykhPT1OdW1iZXIoei5yb29tcyk/e3Jvb21zOk51bWJlcihrLnJvb21zKX06e30sLi4uay5yb29tTmFtZSYmay5yb29tTmFtZSE9PXoucm9vbU5hbWU/e3Jvb206ay5yb29tTmFtZX06e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNoYW5nZSB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBJPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKEk9PT0iYmFjayIpe0J1KCk7cmV0dXJufWNvbnN0IEc9ST09PSJib29raW5ncyI/ImJvb2tpbmdzIjp0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpJiYhdC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT9gaG90ZWw6JHt0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpfWA6IiI7aWYoRyYmaGUubGVuZ3RoJiZvbihoZS5hdCgtMSk/LnBheWxvYWQpPT09Ryl7QnUoKTtyZXR1cm59Y29uc3Qgb2U9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcmVnaW9uIik7aWYob2UhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikhPT0idHJ1ZSI7Zm9yKGNvbnN0IHogb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmVnaW9uXSIpKXouc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoayYmej09PXQpKTtmb3IoY29uc3QgeiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yZWdpb24tYm9keV0iKSl6LmhpZGRlbj0ha3x8ei5nZXRBdHRyaWJ1dGUoImRhdGEtcmVnaW9uLWJvZHkiKSE9PW9lO3JldHVybn1pZihJPT09Im1vcmUtY291bnRyaWVzIil7Zm9yKGNvbnN0IGsgb2YodC5jbG9zZXN0KCJbZGF0YS1yZWdpb24tYm9keV0iKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZXN0W2hpZGRlbl0iKSlrLmhpZGRlbj0hMTt0LmNsb3Nlc3QoIi5wbGFjZXMiKT8ucmVtb3ZlKCk7cmV0dXJufWlmKEk9PT0ibW9yZS1wbGFjZXMiKXtmb3IoY29uc3QgayBvZih0LmNsb3Nlc3QoIi5wbGFjZXMiKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jaGlwLnBsYWNlW2hpZGRlbl0iKSlrLmhpZGRlbj0hMTt0LnJlbW92ZSgpO3JldHVybn1jb25zdCBKPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsIik7aWYoSiE9PW51bGwpe0llPUllPT09Sj8iIjpKO2Zvcihjb25zdCBrIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsLWJvZHldIikpay5oaWRkZW49ay5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwtYm9keSIpIT09SWU7Zm9yKGNvbnN0IGsgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcGFuZWxdIikpay5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLFN0cmluZyhrLmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpPT09SWUpKTtyZXR1cm59aWYoST09PSJjbGVhci1maWx0ZXJzIil7TSgibGlzdEhvdGVscyIsTXUocT8uYXNrKSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjbGVhciB0aGUgZmlsdGVycy4iKSk7cmV0dXJufWlmKEk9PT0iYWxsLWhvdGVscyIpe0FzKCksTSgibGlzdEhvdGVscyIse2FsbDohMCwuLi5RdCgpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09InByaWNlLWxpc3QiKXtxbygwKTtyZXR1cm59aWYoST09PSJmaW5kLWJvb2tpbmciKXtjb25zdCBrPXt2aWV3OiJmaW5kLWJvb2tpbmcifTt3byhrKSx4ZShrKSxYZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09Imxvb2t1cC1ib29raW5nIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwhei5pbmNsdWRlcygiQCIpKXtSKCJCb3RoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIHRoZSBib29raW5nIHdhcyBtYWRlIHdpdGgsIHBsZWFzZS4iKTtyZXR1cm59TSgibGlzdEJvb2tpbmdzIix7Ym9va2luZzprLGVtYWlsOnp9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvb2sgdGhhdCB1cC4iKSk7cmV0dXJufWlmKEk9PT0iZmluZCIpe3FmKCk7cmV0dXJufWlmKEk9PT0icGFnZS1uZXh0Inx8ST09PSJwYWdlLXByZXYiKXtjb25zdCBrPXE7aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtjb25zdCB6PWNzKCksSz1OdW1iZXIoay5vZmZzZXQ/PzApLHJlPU1hdGgubWluKHosKGsuaG90ZWxzPz9bXSkubGVuZ3RoKTtNKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDpJPT09InBhZ2UtbmV4dCI/SytyZTpNYXRoLm1heCgwLEsteiksbGltaXQ6en0pLnRoZW4oWGUpLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09ImZ1bGxzY3JlZW4iKXtFZS5yZXF1ZXN0RGlzcGxheU1vZGUoe21vZGU6ImZ1bGxzY3JlZW4ifSkudGhlbihrPT57YW49U3RyaW5nKGs/Lm1vZGU/P2FuKTtjb25zdCB6PXE7aWYoIXopcmV0dXJuO2NvbnN0IEs9TnVtYmVyKHoudG90YWw/PzApO2NuKCkmJnoudmlldz09PSJob3RlbHMiJiYoTnVtYmVyKHoub2Zmc2V0Pz8wKT4wfHwoei5ob3RlbHM/P1tdKS5sZW5ndGg8TWF0aC5taW4oMTIsSykpP00oImxpc3RIb3RlbHMiLHsuLi56LmFzaz8/e30sbGltaXQ6MTJ9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk6eGUoeil9KS5jYXRjaCgoKT0+UigiVGhpcyBhcHAgY2Fubm90IG9wZW4gZnVsbCBzY3JlZW4gaGVyZS4iKSk7cmV0dXJufWlmKEk9PT0ibW9yZS1ob3RlbHMiKXtjb25zdCBrPXE7aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtNKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDpOdW1iZXIoay5vZmZzZXQ/PzApKyhrLmhvdGVscz8/W10pLmxlbmd0aCxsaW1pdDoxMn0se2ZvbGQ6ej0+ej8udmlldz09PSJob3RlbHMiP3suLi56LGhvdGVsczpbLi4uay5ob3RlbHM/P1tdLC4uLnouaG90ZWxzPz9bXV0sc2hvd246KGsuaG90ZWxzPz9bXSkubGVuZ3RoKyh6LmhvdGVscz8/W10pLmxlbmd0aCxvZmZzZXQ6TnVtYmVyKGsub2Zmc2V0Pz8wKSxwbGFjZXM6ay5wbGFjZXMsLi4uay53aWRlbmVkP3t3aWRlbmVkOmsud2lkZW5lZH06e319Onp9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgbW9yZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09ImhvbWUiKXtNKCJsaXN0SG90ZWxzIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZigoST09PSJtZW1iZXIifHxJPT09ImZpbmQtYm9va2luZyJ8fEk9PT0iYXNrLXNpZ24taW4iKSYmRnQpcmV0dXJuO2lmKEk9PT0ibWVtYmVyIil7aWYoIVgpcmV0dXJuO2NvbnN0IGs9e3ZpZXc6Im1lbWJlciIsbWVtYmVyOlh9O3dvKGspLHhlKGspLFhlKCk7cmV0dXJufWlmKEk9PT0iYXNrLXNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtpZihrKWsuaGlkZGVuPSExO2Vsc2V7Y29uc3Qgej17dmlldzoibWVtYmVyLXNpZ24taW4ifTt3byh6KSx4ZSh6KSxYZSgpfWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0ic2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCF6KXtSKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59TSgic2lnbkluIix7bnVtYmVyOmssc3VybmFtZTp6fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzaWduIGluLiIpKTtyZXR1cm59aWYoST09PSJmb3JnZXQtcHJlZnMiKXtNKCJmb3JnZXRQcmVmZXJlbmNlcyIse30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgZm9yZ2V0IHRoZW0uIikpO3JldHVybn1jb25zdCBIPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXN1Z2dlc3QiKTtpZihIIT09bnVsbCl7Y29uc3Qgaz0ocT8uc3VnZ2VzdGlvbnM/P1tdKVtOdW1iZXIoSCldO2s/LmFzaz8udG9vbD9NKFN0cmluZyhrLmFzay50b29sKSxrLmFzay5hcmdzPz97fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBkbyB0aGF0IGp1c3Qgbm93LiIpKTpBcnJheS5pc0FycmF5KGs/LmFza3MpJiZrLmFza3MubGVuZ3RoPyhhc3luYygpPT57Zm9yKGNvbnN0W3osS11vZiBrLmFza3MuZW50cmllcygpKWF3YWl0IE0oU3RyaW5nKEsudG9vbCksSy5hcmdzPz97fSx7cHVzaDp6PT09MH0pfSkoKS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHB1dCBhbGwgb2YgdGhlbSBpbiB0aGUgdHJpcCBqdXN0IG5vdy4iKSk6az8uc2F5JiZFZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKGsuc2F5KX1dfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZihJPT09InNpZ24tb3V0Iil7WD1udWxsLE0oInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoST09PSJhc2stYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7ayYmKGsuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJib29rIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLEs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiIscmU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd0aW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsT2U9Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKEZmPT5GZi5kYXRhc2V0LmFzaz8/IiIpLHV0PSEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkO2lmKENlPXtuYW1lOmssZW1haWw6eixub3RlczpLLGFycml2aW5nQXQ6cmUscmVxdWVzdHM6T2UscmVtZW1iZXI6dXR9LCFrfHwhei5pbmNsdWRlcygiQCIpKXtSKGs/J1RoYXQgZW1haWwgaGFzIG5vICJAIiBpbiBpdCAtIHRoZSBjb25maXJtYXRpb24gbmVlZHMgYW4gYWRkcmVzcyBpdCBjYW4gcmVhY2guJzoiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufU0oInJlcXVlc3RCb29raW5nIix7bmFtZTprLGVtYWlsOnosLi4uSz97bm90ZXM6S306e30sLi4ucmU/e2Fycml2aW5nQXQ6cmV9Ont9LC4uLk9lLmxlbmd0aD97cmVxdWVzdHM6T2V9Ont9LC4uLnV0P3tyZW1lbWJlclJlcXVlc3RzOiEwfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKEk9PT0iYm9va2luZ3MiKXtNKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKEk9PT0idHJpcCIpe00oInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgZ2U9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihnZSl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLHo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTtrJiZ6JiYoVC5jaGVja0luPWssVC5jaGVja091dD16KSxNKCJnZXRIb3RlbCIse2hvdGVsOmdlLC4uLlNvKCksLi4uVC5jaGVja0luJiZZPjE/e3Jvb21zOll9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfX0pO2NvbnN0IE1mPSgpPT57aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpKXJldHVybjtjb25zdCBlPXQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpPy52YWx1ZT8/IiI7Q2U9e25hbWU6ZSgiZ25hbWUiKSxlbWFpbDplKCJnbWFpbCIpLG5vdGVzOmUoImdub3RlIiksYXJyaXZpbmdBdDplKCJndGltZSIpLHJlcXVlc3RzOlsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcCh0PT50LmRhdGFzZXQuYXNrPz8iIikscmVtZW1iZXI6ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWR9fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmlkPz8iIjtbImduYW1lIiwiZ21haWwiLCJnbm90ZSIsImd0aW1lIiwiZ3JlbWVtYmVyIl0uaW5jbHVkZXModCkmJk1mKCl9KTtjb25zdCBCdT0oKT0+e2Zvcig7aGUuYXQoLTEpPy5wYXlsb2FkPy52aWV3PT09Im1lbWJlciImJiFYOyloZT1oZS5zbGljZSgwLC0xKTtjb25zdCBlPWhlLmF0KC0xKTtpZighZXx8RnQpe1NmKCk7cmV0dXJufWhlPWhlLnNsaWNlKDAsLTEpLFpvKz0xLFljKCksRGYoKTtjb25zdCB0PWUudmVyc2lvbj09PVJvP3ZvaWQgMDokXyhlLnBheWxvYWQpO3Q/KHE9ZS5wYXlsb2FkLE0odC5rZXksdC5hcmdzLHtwdXNoOiExfSkuY2F0Y2goKCk9PnhlKGUucGF5bG9hZCwhMCkpLmZpbmFsbHkoWGUpKTooeGUoZS5wYXlsb2FkLCEwKSxYZSgpKX0scWY9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aGVyZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFlKXtSKCJXaGVyZSB0bz8gQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbC4iKTtyZXR1cm59QXMoKTtjb25zdCBuPShxPy5yZWdpb25zPz9bXSkuZmxhdE1hcChvPT4oby5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKHI9PltyLm5hbWUsLi4uKHIuY2l0aWVzPz9bXSkubWFwKHM9PnMubmFtZSldKSkuZmluZChvPT5vLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpO00oImxpc3RIb3RlbHMiLHsuLi5uP3tjaXR5Om59OntxdWVyeTplfSwuLi5RdCgpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzZWFyY2gganVzdCBub3cuIikpfSxBcz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjbyIpO2U/LnZhbHVlJiYoVC5jaGVja0luPWUudmFsdWUpLHQ/LnZhbHVlJiYoVC5jaGVja091dD10LnZhbHVlKSxlPy52YWx1ZSYmKGlzPSEwKX07bGV0IE9zLGh0PSExO2NvbnN0IERmPSgpPT57Y2xlYXJUaW1lb3V0KE9zKSxodD0hMX0sbWs9ZT0+ZT8udmlldz09PSJob3RlbHMifHxlPy52aWV3PT09Im5vLWhvdGVscyImJiEhZT8uYXNrLHFvPShlPTApPT57Y2xlYXJUaW1lb3V0KE9zKSxodD0hMCxPcz1zZXRUaW1lb3V0KCgpPT57aWYoIW1rKHEpKXtodD0hMTtyZXR1cm59aWYoRnQpe3FvKDE1MCk7cmV0dXJufWh0PSExLE0oImxpc3RIb3RlbHMiLHsuLi5OXyhxPy5hc2spLC4uLlF0KCl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHByaWNlIHRob3NlIG5pZ2h0cy4iKSl9LGUpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57aWYoZS50YXJnZXQ/LmlkPT09IndoZXJlIiYmZS5rZXk9PT0iRW50ZXIiJiYhZS5pc0NvbXBvc2luZyl7ZS5wcmV2ZW50RGVmYXVsdCgpLHFmKCk7cmV0dXJufWNvbnN0IHQ9ZS50YXJnZXQ7IXR8fHQuZ2V0QXR0cmlidXRlKCJyb2xlIikhPT0iYnV0dG9uInx8ZS5rZXkhPT0iRW50ZXIiJiZlLmtleSE9PSIgInx8KGUucHJldmVudERlZmF1bHQoKSx0LmNsaWNrKCkpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDt0Py50eXBlPT09ImRhdGUiJiYoaXM9ITApO2NvbnN0IG89e2RjaTpbImRjaSIsImRjbyJdLGRjbzpbImRjaSIsImRjbyJdLGxjaTpbImxjaSIsImxjbyJdLGxjbzpbImxjaSIsImxjbyJdfVt0Py5pZD8/IiJdO2lmKG8pe2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1swXSksdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzFdKTtpZighaXx8IXUpcmV0dXJuO2lmKHQuaWQ9PT1vWzBdJiZpLnZhbHVlKXtjb25zdCBsPUplKGkudmFsdWUsMSk7dS5taW49bCwoIXUudmFsdWV8fHUudmFsdWU8PWkudmFsdWUpJiYodS52YWx1ZT1sKX1ULmNoZWNrSW49aS52YWx1ZXx8VC5jaGVja0luLFQuY2hlY2tPdXQ9dS52YWx1ZXx8VC5jaGVja091dCxvWzBdPT09ImxjaSImJnFvKDMwMCk7cmV0dXJufWlmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIXJ8fCFzKXJldHVybjtpZih0LmlkPT09ImNpIiYmci52YWx1ZSl7Y29uc3QgaT1KZShyLnZhbHVlLDEpO3MubWluPWksKCFzLnZhbHVlfHxzLnZhbHVlPD1yLnZhbHVlKSYmKHMudmFsdWU9aSl9VC5jaGVja0luPXIudmFsdWV8fFQuY2hlY2tJbixULmNoZWNrT3V0PXMudmFsdWV8fFQuY2hlY2tPdXQ7Y29uc3QgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7YSYmKGEudGV4dENvbnRlbnQ9YXMoKSksdXMoKX0pO2NvbnN0IExmPShlLHQpPT57dHJ5e3pmKHQpO2NvbnN0IG49ZT9KU09OLnN0cmluZ2lmeShlKToiIjtpZihuJiZuPT09VGYmJkpTT04uc3RyaW5naWZ5KHEpPT09SWYpcmV0dXJuO2U/LnN0YXk/LmNoZWNrSW4mJihpcz0hMCksaGU9W10sWm8rPTEsWWMoKSxEZigpLEllPUFmLHhlKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxwZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07RWUub250b29scmVzdWx0PWU9PkxmKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtjb25zdCBVZj1lPT57QXJyYXkuaXNBcnJheShlPy5hdmFpbGFibGVEaXNwbGF5TW9kZXMpJiYoWmY9ZS5hdmFpbGFibGVEaXNwbGF5TW9kZXMubWFwKFN0cmluZykpLHR5cGVvZiBlPy5kaXNwbGF5TW9kZT09InN0cmluZyImJmUuZGlzcGxheU1vZGUhPT1hbiYmKGFuPWUuZGlzcGxheU1vZGUscT8udmlldz09PSJob3RlbHMiJiZ4ZShxKSl9O2xldCBIdTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e2NsZWFyVGltZW91dChIdSksSHU9c2V0VGltZW91dCgoKT0+e3E/LnZpZXchPT0iaG90ZWxzInx8Y24oKXx8KEdjPVdjKCksY3MoKSE9PWpvJiZ4ZShxKSl9LDE1MCl9KTtFZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT57X2YoZSxrZiksVWYoZSl9O0VlLmNvbm5lY3QoKS50aGVuKCgpPT57Y29uc3QgZT1FZS5nZXRIb3N0Q29udGV4dCgpO19mKGUsa2YpLFVmKGUpO2NvbnN0IHQ9ZT8udG9vbEluZm8/LnJlc3VsdD8uc3RydWN0dXJlZENvbnRlbnQ7dCYmTGYodCxlPy50b29sSW5mbz8ucmVzdWx0Py5fbWV0YSl9KS5jYXRjaCgoKT0+e3BlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+Q291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGhvc3QuPC9kaXY+J30pOzwvc2NyaXB0PgogICAgPHN0eWxlIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4+OnJvb3R7LS1raXQtYmc6ICNmZmZmZmY7LS1raXQtYmctc29mdDogI2Y2ZjdmOTstLWtpdC1mZzogIzFhMWYyYjstLWtpdC1mZy1zb2Z0OiAjNjI2YjdhOy0ta2l0LWZnLWZhaW50OiAjOGE5M2ExOy0ta2l0LWxpbmU6ICNlM2U3ZWQ7LS1raXQtYWNjZW50OiAjMWExZjJiOy0ta2l0LWFjY2VudC1mZzogI2ZmZmZmZjstLWtpdC1saW5rOiAjMjU2M2ViOy0ta2l0LWdvb2Q6ICMxYTdmNWE7LS1raXQtZ29vZC1iZzogI2RkZjNlNDstLWtpdC1iYWQ6ICNiMzI2MWU7LS1raXQtYmFkLWJnOiAjZmJlNmU0Oy0ta2l0LXdhcm46ICM4YTVhMDA7LS1raXQtd2Fybi1iZzogI2ZkZjBkNTstLWtpdC1yaW5nOiAjMjU2M2VifVtkYXRhLXRoZW1lPWRhcmtdey0ta2l0LWJnOiAjMWQxZjIzOy0ta2l0LWJnLXNvZnQ6ICMyNjI5MmU7LS1raXQtZmc6ICNlY2VlZjE7LS1raXQtZmctc29mdDogI2E0YWJiNjstLWtpdC1mZy1mYWludDogIzdjODQ5MTstLWtpdC1saW5lOiAjMzYzYTQxOy0ta2l0LWFjY2VudDogI2VjZWVmMTstLWtpdC1hY2NlbnQtZmc6ICMxZDFmMjM7LS1raXQtbGluazogIzdhYTdmZjstLWtpdC1nb29kOiAjNmZkM2EyOy0ta2l0LWdvb2QtYmc6ICMxZjNhMmQ7LS1raXQtYmFkOiAjZmY4YTgwOy0ta2l0LWJhZC1iZzogIzNkMjMyMjstLWtpdC13YXJuOiAjZjJjNDZiOy0ta2l0LXdhcm4tYmc6ICMzYTMwMjA7LS1raXQtcmluZzogIzdhYTdmZn06cm9vdHstLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnksIHZhcigtLWtpdC1iZykpOy0tYmctc29mdDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnksIHZhcigtLWtpdC1iZy1zb2Z0KSk7LS1mZzogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5LCB2YXIoLS1raXQtZmcpKTstLWZnLXNvZnQ6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtZmctc29mdCkpOy0tZmctZmFpbnQ6IHZhcigtLWNvbG9yLXRleHQtdGVydGlhcnksIHZhcigtLWtpdC1mZy1mYWludCkpOy0tbGluZTogdmFyKC0tY29sb3ItYm9yZGVyLXByaW1hcnksIHZhcigtLWtpdC1saW5lKSk7LS1hY2NlbnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudCkpOy0tYWNjZW50LWZnOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQtZmcpKTstLWxpbms6IHZhcigtLWNvbG9yLXRleHQtaW5mbywgdmFyKC0ta2l0LWxpbmspKTstLWdvb2Q6IHZhcigtLWNvbG9yLXRleHQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QpKTstLWdvb2QtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QtYmcpKTstLWJhZDogdmFyKC0tY29sb3ItdGV4dC1kYW5nZXIsIHZhcigtLWtpdC1iYWQpKTstLWJhZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIsIHZhcigtLWtpdC1iYWQtYmcpKTstLXdhcm46IHZhcigtLWNvbG9yLXRleHQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4pKTstLXdhcm4tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4tYmcpKTstLXJpbmc6IHZhcigtLWNvbG9yLXJpbmctcHJpbWFyeSwgdmFyKC0ta2l0LXJpbmcpKTstLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sZywgMTRweCk7LS1yYWRpdXMtc206IHZhcigtLWJvcmRlci1yYWRpdXMtc20sIDlweCk7LS1mb250OiB2YXIoLS1mb250LXNhbnMsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBzYW5zLXNlcmlmKTstLW1vbm86IHZhcigtLWZvbnQtbW9ubywgdWktbW9ub3NwYWNlLCAiU0YgTW9ubyIsIE1lbmxvLCBtb25vc3BhY2UpOy0tc2hhZG93OiB2YXIoLS1zaGFkb3ctc20sIDAgMXB4IDJweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCksIDAgMnB4IDVweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCkpfSp7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uY2FyZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3gtc2hhZG93OnZhcigtLXNoYWRvdyk7bWF4LXdpZHRoOjU2MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0taW5zZXQtbGVmdCwgMHB4KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWluc2V0LXJpZ2h0LCAwcHgpfS5oZWFke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjE0cHggMThweCAwfS5oZWFkIC50aXRsZXtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC50aXRsZVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0jY29udGVudHtwYWRkaW5nOjEwcHggMThweCAxOHB4fS5yZWZyZXNoe21hcmdpbi1sZWZ0OjhweDthbGlnbi1zZWxmOmNlbnRlcjtmbGV4Om5vbmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O3BhZGRpbmc6MDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjEycyxjb2xvciAuMTJzfS5yZWZyZXNoOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLWZnKTtib3JkZXItY29sb3I6dmFyKC0tZmctc29mdCl9LnJlZnJlc2g6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNn0ucmVmcmVzaFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ucmVmcmVzaCBzdmd7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtkaXNwbGF5OmJsb2NrfS5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpraXQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMga2l0LXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uZW1wdHl7cGFkZGluZzoxOHB4IDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHh9LmhpbnR7bWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vdGV7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nOjAgMCAxMHB4fS5tb25ve2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctZmFpbnQpfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcH0uYmFkZ2Uub2t7Y29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uYmFkZ2Uud2FybiwuYmFkZ2UudG9kb3tjb2xvcjp2YXIoLS13YXJuKTtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpfS5iYWRnZS5lcnJ7Y29sb3I6dmFyKC0tYmFkKTtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyl9LmJ1eXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ0cHg7cGFkZGluZzoxMXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NTA7Y3Vyc29yOnBvaW50ZXJ9LmJ1eTpkaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1jb2xvcjp2YXIoLS1saW5lKTtjb2xvcjp2YXIoLS1mZy1mYWludCk7Y3Vyc29yOmRlZmF1bHR9LmJ1eS5hbHQsLmdob3N0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSl9Lmdob3N0e2ZsZXg6MTttaW4taGVpZ2h0OjQwcHg7cGFkZGluZzo5cHggMTBweDtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXJ9Lmxpbmt7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6NnB4IDAgMDtjb2xvcjp2YXIoLS1saW5rKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnF0eXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHh9LnF0eSBidXR0b257d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0ucXR5IHNwYW57bWluLXdpZHRoOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTB9YnV0dG9uOmZvY3VzLXZpc2libGUsYTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLXJpbmcpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEobWF4LXdpZHRoOjQzMHB4KXsuY2FyZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LmhlYWR7cGFkZGluZzoxMnB4IDE0cHggMH0jY29udGVudHtwYWRkaW5nOjhweCAxNHB4IDE0cHh9LmJ1eXttaW4taGVpZ2h0OjQ4cHg7Zm9udC1zaXplOjE1cHh9Lmdob3N0e21pbi1oZWlnaHQ6NDRweDtmb250LXNpemU6MTMuNXB4fS5xdHkgYnV0dG9ue3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7Zm9udC1zaXplOjE5cHh9LnJlZnJlc2h7d2lkdGg6MzRweDtoZWlnaHQ6MzRweH0uaGludCwubm90ZSwuZW1wdHl7Zm9udC1zaXplOjEzcHh9fUBtZWRpYShwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOm5vbmV9Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSNjb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHh9LmhlYWR7bWluLWhlaWdodDoyOHB4fS5ob21le2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MH0uaG9tZTpob3ZlcntvcGFjaXR5Oi43Mn0uaGVhZCAuYnJhbmR7bWF4LWhlaWdodDozNHB4O21heC13aWR0aDoxNTBweDtvYmplY3QtZml0OmNvbnRhaW59LmhlYWQgLnRpdGxle2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTVweDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmJhY2tidG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDExcHggNHB4IDhweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDttYXgtd2lkdGg6NDIlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2N1cnNvcjpwb2ludGVyfS5iYWNrYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmcpfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uY2FyZC5idXN5e29wYWNpdHk6LjYyfS5jYXJkLmJ1c3kgYnV0dG9uLC5jYXJkLmJ1c3kgaW5wdXQsLmNhcmQuYnVzeSBzZWxlY3R7cG9pbnRlci1ldmVudHM6bm9uZX0ubWVtYmVyY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5tZW1iZXJjaGlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lmxpbmt5e2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2NvbG9yOnZhcigtLWxpbmspO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LnAtd2Fze2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucC1tZW1iZXJ7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uc3VtLmdvb2Qgc3BhbjpsYXN0LWNoaWxke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmRlbW97ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LmRlbW8gYntmb250LXdlaWdodDo3MDB9LmNpdHlncm91cCsuY2l0eWdyb3Vwe21hcmdpbi10b3A6MTRweH0uY2l0eW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tYm90dG9tOjhweH0uY2l0eW5hbWUgc21hbGx7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwO29wYWNpdHk6Ljc1fS50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE5NnB4LDFmcikpO2dhcDoxMHB4fS50aWxle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tYmcpO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7cGFkZGluZzowfS50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1mZy1mYWludCl9LnQtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTthc3BlY3QtcmF0aW86MTYgLyAxMDtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnQtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnQtbWFya3tmb250LXNpemU6MzBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07b3BhY2l0eTouOTI7dGV4dC1zaGFkb3c6MCAxcHggMTJweCByZ2IoMCAwIDAgLyAyMiUpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udC1zaG90IGltZywuaGVybyBpbWd7ei1pbmRleDoxfS50LWJyYW5ke3otaW5kZXg6Mjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgxMTJweCwxZnIpIG1pbm1heCgxMTJweCwxZnIpIGF1dG8gMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbCwuc3RheSAuZ3Vlc3Rze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0uZmxleC1kYXRlc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZzoycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmZke2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O21pbi13aWR0aDo3OHB4O3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9LmZkOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mZC1kYXl7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtO2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOm5vd3JhcH0uZmQtcHJpY2V7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2NTA7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZmQub257YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Y3Vyc29yOmRlZmF1bHR9LmZkLm9uIC5mZC1kYXl7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtvcGFjaXR5Oi44NX0uZmQuYmVzdHtib3JkZXItY29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uZmQuYmVzdCAuZmQtcHJpY2UsLmZkLmJlc3QgLmZkLWRheXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5mZC5vdXQgLmZkLXByaWNle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtd2VpZ2h0OjUwMH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LnBhZ2Vye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweH0ucGFnZXIgLm57Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTU7Y3Vyc29yOmRlZmF1bHR9LmdvLnF1aWV0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NjIwfS5nby5kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1iYWQpO2NvbG9yOnZhcigtLWJnKX0ubm90ZXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNX0uZm9ybXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMXB4O21hcmdpbi10b3A6MTBweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZm9ybSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo4cHggOXB4fS5mb3JtIC50d297ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHh9LmNvbmZ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjE2cHggMTJweH0uY29uZiAuY29kZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MjA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb25mIC53aGVyZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMH0uY29uZiAud2hlbntmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS51bnBhaWR7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS51bnBhaWQgYntmb250LXdlaWdodDo3MjB9Lndhcm5ub3Rle2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6OXB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnRpbGUub3ZlcntvcGFjaXR5Oi44Mn0uYXNrZWQtbGluZXtmb250LXN0eWxlOml0YWxpY30uYXNrZWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmFza2VkIGJ7Zm9udC13ZWlnaHQ6NzIwO2NvbG9yOnZhcigtLWZnKX0uYXNrZWQuZmxhZ3tiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS13YXJuKX0uYXNrZWQuZmxhZyBie2NvbG9yOnZhcigtLXdhcm4pfS5hc2tze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0uYXNrcy10e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXAuYXNre2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4fS5jaGlwLmFza1thcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9Lm1vbmV5LW91dHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjYwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucHJvc2V7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOnByZS13cmFwfS5wcm9zZSBoNHttYXJnaW46MTRweCAwIDRweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmVtcHR5e2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MThweCA0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVycntiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey50aWxlc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjhweH0udC1tYXJre2ZvbnQtc2l6ZToyNHB4fS5zdGF5e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zdGF5IC5ndWVzdHN7Z3JpZC1jb2x1bW46MX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uc3RheSAuZ297Z3JpZC1jb2x1bW46Mjt3aWR0aDoxMDAlfS5yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgYWN0aW9uIiAicHJpY2UgYWN0aW9uIjtyb3ctZ2FwOjZweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IGFjdGlvbiIgInRodW1iIHByaWNlIGFjdGlvbiJ9LnJvdy53aXRodGh1bWIgLnRodW1ie3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7YWxpZ24tc2VsZjpzdGFydH0ucm93IC5wcmljZXt0ZXh0LWFsaWduOnN0YXJ0fS5mb3JtIC50d297Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19LmNtcC13cmFwe292ZXJmbG93LXg6YXV0bzttYXJnaW4taW5saW5lOi0ycHg7cGFkZGluZzoycHh9LmNtcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg3NnB4LDk2cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTEycHgsMWZyKSk7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOjhweH0uY21wLmZvdXJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg1NnB4LDcycHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoOTZweCwxZnIpKX0uY21wLWNvcm5lcntncmlkLWNvbHVtbjoxO2dyaWQtcm93OjEgLyBzcGFuIHZhcigtLWhlYWQtcm93cywgNSl9LmNtcC1oZWFke2Rpc3BsYXk6Z3JpZDtncmlkLXJvdzoxIC8gc3BhbiB2YXIoLS1oZWFkLXJvd3MsIDUpO2dyaWQtdGVtcGxhdGUtcm93czpzdWJncmlkO3Jvdy1nYXA6NnB4O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO21pbi13aWR0aDowO3BhZGRpbmctYm90dG9tOjEycHh9LmNtcC1oZWFkPi5jb2wtbmFtZSwuY21wLWhlYWQ+LmNvbC1wcmljZSwuY21wLWhlYWQ+LndoeSwuY21wLWhlYWQ+LnBje21hcmdpbi1pbmxpbmU6MTFweH0uY21wLWhlYWQ+LmNvbC1uYW1le21hcmdpbi10b3A6NHB4fS53aHkubm9uZXtib3JkZXI6MDtwYWRkaW5nOjB9LnBpY2ttYXJrLm5vbmV7dmlzaWJpbGl0eTpoaWRkZW59LmNtcCAua3ttYXJnaW4tdG9wOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtbmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmNvbC1wcmljZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb2wtcHJpY2Ugc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jb2wtcHJpY2Ugc21hbGwuc3Vie2Rpc3BsYXk6YmxvY2t9LndoeXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItaW5saW5lLXN0YXJ0OjJweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nLWlubGluZS1zdGFydDo4cHh9LnBje2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweDtmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDV9LnBjIGRpdntkaXNwbGF5OmZsZXg7Z2FwOjVweH0ucGMgLm17ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo3MDB9LnBjIC5wcm8gLm17Y29sb3I6dmFyKC0tZ29vZCl9LnBjIC5jb24gLm17Y29sb3I6dmFyKC0tZmctc29mdCl9LmNtcCAuaywuY21wIC52e2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NTtwYWRkaW5nOjZweCA4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY21wIC5re2dyaWQtY29sdW1uOjE7Y29sb3I6dmFyKC0tZmctc29mdCk7cG9zaXRpb246c3RpY2t5O2luc2V0LWlubGluZS1zdGFydDowO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5jbXAgLnZ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jbXAgLnYuYWx0LC5jbXAgLms6aGFzKCsudi5hbHQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czo2cHh9LnBpY2ttYXJre2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjNweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fS5kYXlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoyOHB4IDFmcjtnYXA6MTBweH0uZGF5bnVte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHh9LmRheW51bSBie2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5bnVtIGl7ZmxleDoxO3dpZHRoOjFweDtiYWNrZ3JvdW5kOnZhcigtLWxpbmUpfS5kYXlyb3c6bGFzdC1jaGlsZCAuZGF5bnVtIGl7ZGlzcGxheTpub25lfS5kYXlib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxNHB4O21pbi13aWR0aDowfS5kYXlsYWJlbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmRheW5vdGV7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9Lm1vbWVudHN7bGlzdC1zdHlsZTpub25lO21hcmdpbjoycHggMCAwO3BhZGRpbmc6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHh9Lm1vbWVudHMgbGl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczo4NHB4IDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5tb21lbnRzIC53aGVue292ZXJmbG93LXdyYXA6YW55d2hlcmU7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubW9tZW50cyAud2hhdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjR9Lm1vbWVudHMgLndoYXQgYntmb250LXdlaWdodDo2MjB9Lm1vbWVudHMgLndoYXQgc21hbGx7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6OTZweCAxZnI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpwb2ludGVyfS5wbGFuLXN0YXkgLnBzLXNob3R7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0Ojg0cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0ucGxhbi1zdGF5IC5wcy1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ucGxhbi1zdGF5IC5wcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6M3B4O3BhZGRpbmc6OXB4IDEwcHggOXB4IDA7bWluLXdpZHRoOjB9LnBsYW4tc3RheSAubmFtZXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLXN0YXkgLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4tc3RheSAucHMtcHJpY2V7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjIwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucGxhbi1uaWdodHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXRvcDoxcHggZGFzaGVkIHZhcigtLWxpbmUpO3BhZGRpbmctdG9wOjZweDtjdXJzb3I6cG9pbnRlcn0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fS5zdWdnZXN0e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21hcmdpbi10b3A6MTRweH0uc3VnZ2VzdCAuY2hpcHtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHggMTFweDtjb2xvcjp2YXIoLS1mZyl9LnN1Z2dlc3QgLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LnN1Z2dlc3QgLmNoaXA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZm9ybSBsYWJlbC5yZW1lbWJlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZvbnQtd2VpZ2h0OjQwMDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MH0uZm9ybSBsYWJlbC5yZW1lbWJlciBpbnB1dHttYXJnaW46MnB4IDAgMH0ucGxhY2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwLnBsYWNle2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweCAxMHB4O2NvbG9yOnZhcigtLWZnKX0uY2hpcC5wbGFjZSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNoaXAucGxhY2U6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmNoaXAucGxhY2UudGFie2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC5wbGFjZS50YWJbYXJpYS1leHBhbmRlZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5jaGlwLnBsYWNlOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LnN1Z2dlc3QgLmNoaXAuc2F5IHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpfS5maW5kZXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHh9LmZpbmRlciBpbnB1dHtmbGV4OjE7bWluLXdpZHRoOjA7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OXB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpfS5maW5kZXIgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0ucmVnaW9ue2Rpc3BsYXk6Z3JpZDtnYXA6MTBweH0uY291bnRyeW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjZweH0uY291bnRyeW5hbWUgc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0e2Rpc3BsYXk6Z3JpZDtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSl9LmRlc3Q6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOjB9LmRlc3QtY291bnRyeXtqdXN0aWZ5LXNlbGY6c3RhcnQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDpub25lO2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmxlZnR9LmRlc3QtY291bnRyeSBzbWFsbHtmb250LXdlaWdodDo0MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmRlc3QtY291bnRyeSAubntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3QtY291bnRyeTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5kZXN0LWNvdW50cnk6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZmluZGVyIC5nb3tmbGV4Om5vbmU7cGFkZGluZzo5cHggMThweDtmb250LXNpemU6MTNweH0uc29ydHMta3thbGlnbi1zZWxmOmNlbnRlcjtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1yaWdodDoycHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9LnNlYXJjaHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnNlYXJjaCAuc3RheXtwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lfS5zZWFyY2ggLndoZXJle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zZWFyY2ggLndoZXJlIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo5cHggMTFweH0uc2VhcmNoIC53aGVyZSBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5zZWFyY2ggLnN0YXkgLmdve3BhZGRpbmc6OXB4IDE0cHg7Zm9udC1zaXplOjEzcHh9LnQtdGFnc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjRweDttYXJnaW4tdG9wOjRweH0udC1mcm9tLnQtbm9uZXtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHh9LnN0YXkgLmdvLnF1aWV0e3BhZGRpbmc6OHB4IDEycHg7Zm9udC1zaXplOjEyLjVweH0uZmlsdGVyLXBhbmVse2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uZmdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udC1mcm9tIC50LXN1YntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MXB4fS5jaGlwLnNvcnRbYXJpYS1wcmVzc2VkPXRydWVdIHNtYWxse2NvbG9yOmluaGVyaXR9LmNoaXAudG9vbHtmb250LXdlaWdodDo2MDB9LmNoaXAudG9vbFthcmlhLWV4cGFuZGVkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgPGRpdiBjbGFzcz0iaGVhZCI+CiAgICAgICAgPCEtLSBUaGUgZ3JvdXAncyB3b3JkbWFyayBhcnJpdmVzIFdJVEggVEhFIERBVEEgYXMgYGxvZ29VcmxgLiBOb3RoaW5nIGlzCiAgICAgICAgICAgICBiYWtlZCBpbiBoZXJlOiBhIGxvZ28gY29tcGlsZWQgaW50byB0aGUgY2FyZCBpcyB0aGUgZmlyc3QgYnJhbmQncywKICAgICAgICAgICAgIGFuZCBldmVyeSBob3RlbCBncm91cCBhZnRlciB0aGVtIHdvdWxkIHdlYXIgaXQuIC0tPgogICAgICAgIDwhLS0gVGhlIHdheSBiYWNrLCBvbiBldmVyeSB2aWV3LiBXaXRob3V0IGl0IHRoZSB0cmlwLCB0aGUgYm9va2luZ3MgbGlzdAogICAgICAgICAgICAgYW5kIGEgY2FuY2VsbGVkIGJvb2tpbmcgYXJlIGFsbCBwbGFjZXMgYSBndWVzdCBjYW4gcmVhY2ggYW5kIG5vdAogICAgICAgICAgICAgbGVhdmUgKHJvYmluLCAyMDI2LTA5LTE4KS4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaG9tZSIgaWQ9ImhvbWUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiIGFyaWEtbGFiZWw9IkJhY2sgdG8gdGhlIGhvdGVscyI+CiAgICAgICAgICA8aW1nIGNsYXNzPSJicmFuZCIgaWQ9ImJyYW5kIiBhbHQ9IiIgaGlkZGVuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRpdGxlIiBpZD0idGl0bGUiPjwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8IS0tIE9uZSBzdGVwIGJhY2sgSU5TSURFIHRoZSBjYXJkLiBUaGUgYnJhbmQgYWJvdmUgZ29lcyBob21lLCB3aGljaCBpcyBhCiAgICAgICAgICAgICBkaWZmZXJlbnQgYW5zd2VyOyB0aGlzIGNvbWVzIGJhY2sgdG8gdGhlIG9uZSB0aGV5IHdlcmUgcmVhZGluZyAtIHRoZQogICAgICAgICAgICAgdGhyZWUgaG90ZWxzIHRoZXkgd2VyZSBjb21wYXJpbmcgd2hlbiB0aGV5IHRhcHBlZCBvbmUgKHJvYmluLAogICAgICAgICAgICAgMjAyNi0wOS0yMSkuIEhpZGRlbiB1bmxlc3MgdGhlcmUgaXMgc29tZXdoZXJlIHRvIGdvIGJhY2sgdG8sIGFuZAogICAgICAgICAgICAgY2xlYXJlZCB3aGVuZXZlciB0aGUgY29udmVyc2F0aW9uIHNlbmRzIGEgbmV3IGFuc3dlci4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFja2J0biIgaWQ9ImJhY2tidG4iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJhY2siIGhpZGRlbj48L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic3ViIiBpZD0ic3ViIj48L3NwYW4+CiAgICAgICAgPCEtLSBUaGUgdGllciwgb3IgdGhlIHdheSBpbi4gQSBtZW1iZXIgcmF0ZSBpcyBhIGZhY3QgYWJvdXQgZXZlcnkgcHJpY2UKICAgICAgICAgICAgIG9uIHRoZSBjYXJkLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBoZWFkZXIgcmF0aGVyIHRoYW4gb24gb25lIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbWJlcmNoaXAiIGlkPSJtZW1iZXJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+PC9idXR0b24+CiAgICAgICAgPCEtLSBUaGUgdHJpcCwgZnJvbSB0aGUgdG9wLiBUaGUgc2hvcHBpbmcgY2FyZCBsZWFybmVkIG9uIDIwMjYtMDktMTcgdGhhdAogICAgICAgICAgICAgYSBmb290ZXItb25seSBjYXJ0IG1lYW5zIHNjcm9sbGluZyBwYXN0IHR3ZW50eSB0aWxlcyB0byByZWFjaCBpdC4KICAgICAgICAgICAgIFNob3duIG9uY2UgdGhlIHRyaXAgaGFzIHNvbWV0aGluZyBpbiBpdCwgaGlkZGVuIG9uIHRoZSB0cmlwIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhlYWR0cmlwIiBpZD0iaGVhZHRyaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiIGhpZGRlbiBhcmlhLWxhYmVsPSJWaWV3IHRoZSB0cmlwIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIgogICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNCA4LjVoMTZ2MTFhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0xM0ExLjUgMS41IDAgMCAxIDQgMTkuNXoiIC8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDguNVY2YTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAydjIuNSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gaWQ9ImhlYWR0cmlwbiI+MDwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjxkaXYgY2xhc3M9ImVtcHR5Ij5Mb2FkaW5n4oCmPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K', 'base64').toString('utf8');
|
|
6
6
|
/** sha256 of widget/src + widget/index.html at build time - the drift guard reads this. */
|
|
7
|
-
export const HOTEL_CARD_SOURCE_SHA = '
|
|
7
|
+
export const HOTEL_CARD_SOURCE_SHA = 'be930c53fd5141d5ee801b974ccdbd70e7c69f5f4e709f1151ed28f1454a7bfd';
|
|
8
8
|
//# sourceMappingURL=card.generated.js.map
|